DNI en formato de ***dígitodígitodígito**

En un escrito en el que hay dos columnas, Columna A; APELLIDOS, NOMBRE, y Columna B; DNI, o NIE, o PASAPORTE... Les solicito ayuda para la columna "resultado" con arreglo a la Agencia Española de Protección de Datos:

Columna A                                          Columna B                   Resultado 

APELLIDOS, NOMBRE                       DNI

 LÓPEZ PÉREZ, MANOLO                 12345678X                  ***4567**                    (DNI)

RUIZ PÁEZ, LUIS                                 L1234567X                 ****4567*                    (NIE)

SANZ MATA, INÉS                             ABC123456                *****3456     (PASAPORTE)

Por favor, si pueden ayudarme y darme una fórmula para cada caso de los propuestos por la AEPD, para DNI, NIE.

2 respuestas

Respuesta
1

Si para cada uno de los casos siempre es la misma estructura:

Sr. Ignacio, muchas gracias por su respuesta. Le solicitaría a vd. más información, porque no entiendo bien su fórmula. Si el DNI está escribo en la columna B, no entiendo porque el resultado de la columna E figuren las celdas A6, A7, A8... si es vd. tan amable de ayudarme un poco más. GRACIAS. 

Gracias. Le solicito un poco más de información. Gracias. 

Tienes razón, solo cambia la A por B

Respuesta
1

Si tienes una base de datos grande usar fórmulas te hará muy lento el excel mira este es el resultado de la macro, en la columna DE coloca los números según la columna F, la macro funciona así, le cada celda de la columna DE y si la inicial es numero y el final es letra considerara que es DNI y cambiara los caracte por astericos con la configuración de la columna F, si la inicla es letra y el final es letra pondrá asteriscos como si fuera un NIE y si la inicial es una letra y el final es un numero pondrá astericos en configuración pasaporte por cierto aquí funciona para ambos casos en letras mayúsculas y minúsculas

y esta es la amcro solo cópiala y ponla en un modulo estándar

Sub poner_astericos()
Set datos = Range("a2").CurrentRegion
With datos
    filas = .Rows.Count: col = .Columns.Count
    Set datos = .Rows(2).Resize(filas - 1)
    For i = 1 To filas - 1
        dni = .Cells(i, 3)
        largo = Len(dni)
        der = Left(dni, 1)
        izq = Right(dni, 1)
        codigo = Asc(der)
        codigo2 = Asc(izq)
        valida = codigo >= 48 And codigo <= 57
        valida2 = codigo >= 65 And codigo <= 90
        valida3 = codigo >= 97 And codigo <= 122
        valida4 = codigo2 >= 48 And codigo2 <= 57
        valida5 = codigo2 >= 65 And codigo2 <= 90
        valida6 = codigo2 >= 97 And codigo2 <= 122
        If valida And (valida5 = True Or valida6 = True) Then
            cadena = WorksheetFunction.Replace(dni, 1, 3, "***")
            cadena2 = WorksheetFunction.Replace(cadena, largo - 1, 2, "**")
            .Cells(i, 4) = cadena2
        End If
        If (valida2 Or valida3) And (valida5 Or valida6) Then
            cadena = WorksheetFunction.Replace(dni, 1, 4, "****")
            cadena2 = WorksheetFunction.Replace(cadena, largo, 1, "*")
            .Cells(i, 4) = cadena2
        End If
        If (valida2 Or valida3) And valida4 Then
            cadena = WorksheetFunction.Replace(dni, 1, 5, "*****")
            .Cells(i, 4) = cadena
        End If
    Next i
End With
Set datos = Nothing
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas