Macro para numerar celdas con nombres iguales

Quisiera saber si es posible, mediante una macro, cambiar nombres de las celdas en la columna B de un excel que tiene nombres de personas.

El asunto es que lo uso para cambiar nombres de archivos (con otra macro), pero a veces hay nombres repetidos y los archivos no pueden tener el mismo nombre, entonces algo que viene de la siguiente manera:

Lo cambio manualmente uno por uno (y son muchoooo) para que quede asi:

Y la unica forma que esta al alcance de mis conocimientos es darle formato condicional para que me resalte los repetidos e ir cambiando uno por uno hasta que no haya mas con colores.

Desde ya muchas gracias! Y Saludos!

2 Respuestas

Respuesta
3

Por macro te quedaría así

y esta es la macro

Sub numerar_duplicados()
Set datos = Range("b1").CurrentRegion
With datos
    r = .Rows.Count: c = .Columns.Count
    Set nombres = .Columns(c + 2).Resize(r, 2)
    With nombres
        datos.Copy: nombres.Columns(1).PasteSpecial
        .RemoveDuplicates Columns:=1
        r1 = .CurrentRegion.Rows.Count
        For i = 1 To r1
            nombre = .Cells(i, 1)
            cuenta = WorksheetFunction.CountIf(datos.Columns(1), nombre)
            If cuenta > 1 Then
                fila = WorksheetFunction.Match(nombre, datos.Columns(1), 0)
                Set rep = datos.Rows(fila).Resize(cuenta)
                For j = 1 To cuenta
                    With rep
                        .Cells(j, 1) = .Cells(j, 1) & " " & j
                    End With
                Next j
            End If
        Next i
        nombres.ClearContents
    End With
    Set datos = Nothing: Set rep = Nothing: Set nombres = Nothing
End With
End Sub

Gracias! la macro funciona.

El único problema es que tengo otra información en las columnas adyacentes a la B en esa planilla y después de ejecutar la macro me queda todo copiado a un costado :/

La macro esta hecha a como pusiste la información, ponla información como es y como quieres que quede para modificar la macro

Así están los datos (lo del rango D8:E15 es irrelevante donde está).

La macro que actualmente uso toma datos de las columnas A y B

SendKeys ActiveSheet.Range("A" & x).Value, True
SendKeys ActiveSheet.Range("B" & x).Value, True

Y tambien de las celdas E3 y E4.

For x = Range("E3").Value To Range("E4").Value

Esta macro modificada analiza todos los datos contenidos en la columna B, a diferencia de la anterior esta hace todo en la memoria sin afectar en nada la información que tienes, de hecho el único cambio que veras sera en la columna B.

Sub NUMERAR_REPETIDOS()
Dim UNICOS As New Collection
Set DATOS = Range("A1").CurrentRegion
With DATOS
    R = .Rows.Count
    For I = 2 To R
        APYNOM = .Cells(I, 2)
        On Error Resume Next
        UNICOS.Add APYNOM, CStr(APYNOM)
        On Error GoTo 0
    Next I
    For J = 1 To UNICOS.Count
        APYNOM = UNICOS.Item(J)
        CUENTA = WorksheetFunction.CountIf(.Columns(2), APYNOM)
        If CUENTA < 2 Then GoTo SIG
        FILA = WorksheetFunction.Match(APYNOM, .Columns(2), 0)
        Set NOMBRE = .Rows(FILA).Resize(CUENTA)
        For K = 1 To CUENTA
             NOMBRE.Cells(K, 2) = NOMBRE.Cells(K, 2) & " " & K
        Next K
SIG:
    Next J
End With
set nombre=nothing: set datos=nothing
End Sub
Respuesta
2

Supongamos que esos nombres comienzan en A2

Solución propuesta

1) Crear una nueva columna (puedes ocultarla o ponerla al final) con esta condición:

=SI(O(A2=A1;A2=A3);C1+1;0)   yo la he colocado en la columna C.

Con ello te colocará un CERO si el nombre no está repetid; un UNO si está repetido y es la primera vez, un 2, un 3 ... etc.. si son sucesivas repeticiones del anterior.

2) Crear otra nueva columna donde colocarás los nombres con ese formato (nombre + número). Preguntando por la columna C donde has guardado las numeraciones antes.

=SI(C2=0;$C2;A2&C2)

Solución adicional.

Aplicando un FORMATO CONDICIONAL en tu hoja excel (inicio --> Formato Condicional) puedes destacar con colores las filas que estén repetidas y así verlas de golpe.

Antes se me olvidó comentar que la nueva columna donde queda el resultado de la numeración, luego deberás quitarle las fórmulas. Para eso, lo que tienes que hacer es copiar la columna entera a otra columna, pero con la opción "pegar Valores" y así solo te copia el texto y no las fórmulas.

Rectifico.

Habría que crear 3 columnas auxiliares, por ejemplo S, T, U, así:

  • Columna S:  Pongo un contador:  cero a las filas originales y 1 a las repetidas

                 =SI(O(B2=B3;B2=B1);1;0)

  • Columna T (NUMERACIÓN).  Numero por orden (1,2,3...) las filas repetidas.  Arrastro la fórmula desde T2:

                    =SI(B2<>B1;1;T1+1)       

  • Columna U, simplemente concateno, con esta fórmula:

                    =SI(O(T2>1;T3>1);CONCATENAR(B2;T2);B2)

Lo que hace es : En nombres repetidos, le une su numeración. En los no repetidos los deja como está.

Por último, copiar la columna U a otra columna, pero solo VALORES, sin fórmulas:

Quedaría así:

Te envío por email el excel que me has enviado con las correcciones.

Saludos. DOPPLER.

¡Gracias! Pero estoy buscando hacerlo por macro. Porque la información que tengo que cambiar no es ni mucha como para tomarme el tiempo de hacer fórmulas con texto, ni poca como para hacerlo a mano. ja ja. Saludos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas