miércoles, 16 de septiembre de 2009

Formato de Celda Tipo DNI



"Todos los días tengo que introducir numerosos datos referentes al DNI de clientes. Me gustaría introducir en la celda una entrada del tipo 33444555b y que automáticamente se transformara en 33.444.555-B"

El problema tiene solución "razonablemente fácil" mediante fórmula en una nueva columna. Pero no podemos resolverlo directamente con Formato de Celda Personalizado porque excel reconoce números o textos pero no ambos a la vez.

Voy a proponer dos planteamientos distintos, a saber:
1. Tenemos dos columnas de entrada de datos. En la primera introducimos el número del DNI y en la segunda la letra
2. Tenemos una sola celda de entrada donde escribimos directamente el número y letra del DNI.

Aclaración: Los DNI utilizados en los siguientes ejemplos son inventados y, por lo tanto, no tienen por qué corresponderse con la letra adecuada. Al final de este post incluyo una fórmula para obtener la letra correspondiente a cada DNI.

Planteamiento 1:

1. Nos situamos en la celda D4 y escribimos la siguiente fórmula:

=TEXTO(B4;"#.##0-")&MAYUSC(C4)

(Consultar la función TEXTO) Es importante destacar que el formato establecido dentro de la función TEXTO entre comillas concluye con un guión al final.
El símbolo & corresponde a la función CONCATENAR.
Finalmente la función MAYUSC convierte un texto a mayúsculas. El resultado será:


Planteamiento 2:

1. Nos situamos en la celda C10 y escribimos la siguiente fórmula:

=TEXTO(IZQUIERDA(B10;LARGO(B10)-1);"#.##0-")&MAYUSC(DERECHA(B10;1))

Evidentemente la cosa se ha complicado un poco. El motivo es que pueden existir DNI con distintos números de dígitos. Empezando por el final:

MAYUSC(DERECHA(B10;1)) Esta parte de la fórmula convierte en MAYÚSCULA el caracter(uno solo) que se encuentre a la DERECHA del dato introducido en B10. Es decir, que extraemos la letra del final y la ponemos en mayúscula.

Ahora nos queda extraer los dígitos que compongan el número del DNI y darles el formato adecuado. Para extraerlos utilizamos la función LARGO anidada en la función IZQUIERDA. La función LARGO nos indica el número de caracteres que hay en una celda. Si por ejemploescribieramos en una celda la fórmula =LARGO ("hola") el resultado sería 4, que son el número de caracteres de dicha palabra. La parte de nuestra fórmula LARGO(B10)-1 nos devolverá el número total de caracteres existentes en B10 menos 1 (este menos 1 es para restarle la letra). Este número restante será el número de dígitos que compongan el DNI. Ya sólo nos queda extraer dicho número con la función IZQUIERDA: IZQUIERDA(B10;LARGO(B10)-1) y trabajo casiresuelto. Digo casi porque nos faltaría darle el formato adecuado, tarea que realizaremos, como ya sabemos, con la función TEXTO: TEXTO(IZQUIERDA(B10;LARGO(B10)-1);"#.##0-")

A estas alturas de la película ya tenemos el número por un lado y la letra por otro. Los unimos con el símbolo & (CONCATENAR) y trabajo resuelto.



Fórmula para el cálculo de la letra del DNI:
Con la siguiente fórmula puede obtener la letra correspondiente a un DNI determinado:

=ELEGIR(RESIDUO(B4;23)+1;"T";"R";"W";"A";"G";"M";"Y";"F";"P";"D";"X";"B";"N";"J"; "Z";"S";"Q";"V";"H";"L";"C";"K";"E";"T")

Haciendo uso de esta fórmula en nuestro primer planteamiento podríamos resolver directamente, sin necesidad de introducir la letra correspondiente en la columna C, de la forma: (pruebe a escribirlo en la celda, por ejemplo, E4)

=TEXTO(B4;"#.##0-")&
ELEGIR(RESIDUO(B4;23)+1;"T";"R";"W";"A";"G";"M";"Y";"F";"P";"D";"X";"B";"N";"J"; "Z";"S";"Q";"V";"H";"L";"C";"K";"E";"T")

8 comentarios:

  1. hola muy buen aporte solo dos consultas
    la primera se podría poner un cero delante de los dni que lo tienen por ejemplo 09010234-L en la ultima formula este cero no aparece
    y la segunda existe alguna manera de calcular el nie
    muchas gracias de antemano.

    ResponderEliminar
  2. Siguiendo con el ejemplo del post, lo único que tienes que cambiar para que aparezcan los ceros es el #.##0- por 00.000.000-
    La fórmula quedaría así:
    =TEXTO(IZQUIERDA(B10;LARGO(B10)-1);"00.000.000-")&MAYUSC(DERECHA(B10;1))
    Para calcular la letra del NIE puedes consultar:
    http://letradni.appspot.com/info.html

    ResponderEliminar
  3. Buenas tardes: primero felicitarle por el Blog, muy útil.
    Podría hacerse igual con el NIE ponerlo en formato. X-1111111-X (NIE ficticio)

    Gracias

    ResponderEliminar
    Respuestas
    1. Siguiendo con el ejemplo de este post, la fórmula sería:
      =IZQUIERDA(B10;1)&TEXTO(EXTRAE(B10;2;LARGO(B10)-2);"-#.##0-")&MAYUSC(DERECHA(B10;1))
      Atención al guión que he añadido delante de #.##0-

      Eliminar
  4. ayuda!!! tengo una hoja de excel con 100 datos de usuario en los cuales hay numeros de DNI que solo tienen 7 digitos como hago parea contar las celdas que tienes 7 digitos y las 8 digitos
    por me urge saber esto alguine que sepa como escribirme a perguevara@outlook.com o a fecebook https://www.facebook.com/willy.guevara.llcj

    ResponderEliminar
    Respuestas
    1. Con la siguiente fórmula matricial (suponiendo que los datos los tienes a partir de la celda A2 y hasta A101) en una celda escribes la siguiente fórmula
      =SUMA(SI(LARGO($A$2:$A$19)=7;1;0)) y acabas pulsando Ctrl+Shift+Enter, lo que deja la fórmula como matricial:
      {=SUMA(SI(LARGO($A$2:$A$19)=7;1;0))}

      Eliminar
    2. Perdón sería hasta A101 y no hasta A19

      Eliminar