ここから本文です

エクセルのマクロ(VBA)について悩んでいます。 Sheet1のA列に文字列が並んでい...

ima********さん

2017/11/1100:21:40

エクセルのマクロ(VBA)について悩んでいます。
Sheet1のA列に文字列が並んでいて、
Sheet2のA列にも文字列が並んでいます。
その状態で、
Sheet2のA列にある文字が、Sheet1のA列にないか曖昧検索をして、
該当する列を

削除する。
というマクロを作りたいのですが、上手くいきません。
下記までは、作ってみたのでご教授いただければと思います。

Sub delete()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim lastRow1 As Long
Dim r As Long

Set ws1 = Sheets("Sheet1")
Set ws2 = Sheets("Sheet2")
lastRow1 = ws1.Range("A" & Rows.Count).End(xlUp).Row
For r1 = lastRow1 To 2 Step -1

If WorksheetFunction.CountIf("*"&ws2.Columns("A")&"*", ws1.Range("A" & r1)) > 0 Then
ws1.Rows(r1).Delete

End Sub

閲覧数:
29
回答数:
1

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

kky********さん

2017/11/1107:29:26

曖昧検索なのでCountIfはうまく使えないです。
1件ずつチェックする一例です。

Sub delete()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim lastRow1 As Long, lastRow2 As Long
Dim r1 As Long, r2 As Long
Application.ScreenUpdating = False
Set ws1 = Sheets("Sheet1")
Set ws2 = Sheets("Sheet2")
lastRow2 = ws2.Range("A" & Rows.Count).End(xlUp).Row
With ws1
lastRow1 = .Range("A" & Rows.Count).End(xlUp).Row
For r1 = lastRow1 To 2 Step -1
For r2 = 1 To lastRow2
If InStr(.Range("A" & r1), ws2.Range("A" & r2)) > 0 Then
.Rows(r1).delete
End If
Next r2
Next r1
End With
Application.ScreenUpdating = True
End Sub

  • 質問者

    ima********さん

    2017/11/1315:51:32

    やはり一件一件チェックした方がいいのですね。
    回答ありがとうございます。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる