- ベストアンサー
Excel 複数列から語句を含む行をフィルタ
ExcelのVBAで複数列から、キーワードを含む行を検索する方法についてお聞きします。 検索キーワードを名古屋と設定しました。 A列から名古屋というキーワードを含む行を検索する為に、下記コードを作りました。 Range("A1").AutoFilter 1, "*名古屋*" しかし、これだとA列からしか検索することが出来ません。 例えば、B列とC列から名古屋を含む行を検索するにはどのような方法があるのでしょうか。 宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
今仮にZ列を作業列として使用するものとして、次の様なVBAは如何でしょうか? Sub Macro() Dim lr As Long lr = WorksheetFunction.Max(WorksheetFunction.Match("*?", Columns("B:B"), -1), WorksheetFunction.Match("*?", Columns("C:C"), -1)) Range("Z2:Z" & lr).FormulaR1C1 = "=RC2&"" ""&RC3" Range("Z1").Formula = "=""""" Range("Z1").AutoFilter 1, "*名古屋*" End Sub 因みに、Z列に入力される関数において、途中に半角スペースが挟まる様になっているのは、例えばB2セルが「氏名」、C2セルが「古谷圭司」等となっている場合には、Z2セルの関数を単純に「=B2&C2」としてしまいますと、Z2セルの値が「氏名古谷圭司」となってしまい、B2とC2のどちらのセルにも「名古屋」が含まれていないのにもかかわらず、Z2セルには「名古屋」が含まれてしまいますので、この様な事を防止するために間にスペースを入れる様にしております。
その他の回答 (1)
- web2525
- ベストアンサー率42% (1219/2850)
>B列とC列から名古屋を含む行を検索するにはどのような方法があるのでしょうか B列の検索:Range("B1").AutoFilter 1, "*名古屋*" C列の検索:Range("C1").AutoFilter 1, "*名古屋*" 多分聞きたいのはこれではなく ------------ A,B,C列のどれかに名古屋の文字が含まれている行をオートフィルタで抽出したい かな? D列に =ISERROR(MATCH("*名古屋*",A3:C3,0)) 下方向にコピー D列でオートフィルタすればいい Range("D1").AutoFilter 1,"FALSE" 作業列を使わずにというのであれば VBAで1行づつ該当しない行を非表示にする処理を行うとかで対応
お礼
ありがとうございます。 B列とC列のいずれかに名古屋を含む行をオートフィルタで抽出。 と、するべきでした。 作業列を作り、そこに関数を入力する方法は思いつきませんでした。 FALSEもしくはTRUEを表示させることが出来ました。 それをキーワードにしてフィルタをするように作ってみようと思います。
お礼
ありがとうございます。 Z列にB列とC列の文字列を、スペースで挟んで表示させることが出来ました。 間にスペースがあるので、列ごとの区切りがとても分かりやすいです。 この方法ですと、指定した列の入力文字がすべて見られるのですね。 Z列に表示された文字列から、キーワードを含む行を抽出しようと思います。