19:13:09TwitterFacebookはてブPocketLINEVBAと言えばマイクロオフィスのシリーズで使えるプログラミング言語で、事務処理の自動化などに最適です。そのためプログラマーだけでなく事務職や営業職など幅広い職種の人に学習メリットのあるプログラミング言語と言えるでしょう。ソースコードが非常にシンプルで読み書きしやすいことも大きな特徴です。そこで万人にVBAの学習をおすすめしたいのですが、VBA学習のなかでも重要になるのが配列の使い方です。配列は同じデータを大量に扱う場合に一つのかたまりとして扱うことのできる概念ですが、VBAの主な用途である事務処理では配列の活躍機会が多いです。そこでこのページでは、VBAの配列の基礎から応用までを解説していきます。まとめVBA配列の基礎まずは配列の基礎編ですが、宣言やループでの操作について紹介します。配列の宣言まずは基本中の基本である配列の宣言です。基本的には変数の宣言と同じような形です。配列は固定長配列といって配列の長さが決まっているものと、可変長配列といって配列の長さが動的に変わるものがあります。固定長配列か可変長配列かを意識して宣言しましょう。具体的には以下のようになります。要するに()のなかで上限値を決定すると固定長になり、何も指定しないと可変長になります。次に配列の初期化ですが、変数と違ってデータを複数格納するスペースがある分やや複雑です。言っても難しいというわけではありません。具体的には以下のようになります。配列名これで一発ですべての要素が初期値になります。Eraseは和訳すると消すとう意味ですが、そのまま配列の中身がすべて消えます。テータの型によって初期値は異なりますが、具体的には以下のようになります。「数値配列:0」「文字列配列:長さ0の文字列」「オブジェクト配列:Nothing」「バリアント配列:Empty」たまに初期化すると宣言時の状態になると勘違いされることがありますが、それは違います。宣言時の状態がデフォルトの初期状態であれば初期化すれば宣言時の状態になりますが、宣言時に配列に何かしらの値を入れていた場合、初期化するとそれも消えてしまいます。お間違いないように注意してください。Array関数を使用Array関数は可変長配列でデータ型がバリアント型の場合のみ使用できます。具体的な使い方は以下です。Array(要素0,要素1,要素2)初期化というよりは、厳密には配列に順番に値を格納していく方法になります。上のコードは、配列の前から順番に要素0、要素1、要素2を格納しました。配列の再定義は初期化に近い考え方ですが、配列の長さや型を変更できる場合がある点で違いがあります。データ型の変更が可能なのは最初の宣言を可変長配列のバリアント型で行っていた場合のみです。以上のようになります。これにより、インデックス番号で指定した配列の長さ、データ型で指定した型の配列に生まれ変わります。次に、配列を使用して応用的なコードにチャレンジしましょう。Excelシート上のセルとVBA配列要素を共有するVBAは特にExcelで使用することが多く、その場合Excelシートを自由に扱えると便利です。Excelシートは見ての通り行と列の二次元配列になっているため、配列との相性が良いのです。二次元配列を利用したコードを組めば、たとえばExcelシートの行と列を指定して、そこに意図した値を自動入力するようなことも可能です。具体的には以下のようなコードがそれに該当します。Variant'配列に値を格納する。WorksheetFunctionオブジェクトのTranspose関数を使用。'配列を二次元配列化。WorksheetFunction.Transpose(Range("A1:B3"))'セルに値を入れるための変数を宣言。String'カウント用の変数を宣言。Integer'3回ループを回す。3'2回ループを回す。MsgBox関数でメッセージボックスを表示。Sub上記のコードを実行すると、Excelシートには以下のように表示されます。13シートへの処理を自動化できる一例ですが、活用するとExcelシートにいちいち手入力しなくて良い処理が出てきます。エンジニアの作業よりも、むしろ事務系の作業で便利な機能かもしれません。配列の要素を取得する上の例よりも簡単ですが、配列の要素を取得するステートメントがあります。基本編で紹介するか迷いましたが、利用頻度がそこまで高くないということで応用編に入れました。Integer'最小のインデックス番号から最大のインデックス番号までループで回す。Eachを使っても同じ処理が実装できます。Eachの場合配列のインデックスを指定しなくても、自動的に最初から最大までループを回して要素を取得することができます。配列の要素を削除するなぜかVBAには配列の要素を削除するためのメソッドがないので、要素削除が面倒です。配列の再定義や初期化は簡単なのですが、ここは欠点です。以下のような方法で要素削除できます。Integer'0からカウントすると2が3番目の要素になる。Preserveステートメントで要素数を変更。Subこのコードを実行すると3番目の要素である餃子が消えて以下のようになります。Sub上記のコードを実行すると、以下のように出力されます。ラーメン,チャーハン,餃子,天津飯,小龍包,配列をコピーする処理では空の配列をもう一つ用意するのではなく、型宣言なし(バリアント型)の空の変数を用意し、そこにループで回しながら配列の中身を入れていきます。配列の結合にはJoin関数を使用します。サンプルコードは以下です。Subまず文字列の入った変数を用意し、それを配列に格納しました。配列に対してJoin関数を使用しています。すると、以下のように出力されます。Hello,VBAJoin関数は第一引数に対象となる配列を指定し、第二引数に区切り文字を指定します。今回は第二引数を空で指定しているため、区切り文字はなしです。要素として格納した三つの要素がそのまま出力されました。VBAには二つの配列を結合する関数がありません。そのため配列同士を結合したい場合、Join関数とSplit関数を組み合わせます。サンプルコードは以下です。Subこのコードを実行すると、以下のように出力されます。ラーメン,チャーハン,餃子,天津飯,小龍包,配列の要素をいったんすべて文字列として結合し、それを分割しています。分割された要素をループで出力しました。まとめ以上のように、VBAの配列の使い方はいろいろあります。最初からすべて覚える必要はなく、ざっくりとどのようなことができるのか把握しておけば問題ありまえん。必要になったタイミングでその都度やり方を調べれば良いのです。慣れるまではソースコードを見ても意味がよくわからないかもしれません。繰り返しトレースすることや、いろいろな人のソースコードを見る、実際に自分で書いてみる、といったことを繰り返していけば理解できるようになります。人間はわからないものが連続すると混乱して全部がわからなくなると言われますが、プログラミングはまさにそういったところがあります。本来一つ一つをじっくり見れば理解できるのに、全体を理解しようとするあまり訳がわからなくなるということです。一つ一つ落ち着いて理解していけばいずれぱっと見で全体を理解できるようになるので、焦らず一歩一歩着実にステップアップしていきましょう。TwitterFacebookはてブPocketLINE人気記事VBAでのRangeとcellsの使い分け方をまとめましたエンジニアがおすすめの靴選び!TPOで迷わない。