Excelバージョン
マイクロソフト365
配列?っていうとなんだか難しい表現ですが単純に番号が付いた変数の塊です。
それではいってみましょう!
Menu
配列とは
・複数の番号が付いた値を格納できます。
・取り出す場合はその番号で取り出します。
・高速で処理をしてくれるので時短が可能になります。
など
配列の宣言
まずは配列を利用する際は、変数と一緒で宣言をします。
静的配列の宣言
Dim 配列(3) as String
Dim 配列(0 to 3) as Integer
括弧の中に配列数の指定をすると、静的配列と呼ばれるものになります。
(あとから配列数の変更は不可です)
動的配列の宣言
Dim 配列 ← データ型を指定しない場合はVariant型になります。
Dim 配列 as Variant
Dim 配列() as String
データ型がVariant型や空の括弧は動的配列と呼ばれるものになります。
(あとから配列数の変更が可能です)
たくさんあってややこしいですね~(*^^)v
とにかくVBAは配列の宣言のやり方はたくさんあるので、ご自身の得意となる書き方を1つ見つけ、徐々に色々覚えていった方がいいと思います!
配列の数
Dim 配列(3)
4個の配列を作成するという意味です。
配列の数え方は0からカウントされます→0,1,2,3
ですので(3)と宣言した場合は4個の配列を作成するということになります。
配列(0)=”A”
配列(1)=”B”
配列(2)=”C”
配列(3)=”D”
Option Base 1
モジュールの最初にOption Base 1と記述した場合は配列の数え方が1からになります → 1,2,3,4
配列(1)=”A”
配列(2)=”B”
配列(3)=”C”
配列(4)=”D”
こういった機能もあるのですが他の言語の配列は0から数えるのが普通なのであんまりこれは使用しない方がいいと思います!
配列名
配列名は変数と一緒で自分で決めます。
配列(0)=”A”
配列(1)=”B”
配列(2)=”C”
配列(3)=”D”
配列インデックス(添え字)
()の付いた番号をインデックスまたは添え字といいます。
配列(0)=”A”
配列(1)=”B”
配列(2)=”C”
配列(3)=”D”
配列要素
要素とは配列の中身の値です。
配列(0)=“A”
配列(1)=“B”
配列(2)=“C”
配列(3)=“D”
配列に値を格納
配列に値を格納➀
最も基本的な配列の格納方法。
配列名にインデックスをつけて値を格納できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Sub 配列に値格納1() '静的配列を宣言 Dim ary(3) As String ary(0) = "A" ary(1) = "B" ary(2) = "C" ary(3) = "D" End Sub |
【結果】
配列に値を格納➁
array関数を使用する。
配列=array(“A”,”B”,”C”,”D”)
arrayと記述して括弧の中をカンマで区切って値を格納します。
※array関数を使用する場合はデータ型をVariantにします。
1 2 3 4 5 6 7 8 | Sub 配列に値格納2() '動的配列を宣言 Dim ary() As Variant '配列に値を格納 ary = Array("A", "B", "C", "D") End Sub |
【結果】
配列のデータ型の値
データ型の指定で値が変わる
配列を作成した時点で、データ型の指定方法によって下記の図のように要素の値が違います。
Variant型
1 2 | '静的配列を宣言 Dim ary(3) As Variant |
Integer型
1 2 | '静的配列を宣言 Dim ary(3) As Integer |
String型
1 2 | '静的配列を宣言 Dim ary(3) As String |
このような特徴があります。
配列をセルに書出す(基本)
配列書出しの基本
A1セルからA4セルに配列の値を書きだす基本の記述例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | Sub 配列をセルに書きだす() '動的配列を宣言 Dim ary() As Variant '配列作成 ary = Array("A", "B", "C", "D") 'セルA1に書きだす Range("A1") = ary(0) 'セルA2に書きだす Range("A2") = ary(1) 'セルA3に書きだす Range("A3") = ary(2) 'セルA4に書きだす Range("A4") = ary(3) End Sub |
【結果】
一気に配列をセルに書きだす(応用)
LboundとUbound
Lbound → インデックス(添え字)の最小値を取得してくれます。
Ubound → インデックス(添え字)の最大値を取得してくれます。
配列のインデックスの最大値と最小値を取得することによって繰り返し処理Forのカウンター値を、最小値と最大値をセットできるので、データの数がわからなくても一気に書きだせます。
For~Nextを使用した例
1 2 3 | For i = LBound(配列名) To UBound(配列名) 処理 Next |
VBAサンプル
1秒もかからないスピードで書き出します。
そのまま下記コードを標準モジュールにコピペで即試せます(*゚▽゚)ノ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Sub 配列を一気に書きだす() '動的配列を宣言 Dim ary() As Variant Dim i As Integer '配列作成 ary = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) '配列データを一気に書きだす For i = LBound(ary) To UBound(ary) Debug.Print ary(i) Next End Sub |
【解説】
下記のウオッチウィンドウを見てわかるとおり、配列aryのLboundとUboundのインデックスの値の0(最小値)と9(最大値)が取得できているのが確認できます。
この値をFor文のカウンターの下限値と上限値をセットするこにより、下記と同じ動作になるので今回のような結果になります。
1 2 3 | For i = 0 To 9 '処理 Next |
まとめ
基本というのは一番つまらなくてわかりづらいですよね~。でも最初から配列が分かる人は120%いないのでコツコツ挫折しないように覚えていくしか方法はありません。
それでず~っとやってると、あっこれってこういうことだったんだ~!っていう日がある日突然やってきます。それが1か月後か1年後かはわかりかせんが、そうしたら道路の渋滞から抜けた時のようにものすごいスピードであれもこれもって頭に入っていきます。ですのであきらめずに継続していけばいつかわかる日が必ず訪れます(^o^)o
だから大丈夫です!諦めずにやって私も長年さまよい続けて、挫折→またやる→挫折→またやる、みたいな感じのルーティンをしていけば、必然的に覚えちゃいます!
ということで次回は膨大なデータ処理をする際に非常に便利で、配列の宣言後に配列のサイズを変更ができる動的配列について解説していきたいと思います。
【エクセルVBA】動的配列の使用方法RedimとRedimPreserve
以上です。