Validar NIF, CIF, NIE e IBAN en Excel

Un NIF con la letra cambiada devuelve una factura, rechaza un registro del modelo 347 o deja un proveedor sin pagar. Un IBAN con un dígito mal hace rebotar una remesa entera. Los dos llevan un control matemático que permite detectar casi todos los errores de tecleo sin consultar nada fuera. Aquí tienes dos funciones para Excel que lo comprueban y se usan como cualquier fórmula: =NIFValido(A2) y =IBANValido(B2).

Cuéntanos tu proceso

En resumen: Excel no trae ninguna función para validar NIF o IBAN, pero se pueden añadir con VBA. El DNI y el NIE se comprueban con la letra (el número entre 23); el CIF, con su dígito o letra de control; el IBAN, con el cálculo módulo 97 que exige la norma ISO 13616. Una función que da VERDADERO solo dice que el código es coherente, no que pertenezca a quien dice.

Cómo funciona cada control

DocumentoFormatoCómo se comprueba
DNI8 números + letraEl número se divide entre 23 y el resto indica la letra en la serie TRWAGMYFPDXBNJZSQVHLCKE
NIEX, Y o Z + 7 números + letraLa X, Y o Z se sustituye por 0, 1 o 2 y se calcula como un DNI
CIF (NIF de sociedades)Letra + 7 números + controlSuma de cifras con un peso alterno; el control es un número o una letra según el tipo de entidad
IBANPaís + 2 dígitos + cuenta (24 caracteres en España)Se pasan los cuatro primeros caracteres al final, las letras a números (A = 10…) y el resto entre 97 debe ser 1

Las funciones, listas para pegar

Abre el editor de VBA con Alt + F11, inserta un módulo y pega el código. Desde ese momento puedes escribir =NIFValido(A2) en cualquier celda del libro. Guarda el archivo como .xlsm para que no se pierdan.

Option Explicit

' =NIFValido(A2) -> VERDADERO o FALSO. Admite DNI, NIE y CIF.
Public Function NIFValido(ByVal nif As String) As Boolean
    Const LETRAS As String = "TRWAGMYFPDXBNJZSQVHLCKE"
    Dim n As String, num As String, i As Long, suma As Long, d As Long, ctrl As String

    n = UCase$(Replace(Replace(Replace(Trim$(nif), "-", ""), " ", ""), ".", ""))
    If Len(n) <> 9 Then Exit Function

    Select Case Left$(n, 1)
    Case "0" To "9", "X", "Y", "Z"                      ' DNI o NIE
        num = Left$(n, 8)
        Select Case Left$(num, 1)
            Case "X": num = "0" & Mid$(num, 2)
            Case "Y": num = "1" & Mid$(num, 2)
            Case "Z": num = "2" & Mid$(num, 2)
        End Select
        If Not num Like "########" Then Exit Function
        NIFValido = (Mid$(LETRAS, (CLng(num) Mod 23) + 1, 1) = Right$(n, 1))

    Case "A" To "H", "J", "N", "P" To "S", "U" To "W"   ' CIF
        num = Mid$(n, 2, 7)
        If Not num Like "#######" Then Exit Function
        For i = 1 To 7
            d = CLng(Mid$(num, i, 1))
            If i Mod 2 = 1 Then d = d * 2: d = d \ 10 + d Mod 10
            suma = suma + d
        Next i
        d = (10 - suma Mod 10) Mod 10
        ctrl = Right$(n, 1)
        Select Case Left$(n, 1)
            Case "N", "P", "Q", "R", "S", "W"           ' control con letra
                NIFValido = (ctrl = Mid$("JABCDEFGHI", d + 1, 1))
            Case "A", "B", "E", "H"                     ' control con número
                NIFValido = (ctrl = CStr(d))
            Case Else                                   ' admite los dos
                NIFValido = (ctrl = CStr(d) Or ctrl = Mid$("JABCDEFGHI", d + 1, 1))
        End Select
    End Select
End Function

' =IBANValido(B2) -> VERDADERO o FALSO. Cualquier país; en España exige 24 caracteres.
Public Function IBANValido(ByVal iban As String) As Boolean
    Dim s As String, i As Long, c As String, resto As Long

    s = UCase$(Replace(Replace(Trim$(iban), " ", ""), "-", ""))
    If Len(s) < 15 Or Len(s) > 34 Then Exit Function
    If Left$(s, 2) = "ES" And Len(s) <> 24 Then Exit Function
    If Not s Like "[A-Z][A-Z]##*" Then Exit Function

    s = Mid$(s, 5) & Left$(s, 4)                         ' país y control, al final
    For i = 1 To Len(s)
        c = Mid$(s, i, 1)
        Select Case c
            Case "0" To "9": resto = (resto * 10 + CLng(c)) Mod 97
            Case "A" To "Z": resto = (resto * 100 + Asc(c) - 55) Mod 97
            Case Else: Exit Function
        End Select
    Next i
    IBANValido = (resto = 1)
End Function

Dos detalles del código que evitan fallos tontos. Primero, las dos funciones quitan espacios, guiones y puntos antes de comprobar, porque así es como llegan los datos de verdad («B-12.345.674», «ES91 2100 0418…»). Segundo, el IBAN se calcula cifra a cifra arrastrando el resto: el número completo tiene más de 20 dígitos y no cabe en ningún tipo numérico de Excel sin perder precisión.

Para probarlas: 12345678Z y B12345674 dan VERDADERO; 12345678A, FALSO. El IBAN de ejemplo ES91 2100 0418 4502 0005 1332, que circula en la documentación bancaria, da VERDADERO.

Lo que estas funciones no pueden saber

  • Si el NIF existe y es de quien dice. «Correcto» significa que la letra cuadra con el número, no que esté dado de alta. Para confirmar que un NIF y un nombre van juntos está el servicio de comprobación de NIF de la Agencia Tributaria, con certificado digital.
  • Si la cuenta está abierta y es del titular. El IBAN puede ser perfecto y la cuenta estar cerrada o ser de otra persona. Eso solo lo confirma el banco.
  • Los NIF especiales que empiezan por K, L o M (menores sin DNI, no residentes y extranjeros sin NIE) tienen sus propias reglas y estas funciones los dan como no válidos. Si los manejas, hay que añadirlos.

Del control a un maestro limpio

Revisión de un maestro de proveedores entero, grabada en Excel. La macro recorre cada NIF, CIF e IBAN y dice cuál falla y por qué: letra incorrecta o dígito de control erróneo.

Datos inventados, macro real.

Saber que un NIF está mal es el primer paso. Lo que suele hacer falta en una empresa es el siguiente: explicar el motivo (le falta la letra, sobra un cero, la letra no corresponde) para que se pueda corregir rápido, detectar duplicados (el mismo proveedor dado de alta dos veces con el NIF escrito de forma distinta) y evitar que entren datos malos, validando en el momento de escribirlos con una lista o un formulario.

Ese trabajo de limpieza es especialmente rentable antes de procesos donde un error cuesta dinero: la remesa de pagos, el modelo 347 o la migración a un programa nuevo. En Fusionik lo hacemos sobre tu maestro real y te dejamos la validación integrada para que no se vuelva a ensuciar.

Cada semana enseñamos una macro nueva funcionando en Instagram (@fusionik_). También en TikTok y LinkedIn.

Actualizado el 31 de octubre de 2026.

FAQ

Preguntas frecuentes

No. Excel no incluye ninguna función para NIF ni IBAN. Hay que añadirla con VBA, como las de esta página, o con fórmulas muy largas que son difíciles de mantener.

No. Excel para la web no ejecuta VBA. Las funciones funcionan en Excel de escritorio para Windows y, con alguna limitación, en Mac. Para Excel Online la alternativa son Office Scripts o una función LAMBDA.

El dígito de control solo garantiza que el NIF es coherente. Para saber si está dado de alta y si corresponde a un nombre, la Agencia Tributaria tiene un servicio de comprobación de NIF en su sede electrónica, que requiere certificado digital.

Sí. La función se arrastra a toda la columna como cualquier fórmula, y una macro puede revisar el maestro entero, marcar los errores y explicar el motivo en segundos aunque haya decenas de miles de filas.

¿Tienes un maestro de clientes o proveedores por revisar?

Cuéntanos qué datos guardas y de dónde salen. Podemos validar, limpiar y unificar el maestro entero, y dejarte la comprobación integrada para que no vuelva a ensuciarse.

¿Prefieres escribirnos directamente? info@fusionik.com