Excel es tan versátil que además de tratar datos y hacer cálculos, lo puedes utilizar como formulario para capturar datos y guardarlos en otra ubicación: una base de datos, otro archivo, una tabla. Aquí te muestro cómo hacer para que captures datos en un formulario en Excel y esos datos se guarden directamente en una base de datos en la nube. Y como va a estar en la nube, no hay problema con que el mismo archivo se utilice en varias máquinas, todo de manera segura y gratuita.
Cómo Guardar Datos de Excel en una Base de Datos en la Nube
🎁 Descarga el archivo de ejemplo
Escribe tu correo electrónico para recibir gratis el archivo para practicar.
*Al enviar mi correo electrónico, acepto recibir noticias y ofertas. Puedo darme de baja en cualquier momento.
El formulario en Excel

Yo tengo un formulario de captura en Excel con fecha, vendedor, producto, nombre, precio, cantidad y total. Quiero que estos datos se den de alta en una base de datos llamada Supabase, la cual tenemos que dar de alta y configurar en supabase.com.
El beneficio de esto es que tu mismo archivo se va a conectar a esa base de datos, lo que significa que el archivo lo puedes compartir por correo o en una red local y siempre los datos se van a ir a la misma base de datos. Y como es una base de datos formal, no hay riesgo de que haya interferencia entre registros. Cualquier persona que tenga tu archivo puede dar de alta registros en esa base de datos.
Supabase es relevante porque no requieres programar un backend, simplemente te conectas mediante una API. Con esa conexión puedes dar de alta registros, actualizar, modificar e incluso dar de baja.
Para adecuar el formulario en Excel:
- Fecha:
=HOY()para que devuelva la fecha de hoy. - Vendedor y Producto: listas desplegables con validación de datos (Datos → Validación de datos → Permitir lista), tomando el origen de una tabla de Vendedores y otra de Productos.
- Nombre y Precio: se traen automáticamente con
BUSCARX, buscando el producto en la tabla de Productos y devolviendo el nombre o el precio correspondiente. - Cantidad: se captura manualmente.
- Total: precio por cantidad.
Configurar la base de datos en Supabase
- Entra a supabase.com y crea una cuenta, ya sea desde cero con tu correo o usando tu cuenta de GitHub.
- Crea una nueva organización. El plan gratuito te permite bases de datos de hasta 500 MB y hasta dos proyectos. Si necesitas algo más robusto, existe el plan Pro.
- Crea el proyecto: nómbralo, ponle una contraseña a la base de datos y elige la región más cercana (Américas, si estás en México). Deja habilitados los Data API (la forma en que te conectas desde Excel o cualquier aplicación) y el RLS, que es la seguridad a nivel de fila.
Crear la tabla
En Table Editor, crea una tabla llamada registros, dejando habilitado el RLS. Además de las columnas automáticas id y created_at, agrega:
fecha(tipo Date — esta es la fecha que tú controlas desde Excel, distinta decreated_atque la pone automáticamente la base de datos)vendedor(texto)producto(texto)nombre(texto)precio(numérico)cantidad(numérico)total(numérico)
Dar permisos
Con la tabla creada, todavía nadie puede insertar nada. En el SQL Editor corre:
sql
GRANT INSERT ON public.registros TO anon;
anon es el rol de identidad anónima — con esto le das permiso a ese rol para dar de alta registros en la tabla.
Después, en Authentication → Policies, crea dos políticas:
- Alta-registros: comando
INSERT, rolanon,WITH CHECKentrue. Con esto ya puedes guardar registros. - Leer-registros: comando
SELECT, rolanon,USINGentrue. Esta la necesitas si más adelante quieres consultar los datos, por ejemplo con Power Query.
Obtener la URL y la llave
En Project Settings → Data API está la URL del proyecto. En Project Settings → API Keys está la llave pública (empieza con sb_). Ambas las vas a necesitar en la macro.
La macro en VBA
En la ficha Programador (si no la tienes: Archivo → Opciones → Personalizar cinta de opciones → activa Programador) abre Visual Basic y crea la macro. Esto es lo que hace: toma los valores de fecha, vendedor, producto, nombre, precio, cantidad y total, arma con ellos una cadena de tipo JSON, y la manda por HTTP a la API de Supabase usando la URL y la llave pública. Si todo sale bien, te devuelve un mensaje de registro guardado; si algo falla, te devuelve el error.
vba
Sub EnviarRegistroASupabase()
Dim http As Object
Dim url As String
Dim apiKey As String
Dim jsonBody As String
Dim fecha As String
Dim vendedor As String
Dim producto As String
Dim nombre As String
Dim precio As Double
Dim cantidad As String
Dim total As Double
' --- 1. Leer datos de la hoja ---
fecha = Format(Range("C4").Value, "yyyy-mm-dd")
vendedor = Range("C5").Value
producto = Range("C6").Value
nombre = Range("C7").Value
precio = Range("C8").Value
cantidad = Range("C9").Value
total = Range("C10").Value
' --- 2. Configuración de Supabase ---
url = "URL"
apiKey = "API_KEY" ' sb_publishable_... o anon key
' --- 3. Construir el JSON ---
jsonBody = "{""fecha"":""" & fecha & """,""vendedor"":""" & vendedor & """,""producto"":""" & producto & """,""nombre"":""" & nombre & """,""precio"":" & precio & ",""cantidad"":" & cantidad & ",""total"":" & total & "}"
' --- 4. Configurar y enviar la petición HTTP ---
Set http = CreateObject("MSXML2.XMLHTTP.6.0")
http.Open "POST", url, False
http.setRequestHeader "apikey", apiKey
http.setRequestHeader "Authorization", "Bearer " & apiKey
http.setRequestHeader "Content-Type", "application/json"
http.setRequestHeader "Prefer", "return=representation"
http.send jsonBody
' --- 5. Manejo de respuesta ---
If http.Status = 201 Then
MsgBox "Registro guardado correctamente en Supabase.", vbInformation
Else
MsgBox "Error " & http.Status & ": " & http.responseText, vbCritical
End If
Set http = Nothing
End Sub
Reemplaza URL con la URL de tu proyecto seguida de /registros (la tabla), y API_KEY con tu llave pública.
Después, en Insertar → Iconos, agrega un ícono a la hoja (por ejemplo uno de base de datos), dale clic derecho → Asignar macro → elige EnviarRegistroASupabase. Con eso ya tienes un botón que da de alta el registro con un clic.
Un error común al probar esto: si te aparece “únicamente llaves secretas pueden utilizarse para este endpoint”, revisa que a la URL le hayas agregado el nombre de la tabla al final (por ejemplo .../rest/v1/registros) — sin eso, Supabase no sabe a qué tabla te estás conectando y lo interpreta como un endpoint que requiere otro tipo de llave.
Leer los datos con Power Query
Ya que los datos están en Supabase, puedes traerlos de vuelta a Excel con Power Query. En la ficha Datos → Obtener datos → Consulta en blanco, y en el Editor avanzado pega:
let
Origen = Web.Contents(
"URL",
[
Headers = [
#"apikey" = "API",
#"Authorization" = "Bearer API"
]
]
),
JSON = Json.Document(Origen),
Tabla = Table.FromRecords(JSON)
in
Tabla
Aquí la URL debe ser la de la tabla completa (la misma que usaste en la macro), y en ambos lugares donde dice API va tu llave pública. Al conectar, Power Query te va a pedir editar credenciales — dale conectar y vas a ver los datos en formato JSON convertidos a tabla. Cierra y carga a una hoja nueva, y ahí quedan tus registros. Cada vez que quieras traer los datos más recientes, solo actualizas la consulta.
Lo que sigue
Con esto ya tienes lo básico: un formulario en Excel que captura datos, una macro que los manda a una base de datos en la nube, y Power Query para consultarlos de vuelta. El siguiente paso natural es construir un sistema completo tipo CRUD, donde además de dar de alta y consultar puedas actualizar y eliminar registros directamente desde Excel — pero esa es harina de otro costal.
Si quieres profundizar en automatización con VBA, Power Query y este tipo de integraciones que le dan a Excel el poder de una herramienta empresarial real, en Deztaca tenemos los cursos que te llevan paso a paso por todo esto, con ejercicios prácticos y acompañamiento real.
