PushValueArray1D|一次元配列を拡張して要素を追加(Empty/Object対応)Excel VBA
- yuji fukami
- 3 時間前
- 読了時間: 2分

<概要 (拡張)>
PushValueArray1D は、一次元配列の末尾に要素を追加するための関数です。VBAでは配列に Push のような標準機能がないため、要素追加のたびに ReDim Preserve を書く必要があり、コードが散らかりがちです。
この関数は次の点が特徴です。
可変長引数(ParamArray)で、複数の値を一度に追加できる
Array1D が Empty の場合でも追加できる(初期化不要)
追加する値が Object の場合は Set 代入で正しく格納できる
内部では ExpandArray1D を使って 配列を指定数だけ拡張してから値を詰める
「配列を増やして、最後に追加する」という処理を 1行で書けるようにするための汎用関数です。
使い方(要点)
既存の一次元配列に追加するarr = PushValueArray1D(arr, 追加値1, 追加値2, ...)
まだ配列が Empty の状態でもOKDim arr As Variant のまま使える(ReDim不要)
Object を追加する場合もOK(例:Dictionary、Collection、Rangeなど)
<実行例>
実行例のサンプルコードは次の通りです
実行結果のイミディエイトウィンドウは次のようになります。

最初は arr が Empty でも、PushValueArray1D 実行で 1 To n の配列として自動生成される
2回目以降の Push では、既存要素はそのまま保持したまま末尾に追加される
Object を追加した場合、Set 代入で入るため、参照が壊れずに格納される(出力では [Object] Type=Dictionary のように確認できる)
注意点・補足(短め)
ExpandArray1D 側で 一次元配列チェック(IsArray1D / IsArray1DStart1)を行う前提
ただし PushValueArray1D は Array1DがEmptyのケースを先に分岐しているため、未初期化でも使える
「開始要素番号は 1」で統一しているため、運用上の混乱が起きにくい(汎用関数群と相性が良い)
<関連コード>
今回の汎用プロシージャは、下記の別で紹介している汎用プロシージャを使用しています。
・IsArray1D → https://www.softex-celware.com/post/isarray1d
・IsArray1DStart1 → https://www.softex-celware.com/post/isarray1d
・ExpandArray1D → https://www.softex-celware.com/post/expandarray1d
<関連記事>
今回紹介しているような汎用プロシージャを部品として一元管理する方法は別記事で紹介していますので、是非このノウハウも参考にしてみてください。
コーディングを効率化する上でどんどん増やしていった汎用プロシージャ(部品)をいくら増やしても簡単に流用ができるような仕組みの構築が可能になります。




コメント