2017-08-03 16 views
-5

Ich möchte entsprechende Column C Werte in Column D einfügen, wenn Spalte A und Spalte B übereinstimmen.Vergleichen Sie Spalten mit VBA-Makro

Zum Beispiel:

Spalte A2 gleich Spalte B2, das auf Spalte D2

OR

Column A7 gleich Spalte B3 nun Spalte C2 Wert wird geschrieben Spalte C3 Wert dann geschrieben wird, auf Spalte D3

Für Details sehen Sie bitte den Screenshot, damit Sie Ahnung haben, was ich versuche zu tun.

[Bitte klicken Sie auf den Screenshot zu sehen] [1]

Der Code, den ich unten bin versucht, aber es funktioniert nicht richtig, es ist nur geben nur eine Zelle Wert:

Private Sub ForComparing_Click() 

Dim ws As Worksheet 
Dim cel As Range 
Dim lastRowA As Long, lastRowB As Long, lastRowC As Long 

Set ws = ThisWorkbook.Sheets("Sheet1") 

With ws 
    lastRowA = .Cells(.Rows.Count, "A").End(xlUp).Row 'last row of column A 
    lastRowB = .Cells(.Rows.Count, "B").End(xlUp).Row 'last row of column B 
    lastRowC = .Cells(.Rows.Count, "C").End(xlUp).Row 'last row of column C 
    For Each cel In .Range("A2:A" & lastRowA) 'loop through column A 
     'check if cell in column A exists in column B 
     If WorksheetFunction.CountIf(.Range("B2:B" & lastRowB), cel) = 0 Then 
      .Range("D" & cel.Row) = "No Match" 
     Else 
      .Range("D" & cel.Row) = .Range("C" & cel.Row) 
     End If 
    Next 
End With 

End Sub 

Edited 1:

Bitte beachten Sie die Ausgabe dieses Codes unter: Click here to see screen shot

Column A3 soll mit Column B5 vergleichen, da der Wert D in diesem Fall gleich ist, und dann soll es Column C5 Wert Column D3

Außerdem drucken, sollte es Wert in Column D für jeden Wert von Column A geben, aber es nach dem ersten 4 Werten stoppen.

Danke für Ihre Zeit. 2

Edited:

Please see the screen shot

Was Sie gerade bearbeitet haben, ist vollkommen richtig, aber ich möchte dies für jeden Column A Wert tun.

Ich möchte jeden Column A Wert mit vergleichen und dann Column C Wert wird auf Column D kopiert.

+2

Zeigen Sie uns den Code, den Sie bereits ausprobiert haben, und erklären Sie, wo das Problem liegt. Denken Sie daran, Sie können ein Makro aufzeichnen, um loszulegen. – braX

+0

Lies über 'Match' Funktion –

Antwort

3

Versuchen Sie, diese

Option Explicit 

Sub Demo() 
    Dim ws As Worksheet 
    Dim cel As Range 
    Dim lastRowA As Long, lastRowB As Long 

    Set ws = ThisWorkbook.Sheets("Sheet2") 

    With ws 
     lastRowA = .Cells(.Rows.Count, "A").End(xlUp).Row 'last row of column A 
     lastRowB = .Cells(.Rows.Count, "B").End(xlUp).Row 'last row of column B 
     For Each cel In .Range("A1:A" & lastRowA) 'loop through column A 
      'check if cell in column A exists in column B 
      If WorksheetFunction.CountIf(.Range("B1:B" & lastRowB), cel) = 0 Then 
       .Range("C" & cel.Row) = "No Match" 
      Else 
       .Range("C" & cel.Row) = cel & " has match in column B" 
      End If 
     Next 
    End With 
End Sub 

EDIT:

Option Explicit 

Sub Demo() 
    Dim ws As Worksheet 
    Dim cel As Range, rngC As Range, rngB As Range 
    Dim lastRowA As Long, lastRowB As Long 

    Set ws = ThisWorkbook.Sheets("Sheet1") 

    With ws 
     lastRowA = .Cells(.Rows.Count, "A").End(xlUp).Row 'last row of column A 
     lastRowB = .Cells(.Rows.Count, "B").End(xlUp).Row 'last row of column B 
     For Each cel In .Range("A2:A" & lastRowB) 'loop through column B 
      'check if cell in column A exists in column B 
      If WorksheetFunction.CountIf(.Range("A2:A" & lastRowB), cel) = 0 Then 
       .Range("D" & cel.Row) = "No Match" 
      Else 
       .Range("D" & cel.Row) = Application.WorksheetFunction.Index(.Range("C2:C" & lastRowB), Application.WorksheetFunction.Match(cel, .Range("B2:B" & lastRowB), 0), 1) 
      End If 
     Next 
    End With 
End Sub 

Siehe Bild als Referenz.

enter image description here

Allerdings bin ich immer noch sehr zweifelhaft, was Sie erreichen wollen. Sie stimmen nur die ersten 4 Werte von Spalte A ab, wie Sie in Frage ", aber es stoppen nach den ersten 4 Werten". Nach meiner Lösung wird es jedoch 4 Zeilen von Column A bis übereinstimmen und wenn es übereinstimmt, werden die entsprechenden Column C Werte in Column D angezeigt. Wenn keine Übereinstimmung vorliegt, wird Column DNo Match angezeigt.

+0

Hallo Mrig, Ich habe die Frage bearbeitet, wie Sie empfohlen haben, können Sie mich bitte führen, dass, was Fehler ich im obigen Code begehe. Vielen Dank für Ihre Zeit. –

+0

@AmmadAhmed - anstelle von '.Range (" C "& cel.Row) = cel &" hat Übereinstimmung in Spalte B "" probiere ".Range (" D "& cel.Row) = .Range (" D "& cel.Row) ' – Mrig

+0

@AmmadAhmed - Ich bin nicht vor meinem System, so dass es nicht getestet wird. – Mrig

0
Sub compare() 
Dim i As Integer 
i = 1 

Do While Cells(i, "A").Value <> "" 
    If Cells(i, "A").Value <> Cells(i, "B").Value Then 
     Cells(i, "C").Value = "No Match" 
    Else 
     Cells(i, "C").Value = "Match" 
    End If 


    i = i + 1 
Loop 

End Sub 

Deklarieren einen Zähler (i) und legen dann eine Schleife durch die Schleife Spalte A. iterieren gehen halten, bis eine Zelle in der Spalte A gefunden wird, der leer ist.

Innerhalb der Schleife, für jede Zeile, vergleichen Sie die 2 jeweiligen Zellen und ändern Sie den Wert der Zelle in Spalte C. Schließlich fügen Sie 1 zu i bei jeder Iteration der Schleife hinzu, so dass es jede Zeile durchläuft.

Ein einfacher Ansatz ist ohne VBA die folgenden Formel:

=IF(A1=B1,"Match", "No Match")

+0

' i' muss 'Long' nicht' Integer' sein. Excel hat mehr Zeilen als Integer verarbeiten kann. Es gibt auch keinen Vorteil, 'Integer' zu verwenden, daher sollten Sie [** immer **' Long' verwenden] (https://stackoverflow.com/a/26409520/3219613), es sei denn, Sie müssen mit alten APIs kommunizieren. –

Verwandte Themen