Un saludo a todos mis seguidores, hoy veremos veremos el tema Consulta SUNAT Excel, haremos consultas individuales y masivas
Muy bien, en publicaciones anteriores CONSULTA A LA PÁGINA DE SUNAT, mencioné los tipos de consulta que realizan muchos programadores a la web de SUNAT.

En aquel POST mencioné que la mejor forma de realizar consultas a la web de SUNAT es a través de un fallo en su código.
En la aplicación que desarrollaremos hoy, utilizaremos ese fallo, todo lo desarrollaremos desde VBA
Si bien lo ideal sería usar un lenguaje backend como PHP para aligerar el código, en este desarrollo utilizamos sólo VBA
Podría venderles este aplicativo, pero por el gran crecimiento que ha tenido la página, se los traigo completamente gratis.
Realizaremos el desarrollo en 4 sencillos pasos, los cuales son los siguientes:
Paso #1: Diseño de la interfaz con la interactuará el usuario
Realizaremos un diseño simple y amigable para que el usuario pueda tener una buena experiencia de uso
Trabajaremos con tres hojas ‘Individual‘,’Masiva‘ y ‘Config‘, en la hoja Config colocaré los campos a buscar, de ese modo el usuario sólo buscará lo que necesita, esto lo hago con el fin de reducir tiempos de procesamiento
En la búsqueda mostraré los siguientes campos
- RAZON SOCIAL
- CONDICION
- NOMBRE COMERCIAL
- TIPO
- FECHA INSCRIPCION
- ESTADO
- DIRECCION
- SISTEMA EMISION
- ACTIVIDAD EXTERIOR
- SISTEMA CONTABILIDAD
- EMISION ELECTRONICA
- COMPROBANTE ELECTRONICO
- PLE
- INICIO ACTIVIDADES
- ACTIVIDAD ECONOMICA
- ESTABLECIMIENTOS
- REPRESENTANTES LEGALES
- CANTIDAD TRABAJADORES
Paso #2: Programar función de consulta individual RUC SUNAT
Muy bien, lo que vamos a realizar primero es crear una función de tipo Boolean, que devolverá falso si en caso el número de RUC o DNI es incorrecto
Como mencioné líneas arriba, sólo usaré VBA, por lo que si vas a realizar miles de consultas, te sugiero que tengas un buen ordenador
Muy bien empecemos con el desarrollo, por favor muy atento
2.1 ¿Cómo leer el captcha SUNAT?
Si bien en publicaciones anteriores he enseñado a leer el captcha desde VBA (Leer publicación) en este caso no usaremos una extensión, sino utilizaremos una vulnerabilidad de SUNAT
Para tener más claro este concepto, explicaré cómo saltar el captcha de manera manual
Primero, si ingresamos al link https://e-consultaruc.sunat.gob.pe/cl-ti-itmrconsruc/captcha?accion=image podemos visualizar el captcha a saltar
Si hacemos una leve modificación e igualamos a un random, quedaría así https://e-consultaruc.sunat.gob.pe/cl-ti-itmrconsruc/captcha?accion=random

Este número el cual puede ser positivo o negativo, equivale al valor del captcha, si copiamos el número e ingresamos al siguiente link https://e-consultaruc.sunat.gob.pe/cl-ti-itmrconsruc/jcrS00Alias?accion=consPorRuc&nroRuc=20419387658&numRnd=NÚMEROCOPIADO
Podremos visualizar la consulta RUC SUNAT

Después de lo explicado, ya sería sencillo saltar el captcha de SUNAT, pero antes debemos validar o generar el número de RUC, para ello usaremos un código anterior (Leer publicación)
Function ValidarRUC(RUC As String) As String Dim Respuesta As String, Temporal As Integer On Error GoTo sale If Len(RUC) <> 11 Then Respuesta = "Incorrecto" End If Temporal = Val(Left(RUC, 2)) If Temporal <> 10 And Temporal <> 20 And Temporal <> 15 And Temporal <> 16 And Temporal <> 17 Then Respuesta = "Incorrecto" End If Dim suma As Integer, resto As Integer, complemento As Byte suma = Val(Mid(RUC, 1, 1)) * 5 + Val(Mid(RUC, 2, 1)) * 4 + Val(Mid(RUC, 3, 1)) * 3 + Val(Mid(RUC, 4, 1)) * 2 + Val(Mid(RUC, 5, 1)) * 7 + Val(Mid(RUC, 6, 1)) * 6 + Val(Mid(RUC, 7, 1)) * 5 + Val(Mid(RUC, 8, 1)) * 4 + Val(Mid(RUC, 9, 1)) * 3 + Val(Mid(RUC, 10, 1)) * 2 resto = suma Mod 11 complemento = IIf(resto = 1, 0, Val(Left(11 - resto, 1))) If Val(Mid(RUC, 11, 1)) = complemento Then ValidarRUC = "Correcto" Exit Function End If sale: Respuesta = "Incorrecto" ValidarRUC = Respuesta End Function Function ConvertirDNIaRUC(DNI As String) As String If Len(DNI) <> 8 Then ConvertirDNIaRUC = "Error en DNI" Exit Function End If Dim RUC As String Dim suma As Integer, resto As Integer, complemento As Byte RUC = 10 & DNI suma = Val(Mid(RUC, 1, 1)) * 5 + Val(Mid(RUC, 2, 1)) * 4 + Val(Mid(RUC, 3, 1)) * 3 + Val(Mid(RUC, 4, 1)) * 2 + Val(Mid(RUC, 5, 1)) * 7 + Val(Mid(RUC, 6, 1)) * 6 + Val(Mid(RUC, 7, 1)) * 5 + Val(Mid(RUC, 8, 1)) * 4 + Val(Mid(RUC, 9, 1)) * 3 + Val(Mid(RUC, 10, 1)) * 2 resto = suma Mod 11 complemento = IIf(resto = 1, 0, Val(Left(11 - resto, 1))) ConvertirDNIaRUC = "10" & DNI & complemento End Function
Muy bien, para realizar la búsqueda, consultaremos dos web constantemente, así que crearemos dos constantes
Const webSunat As String = "https://e-consultaruc.sunat.gob.pe/cl-ti-itmrconsruc/jcrS00Alias" Const CaptchaSunat As String = "https://e-consultaruc.sunat.gob.pe/cl-ti-itmrconsruc/captcha?accion=random"
Muy bien, con todo lo mencionado, ya podemos programar una función
2.1 Programando función para leer consulta RUC SUNAT
Muy bien. al código generado hasta el momento, le agregaremos lo siguiente:
Function ConsultaRUCSunat(nEnviado As String) As Boolean Dim caracteres As Byte, Validador As Boolean, nRUC$ Dim Respuesta$, RespuestaTexto$, RespuestaHTML$, Captcha$, enviado$, Solicitud As Object Dim HTML As Object Dim i As Byte, n As Byte 'Validación del número de RUC caracteres = Len(nEnviado) Select Case caracteres Case 8 Validador = True nRUC = ConvertirDNIaRUC(nEnviado) Case 11 If ValidarRUC(nEnviado) = "Correcto" Then Validador = True nRUC = nEnviado Else Validador = False End If Case Else Validador = False End Select If Validador = False Then ConsultaRUCSunat = False Exit Function End If '-------------------------------- 'Obtener el captcha Set Solicitud = CreateObject("winhttp.winhttprequest.5.1") enviado = "" Solicitud.Open "POST", CaptchaSunat, False Solicitud.setrequestheader "Content-type", "application/x-www-form-urlencoded" Solicitud.send (enviado) Captcha = Solicitud.responseText '-------------------------------- 'Consulta Datos a web Consulta RUC 'No creamos un nuevo objeto, porque debemos mantener la sesión enviado = "accion=consPorRuc&nroRuc=" & nRUC & "&numRnd=" & Captcha Solicitud.Open "POST", webSunat, False Solicitud.setrequestheader "Content-type", "application/x-www-form-urlencoded" Solicitud.send (enviado) Respuesta = Solicitud.responseText '-------------------------------- End Function
Solo abrimos una vez la solicitud para mantener la sesión, de abrirla nuevamente generaría un nuevo captcha
La variable Respuesta será igual al HTML devuelto de la consulta
Paso #3: Guardando la información consultada en un Array
Muy bien, ya tenemos la información que necesitamos en una variable tipo String, ahora sugiero que la información de los campos que necesitamos se guarden en un array
Public ConsultaSunat(19) As String
El array llamado ConsultaSunat(19) almacenará toda la información que necesitamos
Debido a que trabajaremos con etiquetas HTML, he creado cuatro funciones que nos ayudarán a realizar la limpieza
3.1 Funciones VBA para la limpieza HTML – Web scraping
Función para limpiar los option del HTML
Function LimpiarOptionHTML(Valor As String) As String Dim posi&, posf&, HTML$, Tborrado$ On Error Resume Next HTML = Valor 'Extraer contenido del Select posi = InStr(HTML, "
Función para eliminar etiquetas HTML
Function eliminarEtiquetasHTML(HTMLenviado As String) As String Dim posi&, posf&, HTML$, Tborrado$ HTML = HTMLenviado posi = InStr(HTML, "<") While posi > 0 posf = InStr(HTML, ">") Tborrado = Mid(HTML, posi, posf - posi + 1) HTML = Replace(HTML, Tborrado, "") posi = InStr(HTML, "<") Wend eliminarEtiquetasHTML = HTML End Function
Función para eliminar comentarios en HTML
Function eliminarComentariosHTML(Valor As String) As String Dim posi As Long, posf As Long, HTML As String, Tborrado As String HTML = Valor posi = InStr(HTML, "") Tborrado = Mid(HTML, posi, posf - posi + 3) HTML = Replace(HTML, Tborrado, "") posi = InStr(HTML, "Esta entrada tiene 34 comentarios
Deja una respuesta
Dejo de funcionar.
BUENAS TARDES ING LUIS ME PARECE QUE AHORA LA MACRO YA NO FUNCIONA POR SUNAT MODIFICO ALGUNOS PARAMETROS YA NO TIENE CAPCHA LO PODRIA ACTUALIZAR.
hola me baje la macro pero cuando activas las opciones de la pestaña config Representantes legales SI,Cantidad de trabajadores SI, genera errores cuando procesas. podrías compartirlo a mi correo si existe una actualizacion nueva.
Hola, eh descargado recién y no me permite buscar por ruc de proveedor ya que me sale error tanto en busqueda individual y masiva. Quisiera que lo actualices y yo te pago para poder usarlo
Hola Alex, por favor intenta descargar el archivo nuevamente, hice una actualización https://drive.google.com/file/d/16L4lAWCfXkIAKxT5JjQoYKFDRcTpmYUT/view?usp=sharing
Estimado Luis, agradezco la información compartida. Abusando de tu confianza quería saber si se puede agregar los padrones del proveedor. Muchas gracias!
GRACIAS AMIGO.. DE VERDAD QUE TE PASASTEIS , TE CUENTO QUE HE ESTADO EN ESTO DESDE QUE EMPESO LA PANDEMIA Y NADA Y AHORA GRACIAS A TI PUEDO CONTINUAR CON MI PROYECTO, DE VERDAD QUE TE FELICITO POR TU DESPRENDIMIENTO
Podemos hacer algo asi, con el sri de ecuador??
https://srienlinea.sri.gob.ec/sri-en-linea/SriRucWeb/ConsultaRuc/Consultas/consultaRuc
Hola Milton, no se puede realizar con esa página, a menos que se tenga el key del recaptcha
El recaptcha protege las web de consultas masivas de aplicaciones
Buen día Luis, excelente aporte el que nos estas brindando, y con el deseo de mejorar este proyecto te comento que agregue una linea al codigo y modifique otra:
1.- En «Sub ConsultaMasiva()» al recorrer el listado de RUC modifique la variable a esto «ndocumento = Format(wMasiva.Range(«A» & i), «00000000»)», para que al consultar un DNI que empiece con cero «0» no se detenga la macro.
2.- En «Sub AsignarValorCSunat» agregue «On Error Resume Next» para que la macro no se detenga al encontrar un DNI que no tenga RUC y pueda continuar con la siguiente consulta.
Lo que no puedo hacer y seria interesante integrar es que imprima el texto «No tiene RUC» en la columna de Razón Social antes de continuar con la siguiente consulta.
PD. mi nivel de macros es muy básico, y gracias a tus aportes voy mejorando.
Saludos.
Hola Manuel, gracias por tu comentario hice algunas actualizaciones en la versión 2, que también incluye dirección https://drive.google.com/file/d/1ylvpvajlZHaVc9qQUTjAbf4aV4k49Cmn/view
Hola ya vi el error
este ruc 10084763590, segun sunat no existe.
Pero cuando colocas ese mismo ruc en la hoja de masivos y le das buscar, no muestra el mensaje de ruc no existe, si no que lo ejecuta, lo trata de buscar y no lo encuentra, y al final muestra DEPURAR.
en este caso como se haria, la macros deberia de continuar ejecutandose y no mostrar nada y continunar buscando los demas rucs.
Hola, se actualizó el link, por favor vuelve a internar con la nueva versión
Hola Luis, a fecha de hoy 21/06/2020 esta Macro Excel de Consulta RUC no está funcionando, ya que «No Encuentran» los Números de RUC cuando se genera la búsqueda, podrías actualizar esta útil Macro Excel por favor.
De antemano, muchas gracias.
Tienes toda la razón. No está funcionando.
Hola, acabo de publicar un nuevo aplicativo consulta SUNAT: https://www.youtube.com/watch?v=z8eYGJXUkbs
me sale error 10001 en tiempo de ejecucion
Error Parsing JSON
Hola, acabo de publicar un nuevo aplicativo consulta SUNAT: https://www.youtube.com/watch?v=z8eYGJXUkbs
El programa esta desactualizado, o sunat cambio algo, no sale el reporte, como lo indica Abraham Monasterio, no da resultados, baje el que indicas y nada, igual sale en datos la direccion de la pagina Web, Saludos
Hola, acabo de publicar un nuevo aplicativo consulta SUNAT: https://www.youtube.com/watch?v=z8eYGJXUkbs
Hola Luis, gracias por la macro que pones a nuestra disposición muy amablemente. He observado que cuando se pone un Número de RUC equivocado en la Pestaña «Búsqueda masiva» se cuelga la Macro por ejemplo pones este RUC: 20423555482 que es un RUC que no existe y pienso que debería aparecer un Mensaje por Ejm: «N° RUC Incorrecto» y detenerse la macro, sin embargo la macro sigue procesando por mucho tiempo y finalmente se cuelga y me obliga a cerrarlo. Podrías ser tan amable de corregir ese error. De antemano, muchas gracias.
Ohhh gracias por el mensaje, ok lo actualizaré
Hola, descargué tu archivo, y me al hacer la búsqueda, me devuelve tu pagina web.
Hola Abraham, gracias por usar nuestro aplicativo
Por favor vuelve a descargar el archivo desde https://drive.google.com/file/d/1hsBynZTXW88B-ghjzrf20OVQVGE97FWs/view lo he probado y no me muestra errores
HOLA LUIS
EL LINK ES EL SIGUIENTE:
https://e-consultaruc.sunat.gob.pe/cl-ti-itmrconsruc/frameCriterioBusqueda.jsp
POR EJEMPLO EN ACTIVIDADES ECONÓMICAS SALE UN COMBOBOX CON TODAS LAS ACTIVIDADES A LA QUE SE DEDICA LA EMPRESA.
Otra consulta, para cuando estará publicando la segunda parte de consulta RENIEC – FOTO.
Muy interesante sus publicaciones
Gracias.
Hola, como podríamos poner todas las actividades del comercia así mismo las emisiones de comprobante en un ComBox tal como se muestra en la pagina de la SUNAT.
Gracias
Hola Joel, tendría que analizar la página en donde se muestra ésta información, me puedes enviar el link de consulta por éste medio?
Muchas gracias por el gran aporte, en serio que me ayuda a poder seguir con mi proyecto. Se puede tomar códigos para poder adicionarle a mi herramienta de trabajo, mejor dicho si puedo agregarle más cosas.
De nada Jorge :), si puedes compartir mi publicación me ayudarías mucho
EXCELente tu Programa muchas gracias, me ayuda mucho. Un abrazo.
Me gusta el aplicativo, pero me gustaría contactarlo porque deseo saber si le puede agregar otros datos
Hola Ismael, recibí tu correo, revisa tu bandeja 🙂
Luis muuuuchas gracias! Justo necesitaba un aplicativo de consultas SUNAT
Muchas muchas gracias
De nada Andrés, pronto haré un nuevo aplicativo SUNAT que muestre mayor detalle 🙂