EXCEL VBA 配列の使い方(Array LBound UBound)
EXCEL VBA 配列の使い方(Array LBound UBound)
●はじめに
ここでは、配列の使い方を説明いたします。配列は、VBA入門者・初心者にとっては、わかりずらいが一度覚えてしまえば、感覚的にわかってくると思います。配列の考え方は、プログラムを理解する上で、必要な知識なので何となくでも大丈夫なので覚えましょう。
●2次元配列・セル範囲の内容を配列に格納・配列の内容をセルに代入(一括・高速化・セルの指定範囲)については、下記を参照して下さい。
●連想配列でクロス集計・項目別集計・グループ集計 (Scripting.Dictionary) については、下記を参照して下さい。
EXCEL VBA 連想配列でクロス集計・項目別集計・グループ集計 (Scripting.Dictionary) テクニック
●配列の説明
それでは、配列の説明をいたします。まず、サンプルとして「Hako」と言う配列を作成します。配列には、必要個数の番号を指定します。(例)Dim Hako(4)as Long とは、(4)の意味は、0~4の順番の入れ物があると考えます。”4”と指定すると0~4なので、0からカウントすると5個入れ物があると考えて下さい。
●次に、配列を作成した時に、配列に代入されるイメージが下記の通りになります。
配列名 Dim hako(4) as String | 配列の中身 |
---|---|
hako(0) | A商店 |
hako(1) | Bスーパー |
hako(2) | Cマート |
hako(3) | Dデパート |
hako(4) | Eコンビニ |
●プログラム説明(サンプル①)
上記の配列をコード化(プログラム)すると下記の通りになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Sub array01() Dim hako(4) As String '文字を保管する配列の設定 Dim I As Long hako(0) = "A商店" hako(1) = "Bスーパー" hako(2) = "Cマート" hako(3) = "Dデパート" hako(4) = "Eコンビニ" For I = 0 To 4 MsgBox hako(I) Next I End Sub |
●配列を指定する際は、文字はStringを指定したり、数値は、Long等をしていします。なんでも指定する事ができるVariantなどがあります。ここでは、3つのみ取り上げています。
配列・変数 | 内容 |
---|---|
String | 文字列を保管 |
Long | 数値を保管 |
Variant | バリアント型変数は、文字でも数字でもなんでも大丈夫です。 |
●プログラム説明(サンプル②)
下記のコードは、数値を保管するコードの記述方法です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Sub array02() Dim Uriage(2) As Long '数値を保管する配列の設定 Dim I As Long hako(0) = 10000 hako(1) = 20000 hako(2) = 30000 For I = 0 To 2 MsgBox Uriage(I) Next I End Sub |
●配列で使用する関数
配列で使用する関数「Array LBound UBound」の説明をいたします。
関数名 | 使い方 | 説明 |
---|---|---|
Array | Dim Boxs as Variant Boxs = Array("日本","アメリカ","ブラジル","フランス") | Arrayは、カンマ区切りで、データ配列に格納する事ができます。 |
LBound | Dim StartBox as Integer StartBox = LBound(Boxs) | LBoundは、データ配列として最小値に格納している番号を返します。 |
UBound | Dim EndBox as Integer EndBox = LBound(Boxs) | UBoundは、データ配列として最大値に格納している番号を返します。 |
●プログラム説明(サンプル③)
続いて、Array LBound UBoundを使ったサンプルプログラムを下記につくりました。プログラムの説明ですが、データを格納する為に、「Bookbox」の名前で配列を「Variant」形式で作成します。「Variant」は、なんでもデータとして格納する事ができますので、配列を作成するには、一番適しています。その作成した配列「Bookbox」にサンプルデータ(漫画の雑誌名)を登録します。登録したデータに対してFor Next を使いLBound(BooKbox) でデータが格納されている最小値とUBound(BooKbox)で最大値を指定する事ができるので、格納されている全部のデータをMsgBoxで表示させます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub ArrayTest01() Dim BooKbox As Variant Dim l As Long BooKbox = Array("ジャンプ", "マガジン", "サンデー", "スピリッツ", "モーニング") '配列にデータを格納します。 For l = LBound(BooKbox) To UBound(BooKbox) 'For LBound = 配列最小値 to UBound = 配列最大値をしていします。 MsgBox "僕の愛読書は、" & BooKbox(l) & "です。" 'メッセージボックスを使い順番に表示します。 Next l End Sub |
●実行結果(下記の結果は、最初に表示される結果のみ) (クリックして拡大)
●プログラム説明(サンプル④)
続いて、上記プログラムと同じ考えですが、配列を2個作成してデータを格納し、メッセージボックスを使い表示するサンプルプログラムです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Sub ArrayTest02() Dim BooKbox, REday As Variant Dim l As Long BooKbox = Array("ジャンプ", "マガジン", "サンデー", "スピリッツ", "モーニング") '一つ目の配列にデータを格納します。 REday = Array("月曜日", "水曜日", "水曜日", "月曜日", "木曜日") '二つ目の配列にデータを格納します。 For l = LBound(BooKbox) To UBound(BooKbox) 'For LBound = 配列最小値 to UBound = 配列最大値として代入されます。 MsgBox BooKbox(l) & "の発売日は、" & REday(l) & "です。" 'メッセージボックスを使い2つの配列データを順番に表示します。 Next l End Sub |
●実行結果(下記の結果は、最初に表示される結果のみ) (クリックして拡大)
●プログラム説明(サンプル⑤)
次は、セル(A1:A3)に入力さている値を配列に格納して、セル(C1:C3)へ値を表示させるプログラムです。(配列のデータとしては、縦3×横1として定義)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Sub Arraysample3() Dim i As Long Dim BoxArray1 As Variant Dim BoxArray2 As Variant BoxArray1 = Range("A1:B3") 'セル(A1:B3)のデータを配列に登録 ReDim BoxArray2(1 To 3, 1 To 1) '(縦3×横1データとして再定義) For i = 1 To 3 BoxArray2(i, 1) = BoxArray1(i, 1) 'セルデータを配列データに転記する。 Next i Range("C1:C3") = BoxArray2 End Sub |
●実行結果
配列格納先を2つ作成して、BoxArray1にA列のデータを格納して、BoxArray2を再定義してBoxArray1のデータをBoxArray2へ移して、そのデータをC列(C1:C3)に転記されました。
●実行前 ※A列(A1~A3)にAAA,CCC,BBB が記入されています。このデータを配列として格納します。(クリックして拡大)
●実行後 ※A列のデータを配列に格納して、別の配列に移してC列に転記されました。(クリックして拡大)
●プログラム説明(サンプル⑥)
次は、セル(A1:B3)に入力さている値を配列に格納して、セル(C1:D3)へ値を表示させるプログラムです。(配列のデータとしては、縦3×横2として定義)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Sub Arraysample4() Dim i As Long Dim BoxArray1 As Variant Dim BoxArray2 As Variant BoxArray1 = Range("A1:B3") 'セル(A1:B3)のデータを配列に登録 ReDim BoxArray2(1 To 3, 1 To 2) '(縦3×横2データとして再定義) For i = 1 To 3 For L = 1 To 2 BoxArray2(i, L) = BoxArray1(i, L) 'セルデータを配列データに転記する。 Next L Next i Range("C1:D3") = BoxArray2 End Sub |
●実行結果
配列格納先を2つ作成して、BoxArray1にA列のデータを格納して、BoxArray2を再定義してBoxArray1のデータをBoxArray2へ移して、そのデータをC列(C1:D3)に転記されました。
※今回の配列定義については、縦3×横2データを定義しています。
※今回の配列定義については、縦3×横2データを定義しています。
●実行前 ※A列(A1~B3)に「AAA,CCC,BBB:あああ、いいい、ううう」 が記入されています。このデータを配列として格納します。(クリックして拡大)
●実行後 ※セルA1~B3のデータを配列に格納して、別の配列に移してセルC1~D3に転記されました。(クリックして拡大)
最後まで、ご覧いただきまして誠に有難うございました。
以上が配列の説明でした。配列を使ってデータを取り扱うとデータの取り扱いの幅が広がりますので、上記のプログラムを参考にしていただき、自分なりに試して下さい。
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。
以上が配列の説明でした。配列を使ってデータを取り扱うとデータの取り扱いの幅が広がりますので、上記のプログラムを参考にしていただき、自分なりに試して下さい。
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。