EB000015_VBAエキスパート(ExcelVBAベーシック)合格講座/第十五回:定数

VBAエキスパート(ExcelVBAベーシック)合格講座/第十五回:定数 ExcelVBA Basic

このページの内容について

このページは、VBAエキスパート(ExcelVBAベーシック)試験合格講座の第十五回記事です。第公式テキスト第5章「変数と定数」の内容について解説します。1時間の講義でお話する程度の分量です。講座受講者の復習での利用を想定しています。

定数

定数とは

変数は「データを一時的に格納しておく記憶域のこと」です。また、変数は代入演算子を使用してマクロの実行中に何度でも書き換えることができます。定数とは、変数と同じく「データを一時的に格納しておく記憶域のこと」ですが、書き換えることができません。

定数の書式

Const 定数名 As 型名 = 値

変数を宣言するときに使用する「Dim」を「Const」に置き換え、型指定後に続けて代入演算子を記述し、定数に入れる値を指定します。
例)Const TAIYO as String = “Sun”
「TAIYO」という定数を宣言し「Sun」という値を指定しています。

サンプルコード(クリックでコピー)

Private Sub Test_Const()

Const TAIYO As String = "Sun"

Debug.Print TAIYO

TAIYO = "Cloud"

End Sub

実行結果

上記のサンプルは実行しようとしてもエラーが発生します。定数を書き換えようとしているためです。このように、書き換えができないようVBAが管理してくれるため、プログラムを通じて変更する予定のないデータは定数で管理すると事故が少なくなります。

定数のスコープ

変数と同様です。宣言する場所や宣言の方法によって使用できる範囲を変更することができます。

サンプルコード(クリックでコピー)

Private Const KUMO As String = "cloud"
Const TAIYO As String = "Sun"

Private Sub Test_ModuleConst()

Debug.Print TAIYO

End Sub
Private Sub Test_PrivateConst()

Debug.Print KUMO

End Sub

実行結果

上記のサンプルはどちらも定数の内容をイミディエイトウィンドウに出力します。「Private」は記述しても省略しても動きは同じです。

定数も変数同様にパブリック(グローバル)定数として宣言することができます。宣言の方法はプロシージャの外に「Public」を付けて定数を宣言するだけです。サンプルではモジュールをまたぐ表現が難しいので自分で試してみてください。

定数を使ったサンプル(応用編)

このサンプルは難易度が高いので読み飛ばしOKです。

サンプルコード(クリックでコピー)

Private Property Get wsh() As Object

  Static Obj As Object
  If Obj Is Nothing Then Set Obj = CreateObject("WScript.Shell")
  Set wsh = Obj

End Property
Private Sub Test_YesConst()

Const URL_TOP As String = "https://funcref.com/{@page}"
Const LESSER As String = "lesserscraping/"
Const VBA_EX As String = "vbaexpertlesson/"
Const FIND_KEY As String = "{@page}"

Dim url As String
url = Replace(URL_TOP, FIND_KEY, VBA_EX)
Call wsh.Run(url)

url = Replace(URL_TOP, FIND_KEY, LESSER)
Call wsh.Run(url)

End Sub
Private Sub Test_NoConst()

Dim url As String
url = Replace("https://funcref.com/{@page}", "{@page}", "vbaexpertlesson/")
Call wsh.Run(url)

url = Replace("https://funcref.com/{@page}", "{@page}", "lesserscraping/")
Call wsh.Run(url)

End Sub

定数を使用する理由

上記、サンプルコードを実行すると、マクロを実行する人(ユーザー)のPCに設定されているデフォルトのブラウザを使用して当サイトの「VBAエキスパート」「LesserScraping」ページをそれぞれ開きます。プロシージャは2つ記述していますが、それぞれ同じ結果になります。見比べるとわかるように、定数を使用しない場合、宣言部がない分コードは短くなっています。しかし、処理部分のコードはひとつひとつの単語が長く、読みづらいです。定数を使用することで処理部分をすっきりさせることができ、また、書き換えができないため誤って書き換えてしまうこともなくなります。

【PR】VBAエキスパート試験対策記事

当サイトでは、オデッセイコミュニケーションズ社が運営する試験であるVBAエキスパートExcel VBA ベーシックExcel VBA スタンダード)の出題範囲をベースに用語や各種関数の解説などを行っています。試験合格に向けて必須と言われる公式テキストに沿って解説をしています。受験をするか悩んでいる方、テキストとは別視点の解説を見てみたい方、受験はしないがExcelVBA(マクロ)に興味がある方へ向けた記事です。

Comment