Excel VBA で「含む/含まない」条件を指定してオートフィルターをかける方法【ワイルドカード活用ガイド】

目次

概要

Excel には、オートフィルターにワイルドカード(*?)を指定し、特定の文字列を 含む行だけ、あるいは 含まない行だけ を抽出する機能がございます。本記事では、VBA を用いた実装例を示しながら、ワイルドカード指定の基本と応用を丁寧に解説いたします。


前提条件

項目内容
対応 ExcelMicrosoft 365 または 2016 以降
データ範囲F3:I100 に見出し行を含む表が配置されている想定
マクロ設置先標準モジュール

サンプルコード(VBA)

1. 特定の文字列を含む行のみ抽出する例

Sub FilterContainsKeyword()

    Dim tblRange As Range              ' フィルター対象
    Set tblRange = Worksheets("Sheet1").Range("F3").CurrentRegion   ' 見出し行を含む範囲
    
    '--- 列 4(H 列)で「森」を含む行を抽出 ---
    tblRange.AutoFilter Field:=4, Criteria1:="=*森*"
    
End Sub

2. 特定の文字列を含まない行だけ抽出する例

Sub FilterExcludesKeyword()

    Dim tblRange As Range
    Set tblRange = Worksheets("Sheet1").Range("F3").CurrentRegion
    
    '--- 列 4(H 列)で「森」を含まない行を抽出 ---
    tblRange.AutoFilter Field:=4, Criteria1:="<>*森*"
    
End Sub

コードのポイント

説明
3CurrentRegion で表全体(見出し含む)を取得いたします。開始セルは実データに合わせて変更してください。
6=*森* は「森」を含むセルのみ抽出するワイルドカード式です。* は任意の文字列を表します。
12<>*森* とすると「森」を含まないセルのみ抽出できます。<> は「一致しない」条件を示します。

応用例

目的実装のヒント
複数キーワードを OR 条件で抽出Criteria1:=Array("*森*", "*林*"), Operator:=xlFilterValues
AND 条件で複合抽出2 回目以降の AutoFilter で別列に条件を重ねると AND 条件になります。
大文字小文字を区別したいApplication.MatchCase = True を実行してからフィルターを設定します(処理後は False に戻してください)。

よくある質問

質問回答
ワイルドカード ?* の違いは何ですか。* は 0 文字以上の任意の文字列、? は任意の 1 文字を表します。部分一致の柔軟性が異なります。
抽出後、可視セルだけをコピーしたい場合は。tblRange.SpecialCells(xlCellTypeVisible).Copy で可視セルのみを扱えます。

まとめ

ワイルドカードを利用したオートフィルター設定により、特定文字列を 含む/含まない 行を即座に抽出できます。まずはサンプルマクロを実行し、想定どおりの行が表示されることをご確認ください。キーワードや列番号を変更するだけで、さまざまなデータセットへ応用可能ですので、ぜひ業務効率化にお役立てください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次