の続き
①Publicで定義したモジュールレベル変数は全てのモジュールの全てのプロシージャで使用可能、Privateで定義したモジュールレベル変数は同じモジュール内でしか使えない
詳しくは主な参考資料②
②VBAでは変数を宣言すると、初期値を代入するコードを書かなくても自動的にデフォルト値が多くの場合入る
VBAの数値型は宣言した時点で 0 が自動的に代入される
③プロシージャ内において変数宣言をした場合、そのプロシージャを実行する度に変数が初期化される(=デフォルト値に戻る)
変数「i」をモジュールレベルで宣言 ⇒ プロシージャの実行後も値が保持される
⇒以下のマクロを4回実行すると、表示されるメッセージボックスの値は「4」
Dim i As Long
Sub Sample()
i = i + 1
MsgBox i
End Sub
変数「i」をプロシージャレベルで宣言 ⇒ プロシージャの実行毎に値が初期化される
⇒以下のマクロを4回実行すると、表示されるメッセージボックスの値は「1」
Sub Sample()
Dim i As Long
i = i + 1
MsgBox i
End Sub
④文字列を変数として定義していても、それを再度""(ダブルクォーテーション)で囲むと文字列として扱われ、変数の機能が失われる。また演算子記号も""で囲むと文字列として扱われる
⑤VBAにおいても(「再代入できない」という意味での)「定数」は以下のように、決めておく値まで最初の段階で書く
Const 定数名 As (データ型) = 値
'データ型を書かなかった場合、Variant型となる
なお、複数個の定数を1行で記述したい場合、以下のように書く(※設定分の初期値が必要)
Const 定数名1 As (データ型1) = 値1,定数名2 As (データ型2) = 値2
逆に変数宣言時に以下のように値を代入しようとするとエラーになる
Dim C As Long = A + B '代入部分がエラーになる
⑥暗黙の型変換がある
主な参考資料
①この1冊で合格! 永井雅明のExcel VBA ベーシック テキスト&問題集
②エクセルの神髄 第108回.変数の適用範囲(スコープ,Private,Public)
https://excel-ubara.com/excelvba1/EXCELVBA408.html
③Microsoft公式 変数の有効期間について
https://learn.microsoft.com/ja-jp/office/vba/language/concepts/getting-started/understanding-the-lifetime-of-variables