- ベストアンサー
VBAの比較削除マクロ
- 質問文の中からVBAを使用してSheet1とSheet2のB列を参照し、同じ値が存在する場合はSheet1の行を削除するマクロを作成したいです。
- また、Sheet1とSheet2のB列を参照して同じ値が存在する場合はSheet1の行をSheet3にコピーするマクロも作成したいです。
- 具体的なマクロの記述方法について教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! コードを詳しく見させてもらっていませんが・・・ >Sheet1とSheet2のB列を参照して同じ値が存在する場合は、Sheet1の行を削除するマクロを作成したい という要望だけの方法の一例です。 両Sheetとも1行目はタイトル行で2行目以降にデータがあるとします。 Sub test() Dim i As Long Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("sheet1") '←Sheet名は適宜変更してください。 Set ws2 = Worksheets("sheet2") '←こちらのSheet名も適宜変更 For i = ws1.Cells(Rows.Count, 2).End(xlUp).Row To 2 Step -1 If WorksheetFunction.CountIf(ws2.Range("B:B"), ws1.Cells(i, 2)) Then ws1.Rows(i).Delete (xlUp) End If Next i End Sub 上記のコードを標準モジュールにコピー&ペーストしてマクロを実行してみてください。 参考になれば良いのですが 外していたらごめんなさいね。m(__)m
その他の回答 (2)
- merlionXX
- ベストアンサー率48% (1930/4007)
一例です。 Sub test01() Dim myW, myW2, myV Dim buf As Boolean Dim i As Long, j As Long, n As Long, m As Long, x As Long, y As Long, z As Long With Sheets("Sheet1") myW = .Range("A1", .UsedRange.Cells(.UsedRange.Count)).Value End With With Sheets("Sheet2") myV = .Range("B1", .Cells(Rows.Count, "B").End(xlUp)).Value End With x = UBound(myW, 1) y = UBound(myW, 2) z = UBound(myV, 1) ReDim myW2(1 To x, 1 To y) For i = 1 To x For n = 1 To z If myW(i, 2) = myV(n, 1) Then buf = True Exit For End If Next n If buf Then buf = False Else j = j + 1 For m = 1 To y myW2(j, m) = myW(i, m) Next m End If Next i With Sheets("Sheet1") .Cells.ClearContents .Range("A1").Resize(x, y).Value = myW2 End With End Sub
お礼
回答ありがとうございました。 上記のコードを標準モジュールにコピー&ペーストしてマクロを実行することができました。
- koara1982
- ベストアンサー率15% (2/13)
すいません。ブランクが長いのでコードは分かりません。 sheet1のB列の最終行から検索をかけて削除する必要があります。そのためにEnd(xlUp)で最終行を取得します。その次に変数をもうけ、for 変数 = 最終行 to 1 step -1 で下からどんどん検索します。 forの中にif をもうけて if worksheets(変数1).cells(,B) = worksheets(2).cells(変数,B) then worksheets(1).rows(変数).delete end if をすればよいのではないでしょうか? ってそんな簡単にはいかないですかね?
お礼
回答ありがとうございました
お礼
回答ありがとうございました。 上記のコードを標準モジュールにコピー&ペーストしてマクロを実行することができました。