- ベストアンサー
エクセルVBAで2重の検索方法
- エクセルVBAで2重の検索方法について詳しく解説します。
- キーワード1で検索されたデータの中から、キーワード2でさらに絞り込みする方法をご説明します。
- Do Loopを使用して、キーワード1で検索されたデータの中からキーワード2で絞り込む手順をご紹介します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
前回回答したmerlionXXです。 > この記述だと、一番最初にキーワード1でひっかかったものしかキーワード2を検索しないので・・・。 だって、最初ご提示のコードは転記先が、「別の指定した行」などという変数になっていたので1つしかないものと思いましたよ。 いくつもあるなら変数じゃうけられないでしょ。 以下の前提でかきます。 元データはSheet1にある。 該当した行は、Sheet2に1行目から順に転記する。 実際にはシート名はちがうでしょうから Set ws(1) = Sheets("Sheet1") Set ws(2) = Sheets("Sheet2") の部分を修正してください。 Sub test03() Dim ws(1 To 2) As Worksheet Dim Keyword, Keyword2 Dim Fnd As Range, Fnd2 As Range, c As eange Dim i As Long, ad As String Set ws(1) = Sheets("Sheet1") Set ws(2) = Sheets("Sheet2") '入力されたキーワードを変数Keywordに入れる Keyword = InputBox("キーワードを入力してください") Keyword2 = InputBox("キーワード2を入力してください") With ws(1) Set Fnd = .Range("C:C").Find(Keyword) 'C列検索 If Fnd Is Nothing Then 'もし、C列にキーワードが見つからなかったら MsgBox "データはありません" Else 'キーワードが見つかったら ad = Fnd.Address 'アドレスを控える Do '繰り返し For Each c In .Range("E" & Fnd.Row).Resize(, 22) If c.Value = Keyword2 Then 'Keyword2検索 i = i + 1 c.EntireRow.Copy ws(2).Rows(i) 'Keyword2が見つかったセルを含む行全体をコピペ Exit For End If Next c Set Fnd = .Range("C:C").FindNext(Fnd) '検索続行 Loop While Not Fnd Is Nothing And Fnd.Address <> ad End If End With End Sub
お礼
たびたび、どうもすみませんです。>Д< 本業の合間にやっておいてと言われたもので、VBAは本当にさわり程度しか・・・・。 今、仕事の合間に本を見て理解に励んでいます。 皆さんはやはり専門に勉強なさったのですか? それとも独学なのでしょうか。 何か、コツがあったら教えていただきたいです。