VBA では、他のプログラミング言語と同様に、変数と定数を使用して値を格納します。 名前が示すように、変数は変化する可能性がありますが、定数は固定値を格納します。
たとえば、定数 Pi 値 3,14159265 を格納します... 数値「Pi」はプログラムの実行中に変化しませんが、そのような値を定数として格納する方が便利です。
同時に、変数を使用できます sVAT_Rate 購入した商品の VAT 率を保存します。 変数値 sVAT_Rate 購入した商品によって異なる場合があります。
データ型
すべての変数と定数は、特定のデータ型です。 次の表は、VBA で使用されるデータ型と、可能な値の説明と範囲を示しています。
データ・タイプ | サイズ | 説明 | 値の範囲 |
---|---|---|---|
バイト | 1バイト | 正の整数。 バイナリデータによく使用される | 0から255へ |
ブーリアン | 2バイト | True または False のいずれかになります | 正しいか間違っているか |
整数 | 2バイト | 整数 (小数部なし) | -32から+768 |
長い | 4バイト | 大整数 (小数部なし) | от -2 147 483 648 до +2 147 483 647 |
4バイト | 単精度浮動小数点数 | -3.4e38 から +3.4e38 まで | |
ダブル | 8バイト | 倍精度浮動小数点数 | -1.8e308 から +1.8e308 まで |
通貨 | 8バイト | 小数点以下の桁数が固定された浮動小数点数 | от -922 337 203 685 477.5808 до +922 337 203 685 477.5807 |
日付 | 8バイト | 日付と時刻 – 日付型のデータは浮動小数点数で表されます。 この数値の整数部分は日付を表し、小数部分は時刻を表します。 | 1 年 100 月 31 日から 9999 年 XNUMX 月 XNUMX 日まで |
オブジェクト | 4バイト | オブジェクト参照 | 任意のオブジェクト参照 |
文字列 | 変わってきている | キャラクターセット。 String 型は、固定長または可変長にすることができます。 可変長でより一般的に使用される | 固定長 – 最大約 65 文字。 可変長 – 最大約 500 億文字 |
バリアント | 変わってきている | 日付、float、または文字列を含めることができます。 このタイプは、入力されるデータのタイプが事前にわからない場合に使用されます。 | 数値 – 倍精度、文字列 – 文字列 |
明らかに、上記の表を使用して適切なデータ型を選択すると、より経済的にメモリを使用できます (たとえば、データ型を選択する 整数 を取得する必要がある者 長い or を取得する必要がある者 ダブル)。 ただし、よりコンパクトなデータ型を使用する場合は、コードが不釣り合いに大きな値をそれらに適合させようとしないように注意する必要があります。
変数と定数の宣言
翻訳者注: VBA の変数について言えば、もう XNUMX つの非常に重要な点に言及する価値があります。 変数を宣言しても値を代入しない場合、デフォルト値で初期化されます。
• テキスト文字列は空の文字列で初期化されます。
• 数字 — 値 0;
• タイプ変数 ブーリアン - 間違い;
• 日付 – 30 年 1899 月 XNUMX 日。
変数または定数を使用する前に、宣言する必要があります。 これを行うには、次の単純なコード行をマクロに追加します。
Dim Имя_Переменной As Тип_Данных
上記のコード行で 変数名 コードで使用される変数の名前です。 データ・タイプ この記事で少し前に示した表のデータ型の XNUMX つです。 例えば:
Dim sVAT_Rate As Single Dim i As Integer
定数も同様に宣言されますが、定数を宣言するときは、その値をすぐに示す必要があります。 たとえば、次のようにします。
Const iMaxCount = 5000 Const iMaxScore = 100
Excel で変数を宣言する必要はありません。 デフォルトでは、Excel で入力されているが宣言されていないすべての変数に型があります。 バリアント 数値とテキスト値の両方を受け入れることができます。
したがって、プログラマーはいつでも (宣言されていなくても) 新しい変数を使用でき、Excel はそれを型の変数として扱います。 バリアント. ただし、これを行うべきではない理由がいくつかあります。
- メモリ使用量と計算速度。 データ型を示す変数を宣言しない場合、デフォルトでその型に設定されます バリアント. このデータ型は、他のデータ型より多くのメモリを使用します。 変数ごとに数バイト余分にあるとは思えないかもしれませんが、実際には、プログラムは何千もの変数を持つことができます (特に配列を操作する場合)。 したがって、次のような変数によって使用される余分なメモリ バリアント、タイプの変数と比較 整数 or 、合計するとかなりの額になる可能性があります。 さらに、タイプの変数を使用した操作 バリアント 他の型の変数よりもはるかにゆっくりと実行されます。 バリアント 計算が大幅に遅くなる可能性があります。
- 変数名のタイプミス防止。 すべての変数が宣言されている場合、VBAステートメントを使用できます- Option Explicit (後で説明します) 宣言されていない変数をすべて識別するためです。 これにより、変数名の書き間違いによるプログラムエラーが発生しなくなります。 たとえば、次の名前の変数を使用します。 sVAT_Rate、タイプミスをして、この変数に値を割り当てて、「VATRate = 0,175」と書くことができます。 これからは変数が sVAT_Rate 値 0,175 が含まれている必要がありますが、もちろん含まれていません。 使用されているすべての変数の必須宣言モードが有効になっている場合、変数が見つからないため、VBA コンパイラはすぐにエラーを示します。 消費税率 発表されたもののうち。
- 変数の宣言された型と一致しない値を強調表示します。 特定の型の変数を宣言して、別の型のデータを代入しようとすると、エラーが発生し、修正しないままにしておくと、プログラムがクラッシュする可能性があります。 一見すると、これは変数を宣言しない正当な理由のように思えるかもしれませんが、実際には、変数の XNUMX つが受け取るはずだった間違ったデータを受け取ったことが判明する前よりもはるかに優れています。 そうしないと、プログラムを実行し続けると、結果が不正確で予期しないものになる可能性があり、エラーの原因を見つけるのがはるかに難しくなります。 マクロが「正常に」実行される可能性もあります。 その結果、エラーは見過ごされ、間違ったデータで作業が続行されます。
この点で、誤ったデータ型を検出し、コード内のそのようなエラーをできるだけ早く修正することが望ましいです。 これらの理由から、VBA マクロを記述するときはすべての変数を宣言することをお勧めします。
Option Explicit
演算子 Option Explicit VBA コードで使用されるすべての変数を宣言し、宣言されていないすべての変数にコンパイル中 (コードの実行開始前) にエラーとしてフラグを立てます。 この演算子を適用するのは難しくありません。VBA ファイルの一番上に次の行を書くだけです。
Option Explicit
常時挿入したい場合 Option Explicit 作成された各新しい VBA モジュールの先頭に追加すると、これは自動的に行われます。 これを行うには、オプションを有効にする必要があります 変数宣言が必要 VBAエディタの設定で。
これは次のように行われます。
- Visual Basic Editor メニューから、 豊富なツール群 > オプション
- 表示されるダイアログで、タブを開きます エディター
- チェックボックスをオンにします 変数宣言が必要 を押し OK
有効にすると、文字列 Option Explicit 作成された各新しいモジュールの先頭に自動的に挿入されます。
変数と定数の範囲
宣言された各変数または定数には、独自の制限されたスコープ、つまり、この変数が存在するプログラムの制限された部分があります。 スコープは、変数または定数の宣言がどこで行われたかによって異なります。 たとえば、変数 sVAT_Rate、関数で使用されます 総費用. 次の表では、変数のスコープに関する XNUMX つのオプションについて説明します。 sVAT_Rateモジュール内の XNUMX つの異なる位置で宣言されています。
Option Explicit Dim sVAT_Rate As Single Function Total_Cost() As Double ... End Function | 変数が sVAT_Rate モジュールの最初で宣言されている場合、この変数のスコープはモジュール全体になります (つまり、変数 sVAT_Rate このモジュールのすべての手順で認識されます)。 したがって、関数内の場合 総費用 変数 sVAT_Rate 何らかの値が割り当てられ、同じモジュール内で実行される次の関数は変数を使用します sVAT_Rate 同じ意味で。 ただし、別のモジュールにある関数が呼び出された場合、その関数の変数 sVAT_Rate わからなくなります。 |
Option Explicit Function Total_Cost() As Double Dim sVAT_Rate As Single ... End Function | 変数が sVAT_Rate 関数の先頭で宣言 総費用の場合、そのスコープはこの関数のみに限定されます (つまり、関数内)。 総費用、変数を使用できます sVAT_Rate、しかし外側ではありません)。 使用しようとすると sVAT_Rate 別の手順では、この変数が関数の外で宣言されていないため、VBA コンパイラはエラーを報告します。 総費用 (演算子が使用されている場合 Option Explicit). |
上記の例では、変数はキーワードを使用してモジュール レベルで宣言されています。 薄暗い. ただし、宣言された変数を他のモジュールで使用できるようにする必要がある場合があります。 そのような場合、キーワードの代わりに変数を宣言するには 薄暗い キーワードを使用する必要があります 公共.
ちなみに、モジュールレベルで変数を宣言するには、キーワードの代わりに 薄暗い 使えるキーワード プライベート、これは、この変数が現在のモジュールでのみ使用されることを意図していることを示します。
キーワードを使用して定数を宣言することもできます。 公共 и プライベート、しかしキーワードの代わりに CONST、それと一緒に。
次の例は、キーワードの使用法を示しています 公共 и プライベート 変数と定数に適用されます。
Option Explicit Public sVAT_Rate As Single Public Const iMax_Count = 5000 ... | この例では、キーワード 公共 変数の宣言に使用 sVAT_Rate および定数 iMax_Count. この方法で宣言された要素のスコープは、現在のプロジェクト全体になります。 これは、 sVAT_Rate и iMax_Count どのプロジェクト モジュールでも使用できます。 |
Option Explicit Private sVAT_Rate As Single Private Const iMax_Count = 5000 ... | この例では、変数を宣言するには sVAT_Rate および定数 iMax_Count 使用したキーワード プライベート. これらの要素のスコープは、現在のモジュールです。 これは、 sVAT_Rate и iMax_Count 現在のモジュールのすべてのプロシージャで使用できますが、他のモジュールのプロシージャでは使用できません。 |