STEP 3 VBA編

3.配列を操作する関数

VBAでは、Excelのセルでの計算のように、配列同士を演算することはできません。
VBAにおける配列の役割は、要するに同じ種類の変数をまとめて扱えるようにするということであり、ループなどでは扱いやすいものの、その値を操作する場合は、基本的にはスカラ変数同様、配列の各要素に個別にアクセスする必要があります。
特に、数値などの厳密な定義型で宣言された固定長配列の場合、操作していて融通が効かないと感じることも少なくありません。

それに比べると、バリアント型の動的配列は自由度が高く、さまざまな利用方法が用意されています。
VBAには、このような配列を操作することができる関数がいくつか用意されています。
具体的には、ArraySplitJoinFilterといった関数です。

Arrayは、引数として与えられた複数の値を1つの一次元配列として返す関数です。
たとえばOpenTextメソッドの引数など、配列構造のデータが必要な場面で、直接配列として引数を指定するのに使われることもありますが、通常は戻り値を変数に代入して使用します。
Arrayで作成される配列はバリアント型なので、それを受け取る変数も、当然バリアント型の動的配列、またはバリアント型の変数である必要があります。
次のコードは、どちらも同じ結果になります。

Dim a() As Variant
a() = Array(1, 2, 3)
MsgBox a(1)
Dim a As Variant
a = Array(1, 2, 3)
MsgBox a(1)

Splitは、第一引数として与えられた文字列を、第二引数で与えられた文字で区切り、その各文字列を一次元配列として返す関数です。
第二引数を省略した場合、スペースが区切り文字と見なされます。また、第三引数で戻り値となる配列の要素数を、第四引数で文字列比較のモードを指定できます。
Split関数の戻り値の配列は、文字列型の動的配列、またはバリアント型の変数に代入できます。
たとえば次のコードでは、どちらも「butter」という文字列がメッセージボックスに表示されます。

Dim a() As String
a() = Split("apple;butter;cake", ";")
MsgBox a(1)
Dim a As Variant
a = Split("apple;butter;cake", ";")
MsgBox a(1)

Joinは、第一引数として与えられた一次元配列を、第二引数で指定された文字を区切り文字とする1つの文字列として返す関数です。
すなわち、Splitの逆の働きをする関数といえます。
第二引数を省略した場合は、Split同様、スペースが区切り文字となります。
たとえば次のコードでは、「AandBandC」という文字列がメッセージボックスに表示されます。

MsgBox Join(Array("A", "B", "C"), "and")

Filterは、第一引数として与えられた一次元配列から、第二引数で指定された条件にマッチする要素だけを抽出し、新しい配列として返す関数です。
通常、第二引数で指定された文字列を含む要素だけの配列が返されますが、第三引数(省略可能)にFalse(既定値はTrue)を指定した場合、第二引数の文字列を含まない要素だけの配列が返されます。
たとえば次のコードでは、元の配列の中で、「ap」という文字列を含む要素だけが抽出され、Join関数で結合されて、メッセージボックスに表示されます。

Array_1 = Array("apple", "alcohol", "application", "captain", "caution")
Array_2 = Filter(Array_1, "ap")
MsgBox Join(Array_2)

このほかに配列に関連した関数としては、引数として与えられた配列のインデックスの最小値を調べるLBound、同じく最大値を調べるUBoundがあります。
これらも、覚えておくべき関数です。

<2.配列の代入    4.配列を利用したセル操作>