Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


63 / 13006 ツリー ←次へ | 前へ→

【78872】2シートの一致照合と計算、一致項目の削除のマクロが組みたいです。 まるばつ 17/2/17(金) 18:36 質問[未読]

【78873】Re:2シートの一致照合と計算、一致項目の... β 17/2/17(金) 19:31 発言[未読]

【78873】Re:2シートの一致照合と計算、一致項目...
発言  β  - 17/2/17(金) 19:31 -

引用なし
パスワード
   ▼まるばつ さん:

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

63 / 13006 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free