vba variables option explicit vba
このチュートリアルでは、VBA変数を宣言して使用する方法について説明します。オプションの明示的変数、変数スコープ、静的変数、定数変数についても学びます。
コンピュータでは、すべてのデータ値がメモリまたはコンピュータストレージに保存されます。これらの値にアクセスするには、その値に関連付けられた名前を指定する必要があります。これは、プログラミング言語では変数と呼ばれます。
このチュートリアルでは、さまざまなタイプの変数スコープとともに変数を宣言および定義する方法を学習し、静的変数と定数変数についても詳しく説明します。
=> VBAトレーニングチュートリアルのA〜Zを確認するには、ここをクリックしてください
学習内容:
VBA変数
変数 コンピュータストレージの値のプレースホルダーのようなものです。変数はさまざまな種類の値を保持でき、それらの値はコードの実行中に変更される可能性があります。
すべての変数には、値にアクセスするために使用される名前があります。 VBAには、名前の選択に関して特定の制約があります。
以下に、制約のリストを示します。
- 変数の名前は255文字を超えることはできません。
- 変数名を数字で始めることはできません。
- !、@、&、。、#などの特殊文字で開始したり、スペースを含めることはできません。
- キーワードは変数名とは見なされません。
これらの制約に違反すると、コンパイラはエラーをスローします
例:
有効な変数名: varName、Result12、First_Number
無効な変数名: 123abc、#number、Sub、abc.123
最初の数字(単語間にスペースは使用できません)
VBA変数の宣言
を使用する必要があります なし 変数を宣言するキーワード。変数を宣言する際には2つのセクションがあります。 1stは変数名で2ndデータ型と呼ばれる変数に格納される値の型です。
構文:Dim VariableName As DataType
例:
- 整数としての薄暗いMyAge
- My_Percentageを2倍に暗く
- 文字列としての薄暗いFull_Name
ここでは、変数にこれらのタイプのデータのみを格納する必要があることをコンパイラに明示的に指示しています。変数に定義された値がデータタイプと一致しない場合、VBAはコンパイラタイプの不一致エラーをスローします。
例:
Sub example1() Dim Total_Marks As Integer Total_Marks = “” MsgBox Total_Marks End Sub
ただし、変数のデータ型がわからない場合は、VBAでデータ型をスキップできます。下記の構文も有効です。
Dim VariableName
変数のデータ型を宣言しない場合、VBAはそれをVariantデータ型として扱い、整数、文字列、ワークブックなどの任意のタイプのデータ整数を受け入れるようにバインドされます。同じプログラムで、バリアント変数は、文字列値、整数値、およびその他のタイプも受け入れることができます。
Sub VarientVariable() Dim Total_Marks Total_Marks = '' MsgBox Total_Marks Total_Marks = 544.33 MsgBox Total_Marks Total_Marks = 522 MsgBox Total_Marks End Sub
Total_Marksはバリアント変数であるため、前のコードとは異なり、コンパイラは以下に示すようにエラーをスローしません。
注意: VBAでは、実際に変数を宣言しなくても変数を使用できることに注意してください。
以下のサンプルコードでも適切な結果が得られます。この場合、VBAは変数をVariantデータ型として自動的に扱います。これは暗黙の宣言と呼ばれます。
Sub VariantVariable() Total_Marks = 444 MsgBox Total_Marks End Sub
変数を宣言する利点
- デバッグが簡単: 変数を使用する前に、変数を宣言することをお勧めします。タイプミスやタイプミスなどのエラーを早期に理解できるため、プログラムのロジックから逸脱するリスクが軽減されます。
- 読みやすさの向上: チームとして、多くの人がコードを見て、変数を宣言すると、変数が取ると予想される値のタイプをすべての人が理解できるようになり、ユーザーがプログラムの実行中に適切な入力値を入力できるようになります。
- 収納スペース: 変数を宣言しない場合、VBAは、他のデータ型と比較した場合に、メモリ内で最大のスペース(16バイトから22バイト)を使用するVariantデータ型として扱います。 例えば、 1バイトしかかからないByte型の変数を使用していて、宣言しない場合、VBAは16バイトのスペースを予約することになり、メモリを浪費します。
オプション明示
すべての変数が明示的に宣言されていることを確認するには、それらを使用する前にOptionExplicitステートメントを使用する必要があります。そのモジュールの手順の最初に使用する必要があります。
OptionExplicitステートメントを使用しない例を見てみましょう。
Sub example3() Dim First_name As String First_name = ' abs' MsgBox Firt_Name End Sub
コードを実行すると(F5キーを押すか、ツールバーの実行ボタンを押す)、空白のメッセージボックスが表示されます。
変数を宣言したにもかかわらず、Msgbox Firt_Nameのタイプミスのため、結果ボックスが空白になりました。 Option Explicitは、このようなエラーを排除するのに役立ちます。
OptionExplicitを使用して同じコードをやり直してみましょう。手順を開始する前に、OptionExplicitを入力してください。
Option Explicit Sub VarientVariable() Dim First_name As String First_name = ' abs' MsgBox Firt_Name End Sub
ここで、コードを実行すると(ツールバーのF5または[実行]ボタンを押す)、コンパイラエラーが発生します。
VBAに追加させることができます オプション明示 自動的に。
VBエディターでは、 [ツール]-> [オプション]-> [変数宣言が必要]を選択します。
今 オプション明示 新しいモジュールを挿入したり、新しいマクロを記録したりするたびに、自動的に追加されます。
注意: Option Explicitは、既存のVBAコードには追加されません。必要に応じて手動で追加する必要があります。
変数への値の割り当て
等しい記号(=)を使用して、変数に値を割り当てることができます。 Excelでセルを参照する場合は、範囲関数を使用する必要があります。
以下のコードを参照してください。
Sub varValue() Dim var1 As Integer var1 = 10 Range('C1:C14').Value = var1 MsgBox var1 End Sub
上記の例では、var1は(=)を使用して値10を直接格納する変数であり、Range関数はExcelセルC1からC14に10であるvar1値を入力するのに役立ちます。
変数のスコープ
プログラム内のすべての変数には、定義されたスコープがあります。このスコープは、変数が表示される領域、つまり変数を使用できるモジュールまたは使用できない領域をプログラムに通知します。
VBAには、変数に定義された3種類のスコープがあります。
- 手順レベルのスコープ
- プライベートモジュールレベルのスコープ
- パブリックモジュールレベルのスコープ
手順レベルの範囲
プロシージャ、つまりサブまたは関数で定義された変数は、それらのみを使用できます。これらは他の手順では表示されません。
例:
Option Explicit Sub ProcScope() Dim msg As String vartext = 'Varible is visible only inside this Sub' MsgBox vartext End Sub Sub VarNotVisible() MsgBox vartext End Sub
上記のコードを実行すると、最初のSubの場合、msgboxは適切な結果を返しますが、2番目のSubの場合、コンパイラエラーがスローされます。頂点変数は1に対してのみ表示されるためstサブであり、2ではありませんnd。 Option Explicitを使用したため、2で変数を定義しないとコンパイラエラーが発生します。ndサブ。
プライベートモジュールレベルのスコープ
これらの変数は、定義されたモジュールのすべてのプロシージャで使用できます。デフォルトでは、で宣言された変数 なし プライベートとしてスコープされます。ただし、読みやすくするためにプライベートを追加することをお勧めします。
同じ例を考えてみましょうが、プロシージャの外で変数を宣言します。
Option Explicit Private vartext As String ‘ Dim vartext As String can also be used Sub PrivateScope() vartext = 'Varible is visible to all procedures' MsgBox vartext, ,”Result from Sub1” End Sub Sub VarIsVisible() MsgBox vartext, ,”Result from Sub2” End Sub
実行後、両方のプロシージャがエラーなしで適切な結果を返すことがわかります。明確に理解するために、メッセージボックスに正しいタイトルを追加しました。
パブリックモジュールレベルのスコープ
これらのタイプの変数は、プロジェクトのすべてのプロシージャとすべてのモジュールに表示されます。 2つのモジュールを挿入します。 (シートを右クリックして、[挿入]-> [モジュール]を選択します)。
以下のコードを1つのモジュールに入力します。
Option Explicit Public vartext As String Sub PrivateScope() vartext = 'Varible is visible to all modules' MsgBoxvartext, , 'Result from Sub1' End Sub
2番目のモジュールに以下のコードを入力します。
Option Explicit Sub VarIsVisible() MsgBoxvartext, , 'Result from Sub2' End Sub
結果を以下に示します。
実際の例を考えて、すべての範囲をよりよく理解しましょう。
上記のコードの参照ファイルが添付されています。
静的変数
通常、変数の値は、プロシージャ呼び出しからプロシージャ終了までのみ保持されます。プロシージャの実行が終了すると、値は保持されません。
例えば 、上記のコードでは、firstNoとsecondNoの値は、プロシージャが終了するとすぐに削除されます。次にコードを実行すると、firstNoとsecondNoはコードで定義されているのと同じ値になります。
ただし、静的変数は、実行後も変数の値を保持する変数です。静的変数は、サブまたは関数内でのみ許可されます。
非静的変数を使用した以下のコードについて考えてみます。
Option Explicit Sub staticVariable() Dim count As Integer count = count + 1 Debug.Print count End Sub
F5を押すたびに、結果として1つしか得られません。
次に、変数を静的として宣言しましょう。
Option Explicit Sub staticVariable() Static count As Integer count = count + 1 Debug.Print count End Sub
コードを実行するたびに(F5)、静的変数がその値を保持しているため、結果には1、2、3などのカウントの値が増加します。
注意: 静的変数は、ツールバーの[リセット]ボタンを押すか、ブックを閉じるまで値を保持します。
定数変数
名前が示すように、これらの変数の値は、プログラムの実行中に変更することはできません。定数が宣言されると、それを変更したり、新しい値を割り当てたりすることはできません。
定数の宣言は、プロシージャ内またはモジュールレベル(すべてのプロシージャの上)で実行できます。
Option Explicit Sub constantVariable() Const SpeedLimitOfcar As String = '90kmph' Dim myCarSpeed As String myCarSpeed = '70kmph' If myCarSpeed > SpeedLimitOfcar Then MsgBox 'overspeed: Reduce the speed' Else MsgBox 'Within the limit: Always drive below : ' & SpeedLimitOfcar End If End Sub
定数値を変更しようとすると、コンパイルエラーがスローされます。
Option Explicit Sub ChangeConstantVariable() Const SpeedLimitOfcar As Integer = 90 SpeedLimitOfcar = SpeedLimitOfcar + 10 MsgBox SpeedLimitOfcar End Sub
よくある質問
Q#1)VBAでパブリック変数を設定するにはどうすればよいですか?
回答: パブリック変数は、プロシージャの開始前に宣言されます。変数を宣言するときは、publicキーワードを使用する必要があります。
Public Total_Marks As Integer
Q#2)プロシージャ外で宣言できない変数の種類は何ですか?
回答: 静的変数はVBAのプロシージャの外部で宣言できず、コンパイルエラーが発生します。
Q#3)VBAで変数を宣言するにはどうすればよいですか?
回答: Dimキーワードは、変数を宣言するために使用されます。 DimはDimensionの略です。
Dim variablename As Datatype
Q#4)VBAのセルに変数値を割り当てる方法は?
回答: Range機能を使用できます。
var1 = 10
Range(“ C1:C14”)。Value = var1
Q#5)VBAの変数とは何ですか?
回答: 変数は、コンピューターストレージ内の値のプレースホルダーのようなものです。変数はさまざまな種類の値を保持でき、それらの値はコードの実行中に変更される可能性があります。すべての変数には名前が必要です。変数名を使用すると、コンピューターはその変数に割り当てられた値をフェッチします。
Q#6)VBAで変数を宣言する必要がありますか?
回答: 宣言はVBAではオプションです。変数を宣言せず、プロシージャで直接使用する場合、それは暗黙的な宣言と呼ばれます。コードのエラーを回避し、読みやすくするために、変数を明示的に宣言することをお勧めします。
Q#7)VBAで複数の変数を宣言するにはどうすればよいですか?
回答: 1つの宣言ステートメントで複数の変数を宣言できます。 1つのAs句で変数名をコンマで区切って指定する必要があります。
例を含むc ++のプリプロセッサディレクティブ
Dim FirstNo、SecondNo As Integer
1つの宣言ステートメントで異なる変数を指定することもできます。各変数は、変数名の部分の後にAs句で指定されたデータ型を取ります。
Dim a、b As Single、c、d As Double、e As Integer、f As String
Q#8)VBAでdimとprivateに違いがないのはいつですか?
回答: プライベートモジュールレベルのスコープを宣言する場合、変数をdimまたはprivateとして宣言することに違いはありません。デフォルトでは、で宣言された変数 なし プライベートとしてスコープされます。ただし、読みやすくするためにプライベートを追加することをお勧めします。
Q#9)モジュールレベルの変数とは何ですか?
回答: モジュールレベルの変数は、プライベートまたはパブリックにすることができます。プライベート変数は、そのモジュール内のすべてのプロシージャで使用でき、他のモジュールには表示されません。パブリック変数は、プロジェクト内のすべてのモジュールのすべてのプロシージャに表示されます。
結論
変数はどのプログラミング言語でも重要です。このチュートリアルでは、変数とは何か、プログラムでそれらを宣言して使用する方法を見てきました。また、明示的な宣言の実装を強制するOptionExplicitメソッドについても説明しました。
変数を使用できるコードの部分をユーザーが決定するのに役立つさまざまなタイプの変数スコープについて説明しました。変数の値を保持するのに役立つ静的変数と、変数の値を変更せずに維持するのに役立つ定数変数の使用法を学びました。
=> ゼロからVBAを学ぶには、こちらにアクセスしてください
推奨読書
- ExcelVBAチュートリアル-ExcelでのVBAの概要
- ExcelのVBA配列と配列メソッドと例
- VBAデータ型-VBAの数値および非数値データ型
- Python変数
- C ++の変数
- Java変数とそのタイプと例
- 例を含むC#データ型と変数
- VBScript変数:変数を宣言して使用する方法-VBScript Dim