Quiero insertar el correspondiente Column C
valores en Column D
cuando la columna A y el valor de la columna B coinciden.
Por ejemplo:
La columna A2 es igual a la columna B2, ahora el valor de la columna C2 se publica en la columna D2
O
La columna A7 es igual a la columna B3, luego el valor de la columna C3 se publica en la columna D3
Para más detalles, vea la captura de pantalla para que tenga una idea de lo que estoy tratando de hacer.
[Por favor, haga clic para ver la captura de pantalla] [1]
El código que estoy intentando está debajo pero no funciona correctamente, solo da un valor de celda:
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
Editado 1:
Por favor vea la salida de este código a continuación: Haga clic aquí para ver la captura de pantalla
Column A3
debería comparar con Column B5
porque el valor D
es igual en este caso, y luego debería imprimir Column C5
valor para Column D3
Además, debe dar valor en Column D
por cada valor de Column A
pero se detiene después de los primeros 4 valores.
Gracias por tu tiempo.
Editado 2:
Por favor, vea la captura de pantalla
Lo que acaba de editar está perfectamente correcto, pero quiero hacer esto para cada uno Column A
valor.
Quiero comparar cada Column A
valor con Column B
y luego correspondiente Column C
el valor se copia en Column D
.
Respuestas
3 para la respuesta № 1Prueba esto
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
EDITAR:
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
Ver imagen para referencia.
Sin embargo, todavía tengo dudas sobre lo que estás intentando lograr. Estás comparando solo los primeros 4 valores de la columna A, como lo mencionaste en la pregunta "pero se detiene después de los primeros 4 valores". Sin embargo, según mi solución coincidirá con 4 filas de Column A
a Column B
y si coincide entonces correspondiente Column C
los valores se mostrarán en Column D
. Si no hay partido entonces Column D
mostrará No Match
.
0 para la respuesta № 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
Declarar un contador (i
) y luego establezca un bucle para iterar a través de la Columna A. El bucle continuará hasta que se encuentre una celda en la columna A que está en blanco.
Dentro del bucle, para cada fila, compara las 2 celdas respectivas y cambias el valor de la celda en la Columna C. Finalmente agregas 1 a i
en cada iteración del bucle para que pase por cada fila.
Un enfoque más fácil es sin VBA usando la siguiente fórmula:
=IF(A1=B1,"Match", "No Match")