アプリ版:「スタンプのみでお礼する」機能のリリースについて

ExcelのVBAで複数列から、キーワードを含む行を検索する方法についてお聞きします。
検索キーワードを名古屋と設定しました。

A列から名古屋というキーワードを含む行を検索する為に、下記コードを作りました。
Range("A1").AutoFilter 1, "*名古屋*"

しかし、これだとA列からしか検索することが出来ません。
例えば、B列とC列から名古屋を含む行を検索するにはどのような方法があるのでしょうか。
宜しくお願いします。

A 回答 (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セルには「名古屋」が含まれてしまいますので、この様な事を防止するために間にスペースを入れる様にしております。
    • good
    • 0
この回答へのお礼

ありがとうございます。
Z列にB列とC列の文字列を、スペースで挟んで表示させることが出来ました。
間にスペースがあるので、列ごとの区切りがとても分かりやすいです。
この方法ですと、指定した列の入力文字がすべて見られるのですね。
Z列に表示された文字列から、キーワードを含む行を抽出しようと思います。

お礼日時:2013/09/29 17:57

>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行づつ該当しない行を非表示にする処理を行うとかで対応
    • good
    • 0
この回答へのお礼

ありがとうございます。
B列とC列のいずれかに名古屋を含む行をオートフィルタで抽出。
と、するべきでした。

作業列を作り、そこに関数を入力する方法は思いつきませんでした。
FALSEもしくはTRUEを表示させることが出来ました。
それをキーワードにしてフィルタをするように作ってみようと思います。

お礼日時:2013/09/29 17:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!