VBAでデータを扱っていると、次のようなことはありませんか?
- 特定の文字を含むデータだけ取り出したい
- 配列の中から条件に一致するものを抽出したい
- 検索機能のような処理を作りたい
このような場合は、Filter関数を使うことで簡単に解決できます。
配列の中から条件に一致するデータを抽出できる便利な関数です。
この記事では、Filter関数の基本から実務で使える応用までを初心者向けに分かりやすく解説します。
この記事でできること
- 配列から条件に一致するデータを抽出できる
- 部分一致で検索ができる
- 実務で使えるフィルタ処理が分かる
基本:Filter関数の使い方
基本構文はこちらです。
Filter(配列, 検索文字列, [含むか], [比較方法])
- 配列 → 検索対象の配列
- 検索文字列 → 探したい文字
- 含むか → True(含む)/ False(含まない)
- 比較方法 → vbBinaryCompare / vbTextCompare
基本例:特定の文字を含むデータを抽出
Option Explicit
Sub FilterBasic()
Dim arr
Dim result
arr = Array("りんご", "みかん", "バナナ", "りんごジュース")
result = Filter(arr, "りんご")
Dim i As Long
For i = LBound(result) To UBound(result)
Debug.Print result(i)
Next i
End Sub
→ 「りんご」「りんごジュース」が抽出されます。
部分一致で検索できる
Filterは部分一致検索
Filter(arr, "ん")
→ 「りんご」「みかん」などが対象になります。
除外検索(含まないデータ)
第3引数をFalseにすると除外できます。
result = Filter(arr, "りんご", False)
→ 「りんご」を含まないデータのみ取得
大文字・小文字を区別しない検索
result = Filter(arr, "apple", True, vbTextCompare)
vbTextCompareで大文字小文字を無視できます。
セルの値を配列にしてフィルタする
セルのデータを配列として扱う例です。
Option Explicit
Sub FilterFromCells()
Dim arr
Dim result
Dim i As Long
arr = Application.Transpose(Range("A1:A5").Value)
result = Filter(arr, "A")
For i = LBound(result) To UBound(result)
Debug.Print result(i)
Next i
End Sub
セルのデータでもFilterが使えます。
実務でよくある使い方
① 名前検索
Filter(arr, "田中")
② 商品検索
Filter(arr, "りんご")
③ 条件に合うデータ抽出
配列データから該当するものだけ取り出す処理に最適です。
Filterの注意点
① 配列専用
Filterは配列にしか使えません。
② 完全一致ではない
部分一致なので注意が必要です。
③ 結果も配列で返る
ループ処理で扱う必要があります。
よくあるエラーと対処法
① 型が一致しません
配列ではないデータを渡している可能性があります。
② 結果が空になる
検索文字が一致しているか確認してください。
③ コードは正しいのにエラーになる
コピー時に全角文字や特殊文字が混ざることがあります。
その場合は該当行を手入力し直すと解決することがあります。
まとめ
- Filterは配列の検索に使う関数
- 部分一致でデータ抽出ができる
- 除外検索も可能
- 実務では検索処理で活躍
Filter関数を使いこなせるようになると、配列処理が一気に便利になります。
検索やデータ抽出の場面で非常に役立つので、ぜひ活用してみてください。


コメント