VBAに限らず配列はプログラミングをする上で避けては通れないものです。このページでは、配列変数の使い方を基礎から丁寧に解説します。配列とは何か普通の変数を「一戸建て」だとすると、配列は「マンション」のようなものです。普通の変数には値を1つしか設定できませんが、配列変数には複数の値を入れることができます。下記の画像は配列のイメージ図です。「0,1,2,3,4,5,6,7」という番号がふってありますね。普通の変数は一軒家ですから、格納できるデータも1つですし、マンションのように部屋番号は必要ありません。配列はマンションのようなものなので、101号室、102号室などと、1つ1つの「箱」に「部屋番号」をふってあげる必要があります。部屋番号がないと、例えば、「配列変数イメージ図」の中の、「データ3」が入っている部屋(=部屋番号が【2】の箱)に訪問したいと思っても、訪問できなくなってしまいます。配列の部屋番号はマンションのような「203」みたいな値ではなく、「0」、「1」、「2」といった数値なんです。配列マンションでは、左から順番に0,1,2,3、...、7という風に【0からはじまる連続した数値】で配列変数内の各部屋に部屋番号をつけていく決まりになっています。このような番号付けのルールは配列界の鉄の掟なんです。(↑※但し稀に例外あり。配列マンションの最初の部屋の部屋番号は必ず「0」になるという点です。※但し、配列の部屋番号が「1」から始まるケースも稀に存在します。VBAでは下記の書式で配列変数を宣言します。データ型[end_link]【数値】は「その配列の最後の部屋番号」を表します。Integerという配列は、整数型の配列なのですが、この配列にはいったい「いくつの整数」を入れることができるでしょうか???結論から言うと、4つです。3つではありません!この結果は直観に反するかもしれませんが、下図をご覧いただければ理解しやすいと思います。「配列の要素数」と呼びます。要は配列の部屋数のことですね。Stringと書いた場合、配列変数「b()」の要素数は、10+1個です。配列の要素数は「配列を宣言したときに指定した数値+1」なのです。String上記の配列変数「ary()」という配列は6個の文字列型のデータを格納することができます。Range上記の配列変数「ary()」には16個のセル(Rangeオブジェクト)を格納することができます。配列への理解を深めるために、下記にごく初歩的な配列のサンプルプログラムを示します。簡単なサンプルプログラムで実際に配列変数を使ってみよう!まずは配列の初歩の初歩とも言える、ごく簡単なサンプルプログラムを見てみましょう。Stringとありますから、配列変数「ary(2)」には3つの部屋があります。配列変数の部屋番号は、0から始まって1,2と連続した数値で表すという鉄則がありましたね。配列変数「ary(2)」のイメージをざっくり図示するとこんな感じになります。値[end_link]と書きます。“iPhone4”と書きます。1)つまりA1セルにary(0)に入っている値を入れています。ary(0)の中身は“iPhone4”ですから、A1セルには「iPhone4」という文字列データが入ります。このサンプルプログラムの実行前のExcel画面は下記になります。サンプルプログラムを実行すると、A1セルにary(0)の持っている値が入りA2セルにary(1)の持っている値が入り、A3セルにary(2)の持っている値が入るので、このサンプルプログラムの実行結果は下記のようになります。呼んできましたが、こういった番号のことを一般に「添え字(そえじ)」と呼びます。例外的に添え字が「0」からではなく「1」から始まる配列も、ごく稀に存在しています。要注意ですね![スポンサードリンク]配列を使うと何が嬉しいの?配列を使うメリットを理解するために、まずは下記の「配列を使わない版サンプルプログラム」をご覧下さい。その後「配列を使った版サンプルプログラム」と見比べてみると、配列の持つパワーを実感できると思います。12)]に対して、上から順番に、1月、2月、3月、...、12月と入力するマクロです。Sub【実行結果】ただ単にA1セル~A12セルに1月~12月を入力するだけのマクロなのに、なんて長くてめんどうで、センスの無いコードなのでしょう!!!ではこの長ったらしい割りに、役に立つ機能の無いサンプルプログラムを「配列を使った版サンプルプログラム」で書き換えてみます。すると、あら不思議!配列がいかに強力な武器になるのかが一目瞭然です!!![スポンサードリンク]配列を使った版サンプルプログラム尚、このサンプルプログラムの実行結果は「配列を使わない版サンプルプログラム」と全く同じです。先に【実行結果】画像を掲載します。Subなんと!配列を使ったら、めっちゃスッキリしました!!さて、簡単にこのサンプルプログラムの流れを解説致します。文字列型の配列変数「month(11)」は、month(0)に“1月”、month(1)に“2月”、month(2)に“3月”・・・month(11)に“12月”をそれぞれ格納するためのものです。11となっているので、カウンタ変数「i」の値は、For-Nextループを1周するたびに、0,1,2,3,4,5,6,7,8,9,10,11と変化していき、For-Nextループは12週します。結果的にmonth(0)には“1月”が格納されます。結果的にmonth(1)には“2月”が格納されます。“月”となり、結果的に、month(11)には“12月”が格納されます。その結果、配列変数month()は下図のような状態になります。month(i)カウンタ変数「i」は「0,1,2,3,4,5,6,7,8,9,10,11」と変化していきますよね。第2引数)の「第1引数」に指定しています。従って、具体的な値の変化は下記のようになります。1)=month(11)以上のプログラムの構造より、下図の結果が得られます。😎[amazon_book_vba_2]Variant型の変数とArray関数による配列の生成Variant型の変数は「どんな値でも入れることができる万能の変数」です。プログラミングにおいては、どんなデータ型の値でも入れることができてしまう変数ほど危険なものはありません。従ってVariant型の変数の使用は、極力、控えるべきです。これから紹介するArray関数はVariant型の変数と組み合わせて用いるものなので、ここではVariant型の変数を解禁したいと思います。Array関数は、指定した値を配列に変えて返す関数です。“トラ”)Array関数のサンプルプログラムちなみに英語の「array(あれい)」は「配列」という意味です。Array関数で配列に変換し、Variant型の変数「eto」に、この配列を代入した上で、A1セル~A12セルに十二支を表示するマクロです。Sub【実行結果】Array関数を使って生成した配列をVariant型の変数に代入すると、配列を宣言しなくても、Variant型の変数(添え字)と書くだけで、Variant型の変数が配列の役目を果たします。データ型」のように、配列変数を宣言しているわけではない点に注意して下さい。データ型」という形式で、予め、これから使う配列変数に「何個のデータを入れるのか」を決めておく必要がありました。※注意※配列に入れられるデータの数は「最後の添え字の番号+1」個です。このような「配列の長さを予め決めておく」ような配列変数を静的配列と呼びます。配列変数を宣言する時点では、「いったい何個くらいデータを入れるスペースを用意しておけばいいのか」が分からない場合も少なくありません。そんなとき、動的配列というものを使えば、配列に「何個のデータを入れるのか」が、分かった時点で、配列の要素数を指定することができて便利です。動的配列を使うには、配列を宣言する際に、「要素数」を空欄にします。その配列に必要な要素数が判明した時点で、ReDimステートメントを用いて、配列の要素数を確定します。上記の(例1)ではary()と、配列の変数の要素数の指定を省略していますね。ary(10)等と書き、要素数を確定させます。ReDimステートメントは何度でも使用できます。8-)!動的配列のサンプルプログラム下記画像のA1セル~A12セルの値を動的配列「ary()」に一旦格納した上で、ary()の中身を、B1セル~B12セルに書き込むサンプルプログラムです。結果的にはただ単に、A1:A12の値をB1:B12にコピーしているだけのあまり生産的ではないサンプルプログラムですが、動的配列を理解する助けにはなると思います。BasicActiveSheet.UsedRange.Select1ActiveSheet.UsedRange.SelectUsedRangeプロパティは既に使用されているセル範囲を表すプロパティです。1SelectionプロパティはUsedRangeプロパティで選択したセル範囲を表しています。Rowsはセル範囲の「行」を意味しますので、Countでセル範囲の行数を取得しています。行末で「-1」をしている理由は以下の通りです。あるセル範囲の行数が5だった場合、5個のデータを格納できる配列にする必要があります。5個のデータを格納できる配列は、配列変数(4)なので、5行-1=配列の要素数となります。配列の要素数は下記の式で求めることができます。1[end_point]配列の要素数を算出する方法を図解すると下記のようになります。[start_link]参考:「添え字」のことを「インデックス番号」等と呼ぶこともあります。[end_link]ある配列の「最初の添え字」を求めるには、LBound関数を使います。ある配列の「最後の添え字」を求めるには、UBound関数を使います。添え字が「数値」ではなく、「文字列」の配列のことです。aryという配列変数があるとします。今まで解説してきた普通の配列は、ary(0)、ary(3)のように、数値を利用して配列にしまってあるデータを呼び出しました。これに対して、連想配列は、ary(“猫”)のように文字列でデータを呼び出すことができます。VBAの連想配列の場合、データを「アイテム」、添え字を「キー」と呼びます。VBAで連想配列を使うにはCollectionオブジェクトを利用し、以下のように書きます。Collection連想配列に値を代入するにはAddメソッドを使って、下記のようにします。Key:=”消費税”上記の例で、ary(”消費税”)と書くと、“8%”という値が返ってきます。連想配列の「アイテム」を呼び出すには、連想配列(“キー”)と書きます。VBAにおける連想配列のサンプルプログラムまずは簡単なサンプルプログラムを通じて、VBAの連想配列の使い方を見てみましょう。Sub【実行結果】また、連想配列の一覧を取得するには以下のサンプルプログラムのようにします。コメントをキャンセルメールアドレスが公開されることはありません。*サイト上に表示された文字を入力してください。