【ExcelVBA・マクロ】Filter関数の使い方|配列から特定の文字を含むデータを抽出する方法【コピペOK】

Filter関数の使い方 ExcelVBA

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関数を使いこなせるようになると、配列処理が一気に便利になります。
検索やデータ抽出の場面で非常に役立つので、ぜひ活用してみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
いがぴをフォローする

コメント

タイトルとURLをコピーしました