|
▼まるばつ さん:
Sheet2 の最終行 456 GHI の C列が 456DEF になっているのは 456GHI の間違いだとして。
効率化を求めれば、もっと複雑なコード記述になりますが、VBAが、あまり得意ではない
ということなので、1行ずつ 2つのシートをシート関数のMATCH で比較して処理しています。
『削除』ということですが、質問内の結果サンプルでは『クリア』ですので
以下のコードでも行削除ではなく、行のクリアにしています。
掲示板上、コードが改行されてみにくいのですが、モジュールにコピペすれば
見やすくなると思います。
Sub Sample()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim sh3 As Worksheet
Dim i As Long
Dim mx As Long
Dim k As String
Dim z As Variant
Application.ScreenUpdating = False
Set sh1 = Sheets("Sheet1")
Set sh2 = Sheets("Sheet2")
Set sh3 = Sheets("Sheet3")
mx = sh1.Range("A" & Rows.Count).End(xlUp).Row 'Sheet1 の最終セルの行番号
For i = mx To 2 Step -1 '最終行から2行目までを繰り返し処理
k = sh1.Cells(i, "C").Value 'その行のC列の値
z = Application.Match(k, sh2.Range("A1").CurrentRegion.Columns("C"), 0) 'その値がSHeet2のC列にあるかどうか
If IsNumeric(z) Then 'あった
sh1.Cells(i, "D").Value = sh1.Cells(i, "D").Value - sh2.Cells(z, "D").Value 'D列のセル Sheet1-Sheet2
sh1.Cells(i, "E").Value = sh1.Cells(i, "E").Value - sh2.Cells(z, "E").Value 'E列のセル Sheet1-Sheet2
sh1.Rows(i).Copy sh3.Range("A" & Rows.Count).End(xlUp).Offset(1) 'この時点のSheet3の最終行の次の行に追加
sh1.Rows(i).ClearContents 'Sheet1の該当行をクリア
sh2.Rows(z).ClearContents 'SHeet2の該当行をクリア
End If
Next
End Sub
|
|