- ベストアンサー
VBAで列の検索抽出について
EXCEL2003のマクロについて質問です。InStr構文でうまくできませんでした。 SHEET1のA列(A1~A9000)に文章データが9000あり、SHEET2A列(A1~A500)に単語が500ある時、SHEET2のA列にある500の単語の中で1つでもSHEET1のA列の文章の中に含まれているセルがある場合を別シート(SHEET3)に抽出したい場合はどのようなマクロを組めばいいのでしょうか? 宜しくおねがいします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! 一例です。 Sheet1・Sheet2ともデータは1行目からあるとします。 Sub test() Dim i As Long, k As Long, M As Long Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") Set ws3 = Worksheets("Sheet3") For k = 1 To ws2.Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To ws1.Cells(Rows.Count, 1).End(xlUp).Row If InStr(ws1.Cells(i, 1), ws2.Cells(k, 1)) And _ WorksheetFunction.CountIf(ws3.Columns(1), ws2.Cells(k, 1)) = 0 Then M = M + 1 ws3.Cells(M, 1) = ws2.Cells(k, 1) End If Next i Next k End Sub こんな感じではどうでしょうか? ※ Sheet1・Sheet2の全データでLoopさせていますので、 結構時間を要すると思います。m(_ _)m
その他の回答 (1)
- crowswork
- ベストアンサー率63% (7/11)
InStr構文は、文字列を比較し文字列の位置を返すだけです。 まずは、1セル分だけを考えて下さい。 SHHET1_セル:A1に対して、SHEET2_セル:A1の単語をInStr構文で比較します。 文字列の位置が返ってくれば同じ文字列があるということですので、 同じ文字列がある場合は、SHEET3のセル:A1に貼り付ける。 文字列がない場合は処理を抜ける。 上記1セル分の処理を SHHET1_セル:A1に対して、SHEET2_A列のセルを1セルづつループ処理させる。 へ拡張する。 上記ループ処理を SHEET_A列のセルを1セルづつループ処理させる。 へさらに拡張する。 このようなマクロを順を追って作成していけば、最終的にご希望のマクロにたどりつくのではないでしょうか。
お礼
ご連絡遅くなり申し訳ありません。 ご回答ありがとうございました。
お礼
ご連絡遅くなり申し訳ありません。 ご回答ありがとうございました。