2016-06-21 10 views
0

私はcopySheet(列AとB)からこのコードで最初の空の行にpasteSheet(列AとB)まで2列をコピー&ペーストします。idに基づいてペアの行を更新する

Set copySheet = Worksheets("copySheet") 
Set pasteSheet = Worksheets("pasteSheet") 

lRow = copySheet.Cells(copySheet.Rows.Count, 1).End(xlUp).Row 

With copySheet.Range("A1:A" & lRow) 
pasteSheet.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Resize(.Rows.Count, .Columns.Count) = .Value 
End With 

lRow = copySheet.Cells(copySheet.Rows.Count, 1).End(xlUp).Row 

    With copySheet.Range("B1:B" & lRow) 
pasteSheet.Cells(Rows.Count, "B").End(xlUp).Offset(1,0).Resize(.Rows.Count, .Columns.Count) = .Value 
End Sub 

私はコピーシートのA列の任意のセルにpasteSheets値と同じ値を持っているかどうかを確認するためのアルゴリズムをコーディングしたい、そしてpasteSheetで列Bのセルは、の列Bの値を持つことになりますコピーシート。

要約すると、各シートには列が必要です。列AはID番号を持ち、列Bは名前を持っています。コピー/ペーストアクション中に、コピーシートの列AがpasteSheetの列Aと同じID番号を持つ場合、このIDのペア(copySheetの列B)が列BのpasteSheetの対応するセルに上書きされます。

Withこれは、ID(列A)に基づいて製品の量(列B)を更新します。私は私の質問がはっきりしていて、提案を得ることを願っています。

答えて

1
Sub AddOrUpdate() 

    Dim copySheet As Worksheet, pasteSheet As Worksheet 
    Dim lRow As Long, rw As Long, m, v 

    Set copySheet = Worksheets("copySheet") 
    Set pasteSheet = Worksheets("pasteSheet") 

    lRow = copySheet.Cells(copySheet.Rows.Count, 1).End(xlUp).Row 

    For rw = 1 To lRow 

     v = copySheet.Cells(rw, 1).Value 'id value 

     'is there an id match on pastesheet Col A? 
     m = Application.Match(v, pasteSheet.Columns(1), 0) 

     If IsError(m) Then 
      'not matched, so add as new row 
      With pasteSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) 
       .Value = v 
       .Offset(0, 1).Value = copySheet.Cells(rw, 2).Value 
      End With 
     Else 
      'matched, so just update the amount 
      pasteSheet.Cells(m, 2).Value = copySheet.Cells(rw, 2).Value 
     End If 

    Next rw 

End Sub 
+0

ありがとうございます!ただ簡単な質問です。 v = copySheet.Cells(rw、1).Value; 1はここを意味するA?もし私がColumn Called BXを持っていたら、腐食性の数字になるでしょう? –

+0

Cells()の2番目の引数として数字または文字を使用できます。したがって、セル(rw、1)とセル(rw、 "A")は同じセルを指します。 –

関連する問題