【excelVBA】Findメソッドで複数列の検索条件を指定する方法

このQ&Aのポイント
  • ExcelのVBAを使用して、Findメソッドを使って複数列の検索条件を指定する方法について説明します。
  • Findメソッドを使用して、A列とB列の値を条件にしてC列の値を取得する方法を解説します。
  • 現在のところ、直接複数列の検索条件を指定する方法がわかりませんが、二段階で取得する方法を使うことで目的の結果を得ることができます。
回答を見る
  • ベストアンサー

【excelVBA】Findメソッドで検索対象を複数列

findメソッドで、検索対象を複数列&検索条件を複数にしたいのですが、可能でしょうか? イメージ的には、下のようなデータが入っているシートから、 AとB列を条件にしてC列の同じ行の値を取得したいのです。 A |B |C 00|00|01 00|00|02 00|01|01 Range("A:B").Find(what:="00"&"00"・・・)のような感じです。 →期待される取得結果は01と02です。 今のところ方法がおもいつかないので、 (1)A列を条件にしB列 (2)(1)のB列を条件にしC列 と二段階で取得するしかないかな~と思っています。 このような処理は不可能でしょうか?また可能ならばその記述方法をご教授ください。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • masa_019
  • ベストアンサー率61% (121/197)
回答No.1

こんにちは。 どこか空いている列に"=A1&B1"のような数式を入れて、 下へコピーします。 そして、その列を対象にして、"0000"を検索すれば良いのでは? もし、空いている列が無いのであれば、A列とB列の文字列を 結合しながら、"0000"とイコールかどうか評価するという 動作を1行目からループさせる方法でも良いかもしれません。 一応、A列 & B列が"0000"になる行のC列の値を イミデイエイトに列挙するサンプルです。↓ Option Explicit Sub Sample() Dim i As Long Dim j As Long With ActiveSheet j = .Range("A1").CurrentRegion.Rows.Count For i = 1 To j If .Cells(i, 1).Value & .Cells(i, 2).Value = "0000" Then Debug.Print .Cells(i, 3).Value End If Next End With End Sub

mocmocc
質問者

お礼

ご回答ありがとうございます! 質問直後にその方法を思いついたので、その方向でかいてみます。

関連するQ&A

  • vbaのFindメソッドで取得するにはどうすれば

    A1に「あ」B1に「い」と入れて、 A2に「=A1&B1」としました。 この時、A2は「あい」と表示されます。 今回やりたいことは、 Sub test() Debug.Print Cells.Find(What:=" あい").Row End Sub で、2を返したいのですが、 実行時エラー91になってしまいます。 セル内に該当の文字列がないからだと思いますが、 数式でつなげた文字列を、 vbaのFindメソッドで取得するにはどうすれば良いでしょうか?

  • マクロのFINDメソッドで質問です。

    マクロの初心者で、いつもお世話になっております。 FINDメソッドを使って別々のシートから同じIDを探す処理をしたいのですが、IDが片方にしか無い場合に検索2rangeが"nothing"になってしまい止まってしまいます。 抜粋ですか以下の様にコーディングしました。 解る方がいましたらアドバイスをお願いします。 IDはIDがセットされている列です。 シート2を上から1つずつ見ていき、 シート1から該当するIDを探す処理をします。 最終的には該当したIDの行数を記憶して、 シート1とシート2をマッチングさせたいのですが。 Dim 検索range As Range Dim 検索2range As Range ID = Sheet2.Cells(LOOP_C1, 検索列).Value Set 検索Range = Range(Sheet1.Cells(F2TOP,検索列),Sheet1.Cells(LASTRow, 検索列)) Set 検索2range = 検索Range.Find(What:=ID, LookAt:=xlWhole, SearchOrder:=xlByRows, searchformat:=True).Row ※ If 検索2range Is Nothing Then Else   検索2range.Activate End If ・ ・ ・ ※の箇所で止まってしまいます。

  • ExcelVBA Findメソッドで検索のスタート位置について

    おせわになっております。 Findメソッドを用いて、先頭から順に値を検索しようとしています。 Set rngSearch = rngList.Find("ゴルフ", rngSearch, , xlPart) ↑ このような方法で、該当するものを一つ一つ探そうとしています。 つまり、仮に一列目で見つかったら、次は二列目以降から探そうと しています。 FindNextなどを使用しないのは、連続で求めるためではなく、 ボタンを押したときに一つずつ検索するからです。 しかし、この書式ではスタート地点にした、次のセルから検索する はずが、スタート地点に指定したセルから検索してしまい、 何度行っても同じセルばかりを検索して返してしまいます。 Offsetなどで一行ずつずらしても、同じ場所からしか検索が 始まりません。 これはなぜなのでしょうか? 念のため、他のメソッドなどでは決してrngSearch は代入等の 操作はしておりません。 ちなみに、同じメソッドの中で同じ書式を繰り返すと   Set rngSearch = rngList.Find("ゴルフ", rngSearch, , xlPart) MsgBox rngSearch.Value   Set rngSearch = rngList.Find("ゴルフ", rngSearch, , xlPart) MsgBox rngSearch.Value   Set rngSearch = rngList.Find("ゴルフ", rngSearch, , xlPart) MsgBox rngSearch.Value   Set rngSearch = rngList.Find("ゴルフ", rngSearch, , xlPart) MsgBox rngSearch.Value   … うまくいくようなのです。一度でもメソッドを抜けるとうまくいか なくなるような感じです。 以上、わかりづらい説明で大変申し訳ありませんが、なにとぞお願い 致します。

  • Findステートメントで別なブックの検索

    Findステートメントで検索した内容のある行のA列にある値をキーワードとして別なブックのA列に検索をかけてヒットしたセルの内容を元のブックの指定したセルに移すという動作をさせたいので次ののように書いてみました。 Private Sub CommandButton2_Click() Dim Yline As Long Dim No As Variant Dim c As Range Dim sh As Worksheet Dim sh_no As Integer Dim findcell As Range Dim add As String Set sh = Worksheets("ブックAの1") No = TextBox1.Text sh_no = 1 'テキストボックスに値が入っていた場合 If No <> "" Then 'Find メソッドの最低のプロパティは入れる。SearchOrder は特にいらない Set c = sh.Range("B:B").Find( _ What:=No, _ LookIn:=xlValues, _ LookAt:=xlPart, _ Searchorder:=xlByRows) '見つかった場合にのみ、値を入れる If Not c Is Nothing Then Yline = c.Row '見つかった行のA列の文字列でブックBに検索をかける add = sh.Cells(Yline, 1).Value Workbooks("B").Activate Set findcell = Workbooks("B").Worksheet(sh_no).Range("A:A").Find( _ What:=add, _ LookIn:=xlValues, _ LookAt:=xlPart, _ Searchorder:=xlByRows) '前Setステートメントからのループ検索開始 If findcell Is Nothing Then Do sh_no = sh_no + 1 If sh_no > ThisWorkbook.Worksheets.Count Then Exit Sub End If Set findcell = Workbooks("B").Worksheets.(sh_no).Range("A:A").Find( _ What:=add, _ LookIn:=xlValues, _ LookAt:=xlPart, _ Searchorder:=xlByRows) Loop While findcell Is Nothing End If End If Workbooks("A").Activate With Worksheets("Aの2")   .Cells(21, 4).Value = sh.Cells(Yline, 14).Value .Cells(20, 4).Value = sh.Cells(Yline, 15).Value .Cells(36, 4).Value = findcell End With Unload Me Else MsgBox No & " は見つかりません。", 48 End If Set sh = Nothing End Sub するとwhat:=addとしてaddが見つかるまでシート番号を増やしていくループのところでエラーがでてキーワードが見つからないと出ます。恐らくブックBを検索してくれているとは思うのです。A列に空白があるためかと思い埋めてみましたが関係ないようです。 構文エラー的なものは無いと思いますが、宜しくお願いします。

  • Excel VBAのFindメソッドについて

    Excel VBAを勉強中の者です。 Findメソッドで、数字の入ったF5セルからF28セルの範囲から、 1という数字の入ったセルを検索したいと思い Sub test() Dim xRange As Range Set xRange = Range("F5:F20").Find(What:=1, LookIn:=xlValues)   xRange.Select End sub としました。 しかし、このまま検索するとF6セルの12が検索されてしまいます。 他の数字では問題なく、対象の数字の先頭の数字が選択されます。 どうしてでしょうか? よろしくお願いします。

  • ExcelVBAで、Findで検索するとき

    お世話になります。 Findを使用して、特定のセルの中から検索するときに、 値ではなく、参照先から一致させることはできますでしょうか。 例えば、A1からA5までを検索するとします。 A1はB1を参照、A2はB2を参照…という具合に、B1からB5までを 参照しているとします。 B1からB5までは、順番に1から5までが入っているとします。 そこで、参照先の値が1のものを見つけたい場合、A1のセルを 返してくれるようにしたいわけです。 そのためには、どうすればよいかを探しています。 以上、よろしくお願いいたします。

  • エクセルVBAのFindメソッドを使って・・・

    こんばんは。エクセルのVBAで教えてください。 I列で「数量」という文字を見つけて、 その(I列の)右隣(J列)の値をB2以降に、 その2つ左(G列)のレートをC2以降に、 その3つ左(F列)の、2つ上の商品名をA2以降に 順に書き出していくようにしたいのですがどのようにコードを 書けばいいでしょうか? Findメソッドを使ってできそうだと考えたのですが、その先が さっぱりわかりませんが、なんとか形にしたいので質問させていただ きます。よろしくお願いします。

  • マクロ findを使用しての列番号検索

    いつも回答して頂き、とても感謝しています。 質問内容ですが、 FINDを使用して列番号を検索する時、FINDでセル位置を取り出し、そのセル位置を元に列番号を取り出しています。FINDの記述部分で列番号を検索するにはどうしたらよろしいのでしょうか?宜しくお願い致します。 Dim 項目1 As Range Dim c1 As Long If Application.CountIf(Rows(4), "みかん") = 1 Then Set 項目1 = ws2.Rows(4).Find(what:="みかん", LookIn:=xlValues, lookat:=xlWhole, _ SearchOrder:=xlByColumns, searchdirection:=xlPrevious) c1 = 項目1.Column End If

  • エクセルで複数列の検索をマクロで行いたい

    A列、B列、C列に項目が、D列以降にデータが入っているシートがあります。 具体的には、  A列:商品名  B列:地域名  C列:店舗名 となっていて、ABCの順で昇順にソートがかけられています。 マクロの記録を使って一行だけを検索することは出来たのですが、(Selection.find(What:="商品名"~ となっていました)本当は、"商品名"+"地域名"+"店舗名"が一致するものを検索したいのです。 現在は、一行目で検索をかけて、後はactivecell.offset(*,*).value="地域名"のような感じで、しらみつぶしに探しています。 複数列で検索するよい方法などありましたら教えてください。

  • 【VBA】findの検索条件における制限について

    すみません、教えてください。 例) Range("XX" & YY).Find(what:=文字A, lookAt:=xlWhole) ↑のような感じで完全一致で検索したいのですが、 実行するとエラーコード13のエラーが出てしまいました。    実行時エラー'13' 型が一致しません。 調べてみたのですが、VBAの本にはfindのwhatはVariant型と書いてあり、 Variant型が16バイトという記載がありました。 例文の“=文字A”には30バイトの文字列が入っている事がわかりました。 文字数を減らした所うまく通ったのでこれが原因と考えているのですが、 もし、対処方法があれば教えていただきたいです。

専門家に質問してみよう