- ベストアンサー
エクセルでのデータのあいまい検索のVBAについて
- VBAかマクロで作成したいと思いますが、あいまい検索ができずに困っております。どなたかご教授お願いできますでしょうか?
- 一つのファイルで2枚のワークシートを使用してデータのあいまい検索をしたいと思っております。画像1の方のワークシートがSheet2になっていてこちらの”I”の列に入力しているデータが画像2になりますが登録商品リストの”G”の列に含まれているかを検索したいと思います。
- 照合するデータにつきましては、その日によって件数が違いますので、Sheet2のI列にあるデータが200件くらいの時もあれば2000件くらいの時もございます。登録商品リストは登録するたびに量が増えていくので照合件数も増えていくことになりますので、どちらも1行指定でできればべすとだとおもっております。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! 画像が小さくて詳細が判らないのですが、 おそらくこんなコトでしょうか? ↓の画像で左側がSheet1で右側がSheet2とします。 Sheet2のI列の頭から5文字がSheet1のG列データの中にあればJ列にアスタリクスを表示! としています。 一例です。 Sub Sample1() Dim i As Long, endRow As Long, str As String, c As Range, wS1 As Worksheet, wS2 As Worksheet Set wS1 = Worksheets("Sheet1") Set wS2 = Worksheets("Sheet2") endRow = wS2.Cells(Rows.Count, "J").End(xlUp).Row Application.ScreenUpdating = False If endRow > 1 Then Range(wS2.Cells(2, "J"), wS2.Cells(endRow, "J")).ClearContents End If For i = 2 To wS2.Cells(Rows.Count, "I").End(xlUp).Row str = Left(wS2.Cells(i, "I"), 5) Set c = wS1.Range("G:G").Find(what:=str, LookIn:=xlValues, lookat:=xlPart) If Not c Is Nothing Then wS2.Cells(i, "J") = "*" End If Next i Application.ScreenUpdating = True End Sub こんな感じではどうでしょうか?m(_ _)m
その他の回答 (1)
- Br6
- ベストアンサー率64% (9/14)
[登録商品リスト] | G | | 11111 | | 22222 | | 31233 | | 44444 | | 57895 | [Sheet2] | I | J | | 123 | * | | 456 | | | 789 | * | 結果はこんな感じになると考えてもよろしいでしょうか? 123は[登録商品リスト]シートの31233に含まれるので「*」がつく。 456は[登録商品リスト]シートにどの行にも含まれないので「*」がつかない。 789は[登録商品リスト]シートに57895に含まれるので「*」がつく。 あと、8ケタくらいまでの一致というのがよくわからないのですが、もう少し詳しく教えていただけますか?
補足
ご教授ありがとうございます。 出来れば、スタートする数字の並びは変更しないでできればと思います。 最低5文字前半から照合できればと思います。 [登録商品リスト]の方の桁数が商品によっては30ケタを超えることがありますが、照合したい商品のデータには5ケタから8ケタしか入力されていない商品もございますのでその商品をひらうためにあいまい検索ができればと考えた次第です。 私の説明の仕方がわかりづらく大変申し訳ございません。 今回作成しようとしているVBAをほかで作成しているVBAに組み込むことができればボタン一つで一連の作業ができるようになるのではないかと思いました。 VBAも少しずつ勉強しているのですが、私の手に余る状態になったもので・・・。 何卒ご教授よろしくお願いいたします。
お礼
お返事が遅くなり申し訳ございませんでした。 ありがとうございます。思う通りのデータが作成で来ました。 これで正確なデータの振い分けができるようになりました。 本当に助かりました。 先に作っていたVBAのものと組み合わせたら完璧な処理が一度でできるようになりました。 今後もご教授の方よろしくお願いいたします。 本当にありがとうございました。