前のレッスンでは、特定のデータを書き込むことができる変数について説明しましたが、複数の値を含めることはできません。この制限を回避するために、VBA には複数の値を格納できる配列があります。
さまざまな配列の例をいくつか示します。
Sub variables() '変数の宣言例 Dim var1 As String '1次元配列の宣言例 Dim array1(4) As String '2次元配列の宣言例 Dim array2(4, 3) As String '3次元配列の宣言例 Dim array3(4, 3, 2) As String End Sub
Dim array1(4) As String
1 次元配列は、1 つの列で構成されるテーブルと考えることができます。配列 array1(4) は、5 つのレコードを保持できる 1 次元配列です。なぜ 5 なのか?配列内のレコードの数はゼロ (0、1、2、3、4) から始まるためです。
次に、2 次元配列を考えてみましょう。
Dim array2(4, 3) As String
すでに 5 行 4 列のテーブルのように見えます。
変数と同様に、定数は値を保存するために使用できますが、違いは値を変更できないことです。値の繰り返しを避けるために定数を追加できます (例: 13.14)。
Sub const_example() Cells(1, 1) = Cells(1, 2) * 13.14 Cells(2, 1) = Cells(2, 2) * 13.14 Cells(3, 1) = Cells(3, 2) * 13.14 Cells(4, 1) = Cells(4, 2) * 13.14 Cells(5, 1) = Cells(5, 2) * 13.14 End Sub
これにより、コードの理解と編集が容易になります。また、定数の値を非常に簡単に変更することもできます。
Sub const_example() '定数の宣言 + 値の代入 Const ANNUAL_RATE As Double = 13.14 Cells(1, 1) = Cells(1, 2) * ANNUAL_RATE Cells(2, 1) = Cells(2, 2) * ANNUAL_RATE Cells(3, 1) = Cells(3, 2) * ANNUAL_RATE Cells(4, 1) = Cells(4, 2) * ANNUAL_RATE Cells(5, 1) = Cells(5, 2) * ANNUAL_RATE End Sub
変数の範囲
変数がプロシージャ (Sub) の先頭で宣言されている場合、その変数はこのプロシージャ内でのみ使用できます。プロシージャが実行されると、変数の値は使用できなくなります。
Sub procedure1() Dim var1 As Integer '=> 変数はこのプロシージャ内でのみ有効です End Sub Sub procedure2() '=> var1 はここでは使用できません End Sub
モジュール プロシージャで変数を使用するには、モジュールの最初で変数を宣言するだけです。このように変数を宣言すると、ワークブックが閉じるまで使用できます。
Dim var1 As Integer Sub procedure1() '=> var1 はここで使用できます End Sub Sub procedure2() '=> var1 はここでも使用できます End Sub
この本のすべてのモジュールで同じ変数を使用する場合は、前の例の Dim を Global に置き換えるだけです。
Global var1 As Integer
変数が表示されるプロシージャを実行した後に変数を使用するには、Dim を Static に置き換えます。
Sub procedure1() Static var1 As Integer End Sub
プロシージャ内のすべての変数の値を使用するには、Sub の前に Static を追加します。
Static Sub procedure1() Dim var1 As Integer End Sub
独自のタイプを作成する方法の簡単な例を次に示します。
'変数タイプの作成 Type customers last_name As String first_name As String End Type Sub variables() '変数の宣言 Dim cust1 As customers 'cust1 に値を代入する cust1.last_name = "Smith" cust1.first_name = "John" '使用例 MsgBox cust1.last_name & " " & cust1.first_name End Sub