/ / Porovnanie stĺpcov pomocou makra VBA - excel, vba, excel-vba

Porovnanie stĺpcov pomocou makier VBA - excel, vba, excel-vba

Chcem vložiť zodpovedajúce Column C hodnoty v Column D keď hodnota stĺpca A a stĺpca B zodpovedá.

Napríklad:

Stĺpec A2 je rovný stĺpcu B2, teraz je stĺpec C2 zaúčtovaný na stĺpci D2

OR

Stĺpec A7 sa rovná stĺpcu B3, potom je stĺpec C3 zaúčtovaný na stĺpci D3

Podrobnosti nájdete na obrazovke, takže máte predstavu, čo sa snažím robiť.

[Kliknite prosím, aby ste videli obrázok] [1]

Kód, ktorý sa snažím, je nižšie, ale nefunguje správne, je to len hodnota jednej bunky:

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

Upravené 1:

Pozrite si prosím výstup tohto kódu nižšie: Kliknite tu pre zobrazenie obrazovky

Column A3 by sa mali porovnať s Column B5 pretože hodnota D je v tomto prípade rovnaká a potom by sa mala vytlačiť Column C5 hodnota do Column D3

Okrem toho by mala dávať hodnotu Column D pre každú hodnotu Column A ale zastaví sa po prvých 4 hodnotách.

Ďakujem za Váš čas.

Upravené 2:

Pozrite si prosím snímku obrazovky

To, čo ste práve upravili, je úplne v poriadku, ale chcem to urobiť pre každého Column A hodnota.

Chcem porovnať každý Column A hodnota s Column B a potom zodpovedajú Column C hodnota sa skopíruje Column D.

odpovede:

3 pre odpoveď č. 1

Skúste toto

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

Pozri obrázok pre referenciu.

tu zadajte popis obrázku

Som však stále veľmi pochybný o tom, čo sa snažíte dosiahnuť. Zodpovedáte iba prvým 4 hodnotám zo stĺpca A, ako ste spomenuli vy.ale zastaví sa po prvých 4 hodnotách"Podľa môjho riešenia to však bude zodpovedať 4 riadkom." Column A na Column B a ak sa zhoduje, potom zodpovedá Column C hodnoty sa zobrazia v Column D, Ak tam nie je žiadny zápas Column D sa zobrazí No Match.


0 pre odpoveď č. 2
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

Vyhlásiť počítadlo (i) a potom nastavte slučku na iteráciu cez stĺpec A. Slučka bude pokračovať, kým sa bunka nenachádza v stĺpci A, ktorá je prázdna.

V rámci slučky pre každý riadok porovnáte 2 príslušné bunky a zmeníte hodnotu bunky v stĺpci C. Nakoniec pridáte 1 ku i na každej iterácii slučky tak, aby prechádzala každým riadkom.

Ľahší prístup je bez VBA pomocou nižšie uvedeného vzorca:

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