TOP
VBA-レッスン 6.2。データ型 (Variables)
前のレッスンでは、特定のデータを書き込むことができる変数について説明しましたが、複数の値を含めることはできません。この制限を回避するために、VBA には複数の値を格納できる配列があります。
さまざまな配列の例をいくつか示します。
- Sub variables()
-
- Dim var1 As String
-
-
- Dim array1(4) As String
-
-
- Dim array2(4, 3) As String
-
-
- Dim array3(4, 3, 2) As String
- End Sub
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
1次元配列
Dim array1(4) As String
1 次元配列は、1 つの列で構成されるテーブルと考えることができます。配列 array1(4) は、5 つのレコードを保持できる 1 次元配列です。なぜ 5 なのか?配列内のレコードの数はゼロ (0、1、2、3、4) から始まるためです。
次に、2 次元配列を考えてみましょう。
- Dim array2(4, 3) As String
Dim array2(4, 3) As String
すでに 5 行 4 列のテーブルのように見えます。
'色付きのセルに値を割り当てる
array2(0, 0) = "赤いセルの値"
array2(4, 1) = "緑色のセルの値"
array2(2, 3) = "青いセルの値"
定数
変数と同様に、定数は値を保存するために使用できますが、違いは値を変更できないことです。値の繰り返しを避けるために定数を追加できます (例: 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()
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 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()
-
- End Sub
Sub procedure1()
Dim var1 As Integer
'=> 変数はこのプロシージャ内でのみ有効です
End Sub
Sub procedure2()
'=> var1 はここでは使用できません
End Sub
モジュール プロシージャで変数を使用するには、モジュールの最初で変数を宣言するだけです。このように変数を宣言すると、ワークブックが閉じるまで使用できます。
- Dim var1 As Integer
-
- Sub procedure1()
-
- End Sub
-
- Sub procedure2()
-
- 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 procedure1()
Static var1 As Integer
End Sub
プロシージャ内のすべての変数の値を使用するには、Sub の前に Static を追加します。
- Static Sub procedure1()
- Dim var1 As Integer
- End Sub
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.last_name = "Smith"
- cust1.first_name = "John"
-
-
- MsgBox cust1.last_name & " " & cust1.first_name
- 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