配列
EXCEL VBAの基本コードを紹介しています。初心者の方が順番に読んでくだけでVBAの基礎コードが理解出来るようになればなと思って、短めの記事で進めて行きたいと思います!
今回は、”配列”について紹介します!
配列とは
まずは”配列”ってなんでしょう?
“配列”も”変数”や”定数”と同じように、名前を付けてデータを登録しておく場所ということは変わりないのですが、”変数”や”定数”との違いは、一つの場所を更に小分けにしてデータを登録出来るところです。
※”変数” “定数”について説明した記事はこちらです。
同じようなデータを沢山扱わなければいけないプログラムなどを考えてもらえるとわかりやすいと思います。
例えば、100人の名前のデータを扱わなければいけないときに、一つずつ”変数”を作って登録していたのでは大変ですね。
そんなときに活躍するのが”配列”です。
次の図を見て下さい。
“変数”が一つの箱(データの登録場所)であるのに対して、”配列”は複数の箱(データの登録する場所)があって、それぞれに番号がついていると考えて下さい。
それぞれの箱に1つずつデータを入れることができます。
このように、一つの名前で複数のデータを登録でき、それを連番(インデックス)で管理する形を”配列”と言います。イメージできましたか?
配列の登録
それでは配列の作り方について説明します。
VBAで配列を作るときは、”変数”のときと同じように”配列”を宣言する必要があります。
宣言には、配列の要素数を指定する場合と、指定しない場合の2通りがあります。
要素数を指定する場合
Dim 配列名(最大インデックス番号) As データ型
先程の例でやるとこんな感じですね。
Dim names(4) As String
実は、これは正式な書き方の省略形です。
正式には、次のように最小インデックス番号も指定します。
Dim 配列名(最小インデックス番号 to 最大インデックス番号) As データ型
Dim names(0 to 4) As String
最小インデックス番号を省略すると、自動的に最小インデックス番号が「0」に設定されます。
※プログラミングでは通常配列のインデックスは0番から扱うのが普通ですので、省略して書いて特に問題ないと思います。
要素数を指定しない場合
要素数を指定せずに宣言することも可能です。
Dim 配列名() As データ型
この場合、要素数が決定した段階で「ReDim」ステートメントを使って再度定義します。
ReDim 配列名(最大インデックス番号)
Dim names() As String
ReDim names(4)
値の代入
各箱にデータを登録するには、各々のインデックス番号で呼び出した”配列”にデータを登録する必要があります。
配列名(インデックス番号) = “値”
Sub test()
Dim names(4) As String
names(0) = "たろう"
names(1) = "はなこ"
names(2) = "じろう"
names(3) = "たま"
names(4) = "さぶろう"
End Sub
プチ情報
要素数を指定せずにVariant(バリアント)型の配列で宣言すると、Array関数を使って一気に代入することが出来ます。
'要素数を決めずにVariant型で宣言
Dim names() As Variant
'Array関数で一気に代入
names = Array("たろう", "はなこ", "じろう", "たま", "さぶろう")
配列の呼び出し
呼び出すときは、
配列名(インデックス番号)
です。
次のコードで実際に確認してみましょう。
Sub test()
' ①配列の宣言
Dim names(0 To 4) As String
'②値の代入
names(0) = "たろう"
names(1) = "はなこ"
names(2) = "じろう"
names(3) = "たま"
names(4) = "さぶろう"
'③呼び出し
Debug.Print (names(0)) 'たろう
Debug.Print (names(1)) 'はなこ
Debug.Print (names(2)) 'じろう
Debug.Print (names(3)) 'たま
Debug.Print (names(4)) 'さぶろう
End Sub
①配列の宣言
②値の代入
③値の呼び出し
です。Debug.Printでイミディエイトウィンドウに表示させています。
実行動画
要素の変更
要素の変更は、代入と同じように
配列名(インデックス番号) = “値”
で行います。
Sub test()
' ①配列の宣言
Dim names(0 To 4) As String
'②値の代入
names(0) = "たろう"
names(1) = "はなこ"
names(2) = "じろう"
names(3) = "たま"
names(4) = "さぶろう"
'names(2)の値を変更
names(2) = "変更されたじろう"
'③呼び出し
Debug.Print (names(0)) 'たろう
Debug.Print (names(1)) 'はなこ
Debug.Print (names(2)) '変更されたじろう
Debug.Print (names(3)) 'たま
Debug.Print (names(4)) 'さぶろう
End Sub
存在しないインデックス番号を指定するとエラーになるので注意してくださいね。
Sub test()
' ①配列の宣言
Dim names(0 To 2) As String
'②値の代入
names(0) = "たろう"
names(1) = "はなこ"
names(2) = "じろう"
'③呼び出し
Debug.Print (names(0)) 'たろう
Debug.Print (names(1)) 'はなこ
Debug.Print (names(2)) 'じろう
Debug.Print (names(3)) '存在しないインデックス番号
End Sub
まとめ
配列について説明しました。いかがでしたか?ちょっと難しいかもしれませんがプログラミングをやっていく上で絶対にマスターしないといけない内容なのでしっかり覚えましょう!
コメント