Extraer datos de varias columnas.

Dispongo de una hoja en Excel donde tengo varias columnas con datos de número. Resulta que cada columna corresponde a un mes, es decir, tengo una columna en A1 que contiene un número X, y hasta la fila (por ejemplo) 539, contiene números aleatorios. Ahora bien, cada mes que pasa voy añadiendo una columna a mi hoja (los datos me los envían) a la derecha de la última columna añadida; pero cabe la posibilidad que cada mes se haya eliminado o añadido alguna fila por lo que tendremos columnas con diferente extensión.

Mi pregunta es si hay algún método para que me compare todas las columnas de la hoja y me copie en una nueva columna todos los datos que se repitan en todas las columnas.

Adjunto ejemplo

COLUMNA A                        COLUMNA B                      COLUMNA C                               NUEVA COLUMNA

       123                                        342                                       567                                                 123

       567                                        567                                       123                                                 567

       889                                        123                                       453

Respuesta
1

No tengo tiempo ahora de desarrollarte alguna macro en especial, pero en la sección Ejemplos (para descargar) de mi sitio dejé varios archivos con macros que podrás adaptar para este caso, como este:

Comparar 2 columnas - Realizar alguna acción con repetidos o faltantes.

Si te sirve no olvides valorar la respuesta.

Sdos.

Elsa

http://aplicaexcel.galeon.com/descargas.htm 

3 respuestas más de otros expertos

Respuesta
1

Pon la siguiente macro en un módulo.

La macro considera que tus datos empiezan en la fila 1. Después de la ejecución te pondrá en una nueva columna (una columna después de la última columna con datos), el resultado.

Sub Datos_Repetidos()
'Por Dante Amor
    uc = Cells(1, Columns.Count).End(xlToLeft).Column
    n = 1
    For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
        existe = True
        For j = 2 To uc
            Set b = Columns(j).Find(Cells(i, "A"), lookat:=xlWhole)
            If b Is Nothing Then
                existe = False
                Exit For
            End If
        Next
        If existe Then
            Cells(n, uc + 1).Value = Cells(i, "A")
            n = n + 1
        End If
    Next
    MsgBox "Fin"
End Sub


[No olvides valorar la respuesta.

Buenos días Dante,

He colocado el código en un módulo y he colocado mis datos para que la primera fila NO fueran los encabezados y SI los datos. Aún así la macro no me realiza ninguna acción; he tratado de ajustarla, crear otro libro con menos datos, más simple, y tampoco me ha servido. Te adjunto una foto de como tengo estructurados mis datos y donde me gustaría que apareciera la nueva columna con los datos que se repitan en todas las columnas.

Muchas gracias de antemano

Tienes que quitar la última columna que tienes en tu ejemplo, es decir, elimina la columna que tienes con el encabezado en Rojo.

Vuelve a ejecutar la macro, la macro te pondrá los números en una nueva columna, en esa nueva columna si quieres le pones un encabezado.

Prueba nuevamente

¡Gracias Dante! Me ha ayudado muchísimo. Crearé otra pregunta porque quiero dejar automatizada la carga de datos a una base de datos. 

¡Pregunta cerrada exitosamente!

Respuesta
1

Seguramente tienes maneras más sencillas mediante un For each en las filas

Pero de momento quizás te sirva esta macro ...

Sub ComparColumna()
For fila = 1 To 13
Set C1 = Cells(fila, 1)
Set C2 = Cells(fila, 2)
Set C3 = Cells(fila, 3)
Set C4 = Cells(fila, 4)
Set C5 = Cells(fila, 5)
    If C1.Value = C2.Value And C1.Value = C3.Value And C1.Value = C4.Value Then
    C5.Value = C1.Value
    End If
Next
End Sub

cambia el numero de filas  y las columnas por los tuyos...

Saludos si te sirve la info no olvides valorar la respuesta y cerrar la pregunta

Perdón te lo hice con 4 columnas y que lo pegue en la quinta y tu tienes 3

Sub ComparColumna()
For fila = 1 To 13
Set C1 = Cells(fila, 1)
Set C2 = Cells(fila, 2)
Set C3 = Cells(fila, 3)
Set C4 = Cells(fila, 4)
    If C1.Value = C2.Value And C1.Value = C3.Value Then
    C4.Value = C1.Value
    End If
Next
End Sub

Ahora si jeje

Respuesta
1

Usa esta macro, te pondrá en la hoja 2 el numero repetido y cuantas veces se repite

Sub cliente()
Dim unicos As New Collection
Set NUMEROS = Range("a1").CurrentRegion
With NUMEROS
    celdas = .Cells.Count
    For i = 1 To celdas
        numero = .Cells(i)
        On Error Resume Next
            unicos.Add numero, CStr(numero)
        On Error GoTo 0
    Next i
    celdas = unicos.Count
    Set H2 = Worksheets("hoja2")
    Set tabla = H2.Range("b1").Resize(celdas, 2)
    matriz = tabla
    For i = 1 To celdas
        numero = unicos.Item(i)
        cuenta = WorksheetFunction.CountIf(NUMEROS, numero)
        matriz(i, 1) = numero
        matriz(i, 2) = "repetido " & cuenta & " veces"
    Next i
    H2.Range(tabla.Address) = matriz
End With
Erase matriz
Set tabla = Nothing: Set unicos = Nothing:
Set NUMEROS = Nothing: Set H2 = Nothing
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas