2016-06-21 8 views
0

Ich kopiere 2 Spalten aus meinem copySheet (Spalte A und B) in pasteSheet (Spalte A und B) und füge sie in die erste leere Zeile mit diesem Code ein;Aktualisieren der Paarreihe basierend auf 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 

Ich mag einen Algorithmus kodieren, um zu überprüfen, ob in jeder Zelle der Spalte A des Kopierblattes gleiche Werte mit dem pasteSheets Wert, dann wird die Zelle von Spalte B in pasteSheet den Wert der Spalte B hat, Kopierblatt.

Zusammenfassend: Ich habe Spalten in jedem Blatt; Spalte A hat die ID-Nummern und Spalte B hat die Namen. Wenn während der Kopier-/Einfügeaktion Spalte A des Copysheets dieselbe ID-Nummer wie in Spalte A von pasteSheet hat, wird das Paar dieser ID (Spalte B von copySheet) in die entsprechende Zelle von pasteSheet in Spalte B geschrieben.

Mit Dies wird die Menge der Produkte (Spalte B) basierend auf ID (Spalte A) aktualisieren. Ich hoffe, meine Frage ist klar und hoffe, Vorschläge zu bekommen.

Antwort

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

Vielen Dank! nur schnelle Frage; v = copySheet.Cells (rw, 1) .Wert; 1 bedeutet hier A richtig? Wenn ich eine Column Called BX hätte, dann wäre das eine Nummer? –

+0

Sie können entweder eine Zahl oder einen Buchstaben als zweites Argument für Cells() verwenden. So beziehen sich Zellen (rw, 1) und Zellen (rw, "A") auf dieselbe Zelle. –

Verwandte Themen