このページの内容について
このページは、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」は記述しても省略しても動きは同じです。
定数を使ったサンプル(応用編)
このサンプルは難易度が高いので読み飛ばし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つ記述していますが、それぞれ同じ結果になります。見比べるとわかるように、定数を使用しない場合、宣言部がない分コードは短くなっています。しかし、処理部分のコードはひとつひとつの単語が長く、読みづらいです。定数を使用することで処理部分をすっきりさせることができ、また、書き換えができないため誤って書き換えてしまうこともなくなります。
Comment