VBAには配列のpushメソッドは無い

主にWeb系で扱うプログラミング言語には配列の操作を行うメソッドがあります。ここでは配列の終端にデータを追加する処理をVBA用にした関数を紹介します

終端に追加する処理はプログラミング言語によって関数名は異なりますが、JavaScriptやPHPやRubyなど一般的には「push」という名前が多いため、以下で紹介する関数はそれに合わせて「Arraypush」という関数名にしています。


配列の先頭や終端にデータの追加や削除を行うには

VBAの配列は単にデータを複数保持しているだけですが、現在主流のプログラミング言語では配列はクラスとして管理されており、配列を操作するための関数が複数用意されていることが一般的です。

プログラミング言語によって関数名は異なりますが、配列を操作する関数として一般的には以下のようなものがあります。

関数名 用途 関数戻り値
shift 配列の先頭データを切り取る 切り取った先頭データ
unshift 配列の先頭にデータを追加する 追加後の配列要素数
pop 配列の終端データを切り取る 切り取った終端データ
push 配列の終端にデータを追加する 追加後の配列要素数

これらの関数をVBAでも使えるように以下に説明します。なお、それぞれの実装方法が異なるためページを分けて説明しています。



配列の終端にデータを追加するコード(push)

以下のコードは配列の終端の位置にデータを追加する関数です。JavaScriptやPHPなどでのpushメソッドになります。

JavaScriptなどのpushメソッドは複数のデータを1度に追加できますが、ここでは追加できるデータは1つに制限しています。

使い方は、関数の引数の1つ目に配列、2つ目に追加するデータを指定します。関数の戻り値はデータ追加後の配列の要素数です。

戻り値の要素数について補足します。VBAの場合の配列の要素数はUBound関数を使うことが一般的で、UBound関数は配列の要素数ではなく配列終端の要素位置を返すため、例えば[0] [1] [2]の3つのデータを持つ配列でもUBound関数は3ではなく2を返します。それに合わせて厳密な要素数ではなくUBound関数の値を関数戻り値として返却しています。それが気に入らない場合は戻り値に+1した値を返すようにいじってください。

配列は1次元配列を対象としており、配列のデータ型はなんでもOKです。なんでもOKにするために、オブジェクト型かどうかの判定をIsObject関数で行い、オブジェクト型であれば値の代入方法でSetを使い、そうでなければ=で代入するようにしています。

IsObject関数の詳細については「VBAのオブジェクト変数かどうかを判定する(IsObject)」をご参照ください。

引数が配列でない場合は処理しません。



使い方

上のArraypush関数をString型の配列とRange型の配列のそれぞれを使った場合の利用例です。

引数に配列と追加するデータを渡すだけです。戻り値として配列要素数を受け取っています。検証用として、データ追加後の配列の各要素を出力しています。

実行結果
4
abc
bbb
ccc
ddd
AAA
1
!
BBB
3
A1
B2
C3:D4
C1