Comparar valores de columna A, si iguales, concatenar valores de B en C, si no copiar B en C sin con

Tengo un Excel, en la columna A hay valores repetidos desde 2 veces hasta N, y en la columna B hay valores diferentes para cada celda de A, independientemente de sus valores. Lo que tengo que hacer es mientras los valores de A sean iguales, hay que concatenar en una sola celda de la columna C todos los valores asignados en la columna B a la misma coincidencia en la columna A.

Si no son iguales entonces solo copiaremos en la columna C el valor de la columna B.

1 respuesta

Respuesta
1

Esta es la solución: siguiendo tu ejemplo, los valores repetidos están en la columna A y los otros datos en la columna B. En mi caso los datos empiezan desde A2 hacia abajo puesto que A1 es un rótulo. Te hará la concatenación en la columna C empezando desde C1 hacia abajo

(Recuerda finalizar y puntuar mi trabajo)

Sub concatenar()
fila = 1
Range("a2").Select
Do While ActiveCell.Value <> ""
valor = ActiveCell.Value
contarsi = Application.WorksheetFunction.CountIf(Columns(1), valor)
If contarsi > 1 Then
For m = 1 To contarsi
dato = dato & ActiveCell.Offset(0, 1).Value
ActiveCell.Offset(1, 0).Select
Next
Cells(fila, 3).Value = dato
dato = ""
fila = fila + 1
Else
Cells(fila, 3).Value = ActiveCell.Offset(0, 1).Value
dato = ""
fila = fila + 1
ActiveCell.Offset(1, 0).Select
End If
Loop
End Sub

Hola, muchas gracias por la ayuda la macro funcionó genial, pero se me olvidó decir que a la hora de concatenar, habría que separar un valor de otro con una coma. Y para dejar más claras las comprobaciones, que cada concatenación apareciese en la primera línea en que cambia el valor en la columna A. Claro que sobre estas cosas estas cosas... yo no dije nada.

a continuación os dejo como ha quedado la macro con estas modificaciones:

Sub concatenar()
Fila = 2
Range("a2").Select
    Do While ActiveCell.Value <> ""
       valor = ActiveCell.Value
       contarsi = Application.WorksheetFunction.CountIf(Columns(1), valor)
         If contarsi > 1 Then
            FilaActual = ActiveCell.Row
            ColumnaActual = ActiveCell.Column
            For m = 1 To
              contarsi dato = dato & ActiveCell.Offset(0, 1).Value & "," ActiveCell.Offset(1, 0).Select
            Next
             Cells(FilaActual, ColumnaActual + 2).Value = dato
             dato = ""
             Fila = Fila + 1
        Else
             Cells(FilaActual, ColumnaActual + 2).Value = ActiveCell.Offset(0, 1).Value
             dato = ""
             Fila = Fila + 1
             ActiveCell.Offset(1, 0).Select
        End If
Loop
End Sub

Agradeceros la ayuda que prestáis hacéis un gran trabajo y nos ayudáis muchísimo.

Muchas gracias,

Mayte

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas