一次元配列を条件指定で抽出する汎用プロシージャ Excel VBA
- yuji fukami
- 2 日前
- 読了時間: 2分

<概要>
Excel VBA で処理をしていると、「配列の中から条件に合う要素だけを抜き出したい」という場面は非常に多く出てきます。
例えば次のようなケースです。
商品名配列から「特定の文字を含むもの」だけ抽出したい
ID一覧から「○○で始まるもの」だけを取得したい
数値配列から「一定値以上」のデータだけを扱いたい
日付配列から「指定日以降」のデータを抽出したい
このような処理を 毎回 For~If で書くのは非効率 ですし、条件が増えるたびにコードが肥大化しがちです。
そこで使えるのが、今回紹介する FilterArray1D です。
FilterArray1D とは?
FilterArray1D は、
一次元配列(1 To N)
フィルター値
抽出条件(Enum)
を指定するだけで、条件に合致した要素だけを 一次元配列として返す 汎用関数です。
内部では、
一次元配列 → (N×1) の二次元配列へ変換
汎用フィルタ関数 FilterArray2D で抽出
再び一次元配列へ戻す
という構造になっており、文字列・数値・日付を安全に扱える設計になっています。
使用できる主な抽出条件
Enum Enumフィルタ条件 により、次のような指定が可能です。
vbと等しい
vbと等しくない
vbを含む
vbを含まない
vbから始まる
vbから始まらない
vbで終わる
vbで終わらない
vbより大きい
vb以上
vbより小さい
vb以下
👉 文字列判定・数値判定・日付判定を1つの関数で統一できるのが大きな特徴です。
<実行例>
サンプル①:完全一致で抽出する
サンプル②:「文字を含む」で抽出する
サンプル③:「から始まる/で終わる」
サンプル④:数値の大小比較
<関連コード>
今回の汎用プロシージャは、下記の別で紹介している汎用プロシージャを使用しています。
・IsArray1D → https://www.softex-celware.com/post/isarray1d
・IsArray1DStart1 → https://www.softex-celware.com/post/isarray1d
・TransposeArray1DtoN1 → https://www.softex-celware.com/post/transposearray1dton1
・FilterArray2D → https://www.softex-celware.com/post/filterarray2d
・TransposeN1toArray1D → https://www.softex-celware.com/post/transposen1toarray1d
<関連記事>
今回紹介しているような汎用プロシージャを部品として一元管理する方法は別記事で紹介していますので、是非このノウハウも参考にしてみてください。
コーディングを効率化する上でどんどん増やしていった汎用プロシージャ(部品)をいくら増やしても簡単に流用ができるような仕組みの構築が可能になります。


コメント