0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VBA学習備忘録_10_変数・定数に関する諸注意

0
Last updated at Posted at 2026-03-14

の続き


①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 ベーシック テキスト&問題集

Amazonリンク

https://www.amazon.co.jp/%E3%81%93%E3%81%AE1%E5%86%8A%E3%81%A7%E5%90%88%E6%A0%BC-%E6%B0%B8%E4%BA%95%E9%9B%85%E6%98%8E%E3%81%AEExcel-VBA-%E3%83%99%E3%83%BC%E3%82%B7%E3%83%83%E3%82%AF-%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88/dp/4046071524?tag=googhydr-22&source=dsa&hvcampaign=books&gad_source=1

②エクセルの神髄 第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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?