Vba 変数について知っておくべきことすべて
変数VBA
VBA では、変数はそれ自体がシステムに保存されるストレージ ボックスのようなものですが、変数はそこに値を保存でき、その値をコードで使用し、必要に応じてその値を変更できます (名前が示すように、「変数」) 」は価値が固定されていないものです)。
変数を宣言するには、次の簡単な手順に従う必要があります。
- 最初に「Dim」というキーワードを使用します。
- 変数の名前を指定します。
- 名前の後にキーワード「As」を使用します。
- 割り当てたい値に基づいて変数の「データ型」を指定します。
ここでは名前「startDate」を使用し、データ型「Date」を指定しました。変数を宣言した後、その変数に値を割り当てることができます。
Dim startDate As Date startDate = “11/10/2018”
これで、コード内で開始日を使用するたびに、Excel では指定された日付が使用されます。
データ型
VBA では、データ型は基本的に、変数または定数に値を格納するときに指定する必要があるデータ型です。たとえば、日付を変数に格納する場合は、まずその日付変数をデータ型として宣言する必要があります。
データ型の説明
VBA で使用できるデータ型の完全なリストを次に示します。
データ・タイプ | 使用バイト数 | 値の範囲 |
---|---|---|
バイト | 1バイト | 0~255 |
ブール値 | 2バイト | 正しいか間違っているか |
全体 | 2バイト | -32.768 ~ 32.767 |
Long (長整数) | 4バイト | -2,147,483,648 ~ 2,147,483,647 |
一人で | 4バイト | 負の値の場合は -3.402823E38 ~ -1.401298E-45。正の値の場合は 1.401298E-45 ~ 3.402823E38 |
ダブル | 8バイト | 負の値の場合は -1.79769313486231E308 ~ -4.94065645841247E-324。正の値の場合は 4.94065645841247E-324 ~ 1.79769313486232E308 |
現金 | 8バイト | -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807 |
10進数 | 14バイト | +/-79 228 162 514 264 337 593 543 950 335 小数点なし。 +/-7.9228162514264337593543950335 (小数点以下 28 桁) |
日付 | 8バイト | 100年1月1日から9999年12月31日まで |
物体 | 4バイト | 任意のオブジェクト参照 |
チェーン(長さ可変) | 10バイト + 文字列長 | 0~20億程度 |
チェーン(固定長) | チェーンの長さ | 1~約65,400 |
バリアント (数字付き) | 16バイト | Double の範囲までの任意の数値 |
バリエーション(文字あり) | 22バイト+文字列長 | 可変長文字列と同じ範囲 |
ユーザー定義の | 様々な | 各要素の範囲は、そのデータ型の範囲と同じです。 |
これは、変数と定数のデータ型を宣言する場合に強くお勧めします。
変数または定数のデータ型を指定すると、データの有効性が保証され、無効なデータ型の入力が防止されます。データ型を省略すると、VBA は変数にバリアント データ型を適用します。これが最も柔軟であり、VBA はデータ型が何であるべきかを推測しません。
ヒント:データ型の指定を省略しない最善の方法は、コードを開始する前にモジュールの最上部で明示的なオプションを使用することです。
明示的または暗黙的に
変数は明示的または暗黙的に宣言できます。明示的な宣言とは、変数に値を割り当てる前に、変数を宣言してその値を設定することを意味します。これの利点は、定義すると、そのデータ型 VBA が常にその形式でデータを保存することです。
以下に例を示します。
Dim myDate As Date
したがって、この VBA に値を保存すると、常に日付形式が適用されます。ただし、暗黙的な宣言を使用すると、この明示的な宣言ステートメントを煩わす必要はありません。代わりに、変数の値を設定し、それをコード ステートメントで使用します。暗黙的な宣言では、型が指定されていないため、VBA はデータを Variant 変数型に格納します。
言い換えれば、宣言せずにコード内で変数を使用するだけの場合、それは暗黙的になります。以下は暗黙的な宣言の例です。
myDate = “11/10/1990”
このようにして、値を変数に代入し、それをコード ステートメントで使用することができます。私に言わせれば、常に、つまり変数を使用する前に宣言する方が良いということです。これは良い習慣であるだけでなく、コードの実行が速くなり、理解しやすくなります。
静的変数
さて、変数は値を変更できる場所だと言いましたが、これは違います。通常の変数では、プロシージャが完了すると、変数に格納された値は VBA のメモリから削除されますが、この値を失いたくない場合は、この変数を静的にすることができます。
変数を静的にして値を保持するには、「Dim」を使用する代わりに「Static」キーワードを使用します。
変数に名前を付ける
変数には任意の名前を付けることができます (これらのルールは定数とプロシージャ名にも適用されます)。ただし、いくつかのルールに従う必要があります。
- アルファベット、数字、および一部の句読点を使用できますが、名前の最初の文字はアルファベットである必要があります。
- スペースやピリオドは名前に使用できる文字ではありませんが、アンダースコアを使用すると名前を読みやすくすることができます。
- 名前に特殊文字を使用することはできません。
- 名前の長さは 254 文字までですが、意味のない名前を使用します。
- 名前に使用できない単語である予約語が多数あります。これらの単語のいずれかを使用しようとすると、エラー メッセージが表示されます。
- VBA は大文字と小文字を区別しません。
範囲
この時点で、プロシージャと、どのプロシージャがどの状況で役立つかがわかり、変数とそのデータ型を定義する方法についても学びます。
次に重要なことは、スコープ、つまり可用性を理解することです。ここで使用できます。変数を定義するとき、スコープはその変数をホスト プロシージャの外部で使用できるかどうかを定義します。変数のスコープを定義するには 3 つの方法があります (定数、およびプロシージャ全体で均等)。
- プロシージャ レベル:変数は、宣言したのと同じプロシージャ内でのみ使用できます。
- モジュール レベル (プライベート):モジュール内のすべてのプロシージャから変数にアクセスできるようにします。
- モジュール レベル (パブリック):すべてのモジュールのすべてのプロシージャから変数にアクセスできるようにします。
変数のデフォルトのスコープは、この変数が宣言されているプロシージャ (プロシージャ レベル) です。
しかし、現実世界の話をさせてください。
私はコワーキングスペースで仕事をしていますが、私が座っている場所は3階建てのビルの1階です。ほぼ毎日同じ席に座っています。したがって、プロシージャ レベルのスコープで変数を宣言した場合、その変数は同じプロシージャ内でのみ使用できます。私が毎日同じフロアの同じ席に座っているのと同じです。でも、もっと言っておきますが、私は1階に座っていますが、他の階のどの席でも利用できます。また、以下のスナップショットでは、プロシージャを開始する前に Private キーワードを使用してモジュールの先頭で変数「myName」を宣言し、それを 3 つのコードすべてで使用しました。このモジュールは、さまざまなフロア (プロシージャ) がある建物と考えてください。モジュールの先頭で変数をすでに宣言しているため、このモジュールのどのプロシージャでも使用できます。これはプライベート モジュール レベルのスコープと呼ばれます。さて、これが最後のことです。私のオフィスは全国のさまざまな都市に支店があり、そこに行けば、それらのオフィスに行って、必要に応じてどの席でも使用できます。したがって、ワークブックにさまざまなモジュールがある場合、1 つの変数を Public として宣言することで、これらすべてのモジュールで使用できます。
関連するチュートリアル
- VBA でグローバル (パブリック) 変数を宣言する
- VBA で範囲またはセルを変数として使用する
- VBA の明示的なオプション ステートメント
- メッセージボックス内の変数