¿Necesitas generar códigos QR directamente en Excel, sin complementos, sin costos y con una sola fórmula? En este artículo te compartimos una macro VBA personalizada que convierte el contenido de cualquier celda en un código QR visual, ajustándose automáticamente al tamaño de la celda.
Esta herramienta es ideal para ingenieros, administradores y cualquier profesional que trabaje con Excel y necesite generar QRs dinámicos de URLs, códigos, textos o datos de identificación.
¿Qué hace esta función QR en Excel?
La función =QR(celda) realiza automáticamente lo siguiente:
- Descarga el código QR desde la API gratuita de qrserver.com
- Inserta la imagen QR directamente sobre la celda donde se invoca
- Ajusta el QR al tamaño exacto de la celda (con un margen interno del 5%)
- Si el contenido de la celda cambia, el QR se regenera automáticamente
- Cada celda tiene su propio QR con nombre único — no se arrastra ni duplica al copiar la fórmula
- Usa corrección de errores nivel H: el QR sigue legible aunque esté parcialmente dañado o impreso con baja calidad
- A continuación un video que muestra el funcionamiento de la Formula QR para generar los respectivos códigos en imagen:
Requisitos
- Excel 2010 o superior en Windows
- Conexión a Internet activa al momento de generar el QR
- Macros habilitadas en Excel
- Guardar el archivo en formato .xlsm (libro habilitado para macros)
Instalación de la función Excel paso a paso
- Abre tu archivo Excel y presiona Alt + F11 para abrir el Editor de Visual Basic.
- En el panel izquierdo, haz clic derecho sobre tu libro → Insertar → Módulo.
- Copia y pega el código completo que aparece más abajo en el módulo vacío.
- Cierra el editor y vuelve a Excel.
- Guarda el archivo como .xlsm (libro habilitado para macros).
Código VBA — Función =QR()
Copia el siguiente código completo y pégalo en el módulo VBA:
'=============================================================================== ' FUNCIÓN: QR '=============================================================================== ' SINTAXIS : =QR(celda, [tamaño]) ' ARGUMENTOS: celda → contenido a codificar (texto, URL, número) ' tamaño → píxeles del QR (opcional, defecto 0 = ajusta a la celda) ' EJEMPLOS : =QR(A1) QR ajustado al tamaño actual de la celda ' =QR(A1, 250) QR de 250×250 forzado en la celda ' NOTAS : · Requiere Internet (api.qrserver.com) ' · El QR se ajusta al tamaño de la celda automáticamente ' · Para controlar el tamaño, ajusta alto/ancho de la celda primero ' · No usar en rangos múltiples; invocar celda por celda '=============================================================================== Function QR(rng As Range, Optional tamano As Integer = 0) As String Dim sData As String: sData = Trim(CStr(rng.Value)) If Len(sData) = 0 Then Exit Function Dim oCell As Range: Set oCell = Application.Caller Dim px As Integer If tamano <= 0 Then px = Int(Application.Min(oCell.Width, oCell.Height)) Else px = tamano End If If px < 10 Then px = 10 If px > 1000 Then px = 1000 ' ── Saneado de nombre de hoja con caracteres especiales ────────────────── Dim sHoja As String sHoja = oCell.Worksheet.Name sHoja = Replace(Replace(Replace(Replace(Replace(sHoja, "/", ""), "\", ""), ":", ""), "?", ""), "*", "") Dim sTmp As String: sTmp = Environ("TEMP") & "\qr_" & sHoja & "_" & oCell.Address(False, False) & ".png" Dim sNombre As String: sNombre = "QR_" & sHoja & "_" & oCell.Address(False, False) Dim oHTTP As Object: Set oHTTP = CreateObject("MSXML2.XMLHTTP") oHTTP.Open "GET", "https://api.qrserver.com/v1/create-qr-code/?size=" & px & "x" & px & _ "&ecc=H" & _ "&qzone=1" & _ "&data=" & WorksheetFunction.EncodeURL(sData), False oHTTP.setRequestHeader "Connection", "close" oHTTP.Send If oHTTP.Status <> 200 Then Exit Function Dim oStream As Object: Set oStream = CreateObject("ADODB.Stream") oStream.Type = 1: oStream.Open oStream.Write oHTTP.ResponseBody oStream.SaveToFile sTmp, 2: oStream.Close Set oStream = Nothing: Set oHTTP = Nothing Dim oPic As Picture On Error Resume Next For Each oPic In oCell.Worksheet.Pictures If oPic.Name = sNombre Then oPic.Delete: Exit For Next oPic ' ── Margen interno del 5% por lado para que se noten los bordes ────────── Dim dMargen As Double: dMargen = 0.05 Dim dAncho As Double: dAncho = oCell.Width * (1 - dMargen * 2) Dim dAlto As Double: dAlto = oCell.Height * (1 - dMargen * 2) With oCell.Worksheet.Pictures.Insert(sTmp) .Name = sNombre .Top = oCell.Top + oCell.Height * dMargen .Left = oCell.Left + oCell.Width * dMargen .Width = dAncho .Height = dAlto .Placement = xlFreeFloating End With On Error GoTo 0 QR = "" End Function
Una vez instalado el código, el uso es muy simple:
- Ajusta el alto de fila y ancho de columna de la celda destino al tamaño que deseas para el QR
- Escribe =QR(A1) en esa celda, donde A1 contiene el texto o URL a codificar
- El QR se genera e inserta automáticamente
También puedes forzar un tamaño específico con el segundo argumento:
- =QR(A1) → QR ajustado al tamaño de la celda
- =QR(A1, 200) → QR de 200×200 píxeles
- =QR(A1, 300) → QR de 300×300 píxeles
Compatibilidad
La función es compatible con las siguientes versiones de Excel en Windows:
- ✅ Excel 2010, 2013, 2016, 2019, 2021
- ✅ Microsoft 365 (Windows)
- ⚠️ Excel 2007 — compatibilidad parcial (EncodeURL no disponible)
- ❌ Excel para Mac — MSXML2 es exclusivo de Windows
- ❌ Excel Online — sin soporte para VBA
Notas importantes de la Formula para Generar QR
- Requiere Internet — la función llama a una API externa cada vez que se recalcula. Sin conexión, la celda quedará vacía.
- Una celda a la vez — no se puede arrastrar la fórmula como una función normal. Cada QR se invoca individualmente en su celda destino.
- Guardar como .xlsm — el archivo debe guardarse en formato habilitado para macros, no como .xlsx.
- Macros habilitadas — ve a Archivo → Opciones → Centro de confianza → Configuración de macros y habilita las macros.
Esperamos que esta formula para generar códigos QR en Excel les sea de utilidad. Es una herramienta práctica, gratuita y sin dependencias externas, ideal para ingenieros, administradores y cualquier profesional que trabaje con Excel. Saludos a toda la comunidad de Civil Excel.

0 Post a Comment:
Publicar un comentario