(AdvancedFilter) 指定列のセルに指定文字を含む行を抽出するには?

Question 70.2 Previous Next
文字列を検索して、一致した行を表示させたいのですが(フィルタ機能的な)。 たとえば、
AAA abc (AAAで1つのセル、abcで1つのセル、両方で1行)
BBB ad
CCC afs
DDD acd
という表があって、後ろの列を c という「文字列」で検索した場合
AAA abc
DDD acd
という2つの行を検索できるようにしたいのですが。

オートフィルターでは列のセルの内容で検索するので、このようなことはできないのです。 かといって、文字列ごとにオートフィルターを掛けて、列を増やすわけにも行きません。
初心者なもので、プログラムの組み方自体も不明で教えてほしいのですが。 このようなことは、できませんでしょうか? 文字列の間をスペース等で区切る事は可能ですが
Answer   Copyright (C) 2004.12.6 永井善王
そうですね。オートフィルターは適当でないでしょうね。 しかし、アドバンス(Advanced)フィルタならば可能と思いますよ。
下図のようにできれば良いのでしょうか。

 A図: 抽出前のシート    B図: 抽出後のシート
抽出前のシート 抽出後のシート アドバンスフィルタは、Excelの[データ]メニューの[フィルタ]にある[フィルタ オプションの設定]のことで、その名のとおりオートフィルターよりも複雑な検索が可能です。

アドバンスフィルタを利用するには、2つの条件があります。

1 抽出対象にするシートに[列見出し]が必要
そのため、ここでは A列に「名称」、B列に「ランク」と付けておきました。

2 [検索条件]をシート上に作成しておくこと
ワークシート
ここでは別シートである Sheet2 へ、左図のように作成しました。 (同一シートでも可)
1行目 ・・ 検索対象シートの列見出しと同じにしておくと無難です。
2行目 ・・ 検索条件で、あなたのご希望がB列、つまり、列見出しが「ランク」という列の各セルの文字列に「c」が混ざっている場合だけ、その行を抽出したいということですから、B2セルに「*c*」と入力しておきます。
ワークシート
準備ができたら右図の[フィルタ オプションの設定]で [リスト範囲]と [検索条件範囲]を指定して、[OK]ボタンをクリックするだけで抽出されます。

蛇足ですが初心者さんということですから、もしも、「f」が混ざっている行も同時に抽出したいときは、B3セルに「*f*」と入力します。
そして、[検索条件範囲]に 「A1:B3」と指定すれば、B2セルまたは B3セルのどちらかの条件を満足する行が、抽出されるようになります。

「*」がワイルドカード文字であることはご存知と思いますが、詳しく知りたい場合はインターネットで検索するか、次のページを見てください。  
ワイルドカード文字を使用する

文字列の間をスペース等で区切る方法
ついでのご質問のようですが、2つの文字列を間にスペースを入れて連結すると言う意味でしたら、文字列連結子「 & 」を使えば可能です。
たとえば、
"AAA" & " " & "abc" とすれば "AAA abc" という文字列ができますし、A図で Range("A2").Value & " " & Range("B2").Value としても同じ結果が得られます。 お試しください。

 

Excel VBA Macro