Todos los tutoriales sobre cómo conseguir tipos de cambio en vivo en Excel prometen lo mismo y, sin decirlo, entregan otra cosa. Sigues los pasos, aparece un número en una celda y parece estar en vivo. Casi nunca lo está. Es un tipo de referencia que se publica una vez al día, o una cotización con retardo, o una tabla HTML extraída por scraping que la próxima vez que actualices devolverá en silencio la divisa equivocada.
Esta guía cubre los cuatro métodos que realmente funcionan —el tipo de datos Divisas integrado en Excel, la función WEBSERVICE, Power Query y una LAMBDA reutilizable— y, más importante aún, te dice cuál funciona en tu versión de Excel, cómo de actualizado está cada uno en realidad y dónde cada uno produce números incorrectos sin lanzar ningún error.
Todas las fórmulas y todas las consultas de abajo se escribieron contra las formas de respuesta documentadas de la API de Finexly y se probaron antes de publicarse.
Los cuatro métodos, y cuál puedes usar de verdad
Las funciones de divisas de Excel dependen de la versión de una forma poco habitual. La mitad de los tutoriales sobre este tema recomiendan un método que no existe en la máquina del lector. Empieza por aquí.
| Método | Funciona en | Frecuencia real de actualización | ¿Puede enviar una clave de API de forma segura? | Ideal para |
|---|---|---|---|---|
| Tipo de datos Divisas | Microsoft 365 (Windows + Mac), Excel para la web. No en 2016/2019/2021/2024 | Con retardo, sin intervalo publicado; actualización manual o al abrir | N/D — no interviene ninguna API | Una consulta rápida, un puñado de pares |
WEBSERVICE | Solo escritorio en Windows: M365, 2024, 2021, 2019, 2016. No en Mac, web ni móvil | Lo que devuelva tu API, pero la fórmula es volátil | ❌ No. La clave tiene que ir en la URL | Una o dos celdas, prototipos rápidos |
| Power Query | Excel 2016+ en Windows. M365 para Mac tiene Power Query pero sin conector web | Lo que devuelva tu API, al actualizar | ✅ Sí, mediante Headers en M | Tablas de tipos, conversión masiva, producción |
Envoltorio LAMBDA | Excel 2021+/M365 en Windows (hereda los límites de WEBSERVICE) | Igual que WEBSERVICE | ❌ No | Un =FXRATE() limpio para usuarios de hojas de cálculo |
- Si trabajas en un Mac, el conector web de Power Query no aparece entre tus orígenes disponibles y
WEBSERVICEno funciona en absoluto. Microsoft es explícito:WEBSERVICE"puede aparecer en la galería de funciones de Excel para Mac, pero depende de características del sistema operativo Windows, por lo que no devolverá resultados en Mac". En la práctica, los usuarios de Mac con Microsoft 365 están limitados al tipo de datos Divisas. - Si usas una licencia perpetua de Excel 2019, 2021 o 2024, el tipo de datos Divisas no está disponible para ti: los tipos de datos vinculados existen solo en Microsoft 365 y en Excel para la web. Tu camino es
WEBSERVICEo Power Query.
Método 1: el tipo de datos Divisas integrado en Excel
Esta es la opción sin código, y es con la que abre la mayoría de los artículos.
- Escribe los pares de divisas en una columna usando códigos ISO 4217 separados por una barra o por dos puntos:
USD/EUR,GBP:JPY. (Si no estás seguro de qué código usar, nuestra referencia de ISO 4217 los enumera todos). - Selecciona las celdas y ve a Datos → Tipos de datos → Divisas.
- Cada celda se convierte en un registro vinculado con un pequeño icono de divisa. Haz clic en el icono, o usa el botón Insertar datos, y elige Precio para volcar el tipo en la celda contigua.
- Actualiza con Datos → Actualizar todo.
Lo que Microsoft promete en realidad
Esta es la parte que los tutoriales se saltan. La propia documentación de Microsoft incluye una advertencia en la página de Divisas: "La información sobre divisas se proporciona 'tal cual' y puede estar sujeta a retardo. Por lo tanto, estos datos no deben usarse con fines de negociación ni como asesoramiento." No hay ningún intervalo de actualización publicado para los pares de divisas. Los datos financieros subyacentes proceden de LSEG Data & Analytics (antes Refinitiv) y se exponen a través de Bing.
Tres restricciones más que importan si estás construyendo algo real:
- La disponibilidad depende del inquilino. Microsoft afirma que "los pares de divisas solo están disponibles para cuentas de Microsoft 365 (clientes multiinquilino de todo el mundo)". Si tu organización está en una nube soberana o gubernamental, el botón Divisas aparecerá atenuado y ninguna cantidad de diagnóstico lo cambiará.
- No hay actualización en el servidor. Los tipos de datos vinculados se actualizan únicamente mientras el libro está abierto en Excel. La opción automática de cinco minutos existe, pero por ahora está limitada al programa Insiders, y Microsoft señala que "algunos tipos de datos vinculados solo se pueden actualizar manualmente".
- El par es opaco. Obtienes un número. No puedes ver la marca de tiempo, la fuente ni el diferencial. Para facturar o para informar necesitas un tipo auditable con una fecha asociada, que es un problema muy distinto.
Usa este método para echarle un vistazo a un tipo. No lo uses como entrada de nada que después tengas que defender.
Método 2: WEBSERVICE más una API de divisas
WEBSERVICE(url) realiza una petición HTTP GET y devuelve el cuerpo de la respuesta como texto. Acepta exactamente un argumento: una URL. Ese único hecho condiciona todo lo demás de este método.
Por qué tu clave de API tiene que ir en la URL
Como WEBSERVICE no tiene parámetro de cabeceras, no puedes enviar Authorization: Bearer …. Cualquier API que uses desde WEBSERVICE debe aceptar la clave como parámetro de consulta. Finexly admite las dos formas:
# Recommended everywhere else — but impossible from WEBSERVICE
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.finexly.com/v1/rate?from=USD&to=EUR"
# The query-parameter form, which is what WEBSERVICE needs
https://api.finexly.com/v1/rate?from=USD&to=EUR&api_key=YOUR_API_KEYSé honesto contigo mismo sobre el compromiso. Las claves en las URL acaban escritas en los registros de acceso del servidor y pueden filtrarse a través de las cabeceras HTTP de referencia, y la clave se guarda en texto plano dentro del libro, así que cualquier persona a la que le envíes el archivo tiene tu clave. Usa una clave aparte, con cuota baja, para las hojas de cálculo, y nunca distribuyas un libro con WEBSERVICE que contenga una clave de producción.
Una fórmula que funciona
Pon la URL en A1 y la respuesta en bruto en A2:
A1: ="https://api.finexly.com/v1/rate?from="&B1&"&to="&C1&"&api_key="&$D$1
A2: =WEBSERVICE(A1)A2 contiene ahora el texto literal de la respuesta:
{"pair":"USD_EUR","rate":0.9215}Ahora extrae el número. Casi todos los tutoriales de la competencia lo hacen por posición —INDEX(TEXTSPLIT(...), 1, 6)—, algo que se rompe en silencio en cuanto la API añade un campo o cambias de endpoint. Ánclate mejor en el nombre de la clave:
=LET(
raw, A2,
p, FIND("""rate"":", raw) + 7,
e, MIN(IFERROR(FIND(",", raw, p), 9999), IFERROR(FIND("}", raw, p), 9999)),
IFERROR(VALUE(MID(raw, p, e - p)), NA())
)Esto busca el literal "rate":, avanza sus siete caracteres y lee hasta lo que llegue primero: una coma o una llave de cierre. Devuelve 0.9215 tanto de la respuesta de dos campos de /v1/rate como de la respuesta de cuatro campos de /v1/convert-amount, y devuelve #N/A en lugar de un número incorrecto si la llamada falla. LET requiere Excel 2021 o Microsoft 365; en Excel 2016/2019 puedes escribir las mismas llamadas a FIND en línea, a costa de la legibilidad.
La trampa de la volatilidad
WEBSERVICE es una función volátil. Se recalcula prácticamente con cada cambio en la hoja, no solo cuando pulsas F9. Construye un conversor de 40 filas con un WEBSERVICE por fila y una sola pulsación de tecla disparará 40 peticiones HTTP.
Con un plan gratuito de 1.000 peticiones al mes, eso son unas 25 pulsaciones antes de quedarte sin cuota. Dos defensas: limita WEBSERVICE a una única celda y referencia esa celda desde todas partes, o cambia el cálculo a manual (Fórmulas → Opciones para el cálculo → Manual) mientras construyes. Mejor todavía, usa Power Query, que no es volátil.
Método 3: Power Query, el que escala
Power Query es el único método de esta lista que puede enviar una cabecera Authorization, actualizarse de forma programada y manejar una tabla de cincuenta mil filas sin fundirse. Es también el método que todos los tutoriales demuestran íntegramente a base de clics en la interfaz, de modo que el código M real no aparece por ninguna parte. Aquí lo tienes.
Abre Datos → Obtener datos → Iniciar el Editor de Power Query, luego Nuevo origen → Consulta en blanco, después Inicio → Editor avanzado, y pega:
let
ApiKey = "YOUR_API_KEY",
Pairs = "USD_EUR,USD_GBP,USD_JPY,USD_CHF",
Source = Json.Document(
Web.Contents(
"https://api.finexly.com",
[
RelativePath = "v1/convert",
Query = [ q = Pairs ],
Headers = [ #"Authorization" = "Bearer " & ApiKey ]
]
)
),
ToTable = Record.ToTable(Source),
Expanded = Table.ExpandRecordColumn(ToTable, "Value", {"rate"}, {"rate"}),
Split = Table.SplitColumn(
Expanded, "Name",
Splitter.SplitTextByDelimiter("_", QuoteStyle.None),
{"Base", "Quote"}
),
Typed = Table.TransformColumnTypes(
Split,
{{"Base", type text}, {"Quote", type text}, {"rate", type number}}
)
in
TypedLlámala FxRates y cárgala en una hoja. Obtienes una tabla limpia de tres columnas: Base, Quote, rate.
Tres detalles de esa consulta están haciendo trabajo real, y los tres faltan en todos los recorridos por la interfaz:
Headersmantiene la clave fuera de la URL. Es la mayor ventaja de seguridad que tiene Power Query frente aWEBSERVICE.RelativePathyQueryse separan de la URL base a propósito. Si concatenas toda la URL en una sola cadena, Power Query la clasifica como origen de datos dinámico, que no se puede actualizar de forma desatendida en el servicio Power BI. Pasar la ruta y la consulta por separado mantiene el origen estático y actualizable.- Una petición, muchos pares.
/v1/convertdevuelve todos los pares que pidas en una sola llamada. Un libro que se actualiza cada hora durante una jornada de ocho horas a lo largo de 22 días hábiles hace así 176 peticiones al mes. Treinta llamadas separadas a/v1/ratecon la misma frecuencia harían 5.280: cinco veces la cuota mensual gratuita, para datos idénticos.
Una función de tipos reutilizable
Para un solo par bajo demanda, envuélvelo en una función M:
let
FxRate = (baseCode as text, quoteCode as text) as number =>
let
ApiKey = "YOUR_API_KEY",
Source = Json.Document(
Web.Contents(
"https://api.finexly.com",
[
RelativePath = "v1/rate",
Query = [ from = baseCode, to = quoteCode ],
Headers = [ #"Authorization" = "Bearer " & ApiKey ]
]
)
)
in
Source[rate]
in
FxRateLlámala desde cualquier otra consulta como FxRate("USD", "EUR").
Convertir 50.000 filas sin hacer 50.000 búsquedas
Arrastrar XLOOKUP por una tabla grande es lento y frágil, y si la salida de la consulta cambia de tamaño al actualizar, las referencias a columnas completas como F:F se desalinearán en silencio. Haz la unión dentro de Power Query:
- Carga tu tabla de transacciones en Power Query.
- Inicio → Combinar consultas, emparejando tu columna
CurrencyconFxRates[Quote]. - Expande la columna combinada y conserva
rate. - Agregar columna → Columna personalizada con la conversión.
Eso es una única unión sobre toda la tabla, evaluada una vez por actualización, sin ninguna fórmula volátil en todo el libro.
Método 4: una LAMBDA =FXRATE() reutilizable
Si quienes usan el libro son usuarios de hojas de cálculo y no autores de consultas, esconde todo lo anterior detrás de una sola función. Ve a Fórmulas → Administrador de nombres → Nuevo, ponle de nombre FXRATE y configura Hace referencia a:
=LAMBDA(from_code, to_code, key,
LET(
url, "https://api.finexly.com/v1/rate?from=" & from_code &
"&to=" & to_code & "&api_key=" & key,
raw, WEBSERVICE(url),
p, FIND("""rate"":", raw) + 7,
e, MIN(IFERROR(FIND(",", raw, p), 9999), IFERROR(FIND("}", raw, p), 9999)),
IFERROR(VALUE(MID(raw, p, e - p)), NA())
)
)Ahora cualquiera puede escribir =FXRATE("USD","EUR",$D$1) y obtener 0.9215. Guarda la clave una sola vez en D1, protege esa celda y el resto del libro nunca la toca. Ten en cuenta que esto hereda todas las limitaciones de WEBSERVICE —solo Windows, volátil, clave en la URL—, así que es una victoria de usabilidad, no de seguridad ni de escalabilidad.
Cinco maneras en que las conversiones de divisas en Excel salen mal en silencio
Son errores de corrección, no mensajes de error. Nada se pone en rojo. Los números simplemente no son lo que tú crees.
1. Multiplicar cuando deberías dividir
Este es el error más común de los tutoriales publicados sobre divisas en Excel, y vale la pena ser preciso sobre el daño que causa. Un tipo USD_EUR de 0.9215 convierte USD a EUR. Para ir en sentido contrario —de EUR a USD— divides.
- Correcto:
100 / 0.9215= 108,52 USD - Incorrecto:
100 × 0.9215= 92,15 USD
El resultado se desvía por el cuadrado del tipo, 0.9215² = 0.8492: una subestimación del 15,1 % que parece del todo plausible en un informe. Escribe la dirección en los encabezados de columna (USD→EUR rate, no Rate) y el error se vuelve difícil de cometer.
2. Analizar el JSON por posición
INDEX(TEXTSPLIT(response, ":", "}"), 1, 6) funciona hasta el momento exacto en que la API añade un campo; a partir de ahí, el índice 6 devuelve otro valor sin error alguno. Ánclate en el nombre de la clave, como en la fórmula LET de arriba, o usa Json.Document de Power Query, que analiza correctamente.
3. Redondearlo todo a dos decimales
Excel usa dos decimales por defecto; ISO 4217 no. JPY, KRW y VND no tienen unidades menores: ¥250.75 no es un importe válido. BHD, KWD, OMR y TND tienen tres. Redondear un total en JPY a dos decimales y volver a redondearlo aguas abajo es exactamente como las conciliaciones acaban desviadas por unas cuantas unidades. Cubrimos el conjunto completo de reglas en nuestra guía sobre redondeo de divisas y decimales.
4. Tratar un tipo medio de mercado como el tipo que te van a cobrar
Todos los tipos de este artículo —y de cualquier API gratuita— son el tipo medio de mercado: el punto medio entre la compra y la venta. No es lo que te da tu banco, tu red de tarjetas o tu procesador de pagos. Los diferenciales reales van desde alrededor del 0,5 % hasta varios puntos porcentuales. Si estás fijando precios o presupuestando a un cliente, añade una columna explícita de margen en lugar de fingir que el tipo medio de mercado es el tipo de liquidación. Nuestra explicación sobre de dónde sacan sus datos las API de tipos de cambio detalla qué representan y qué no representan estos feeds.
5. Dejar que un libro en vivo reescriba los números del mes pasado
Este es grave y casi nunca se menciona. Si tus celdas de tipos se actualizan en vivo, cada fila histórica del libro se revaloriza al tipo de hoy cada vez que alguien abre el archivo. Los ingresos de marzo cambian en abril. Tu conciliación no cuadrará dos veces seguidas.
Una vez que una transacción ha ocurrido, su tipo es un hecho sobre esa fecha, no un valor en vivo. Congélalo: convierte una vez, pega el resultado como valor junto al tipo y la fecha utilizados, y reserva la consulta en vivo solo para las filas nuevas. Es la misma disciplina que los sistemas de facturación multidivisa y de gestión de gastos imponen a nivel de base de datos.
Extra: tipos cruzados
Si tu API devuelve todo contra una única base, convertir EUR→GBP significa dividir un tipo entre el otro:
EUR→GBP = USD_GBP / USD_EUR = 0.7892 / 0.9215 = 0.856430
1,000 EUR = 856.43 GBPRedondea solo en el paso final. Redondear el tipo cruzado intermedio a cuatro decimales y multiplicar después introduce un error que se acumula a lo largo de una tabla grande. Hay más detalle en nuestra guía sobre tipos de cambio cruzados.
Actualización automática, límites de peticiones y cómo quedarte en el plan gratuito
Para que una tabla de tipos de Power Query se actualice sola: haz clic derecho en la consulta en Consultas y conexiones → Propiedades, y marca Actualizar al abrir el archivo o Actualizar cada N minutos.
Dos cosas de las que nadie te avisa:
- Actualizar al abrir dispara el aviso de seguridad de datos externos de Excel. Los usuarios verán una barra amarilla y, hasta que hagan clic en Habilitar, la actualización "automática" no hace nada. Añadir la carpeta a Centro de confianza → Ubicaciones de confianza lo evita.
- Actualizar cada 15 minutos contra un tipo que se publica una vez al día es puro desperdicio. Ajusta el intervalo a la frecuencia con la que tu fuente cambia de verdad. Para la mayoría del trabajo de facturación e informes, una vez al abrir es más que suficiente.
Vigila tu consumo con las cabeceras de respuesta que devuelve Finexly: X-RateLimit-Limit, X-RateLimit-Used y X-RateLimit-Units. El plan gratuito permite 1.000 peticiones al mes sin tarjeta de crédito, lo que resulta holgado para un libro que se actualiza al abrir y justo para una cuadrícula volátil de WEBSERVICE. Si estás siempre cerca del techo, la solución casi siempre es agrupar las llamadas en /v1/convert en vez de pasar a un plan de pago. Nuestra guía de caché y manejo de errores cubre los mismos principios fuera de Excel.
Solución de problemas
| Síntoma | Causa | Solución |
|---|---|---|
#VALUE! desde WEBSERVICE | Protocolo no admitido, URL de más de 2.048 caracteres, o una respuesta que supera el límite de 32.767 caracteres por celda | Usa https, acorta la consulta, pide menos pares por llamada |
WEBSERVICE no devuelve nada en un Mac | No se admite fuera del escritorio de Windows | Usa el tipo de datos Divisas o pasa el libro a Windows |
| El botón Divisas aparece atenuado | No estás en Microsoft 365, o la cuenta no es multiinquilino | Revisa tu licencia; Excel perpetuo no tiene tipos de datos vinculados |
#BUSY! o #CONNECT! | El tipo de datos vinculado aún se está resolviendo, o no hay conectividad | Espera y luego Datos → Actualizar todo |
| Power Query: "origen de datos dinámico" al actualizar | Toda la URL concatenada en una sola cadena | Sepárala en RelativePath y Query como se muestra arriba |
#N/A tras actualizar | El código de divisa no está en la respuesta, o los rangos de búsqueda se han desplazado | Envuélvelo en IFNA y usa referencias estructuradas de tabla en lugar de F:F |
401 UNAUTHORIZED | Clave ausente, mal formada, o enviada como cabecera donde se requiere un parámetro de consulta | Confirma qué estilo de autenticación admite el método |
Preguntas frecuentes
¿Puede Excel obtener tipos de cambio en tiempo real? En sentido estricto, no. El tipo de datos Divisas está documentado explícitamente como retardado y sin intervalo publicado, y la mayoría de las API gratuitas publican una vez por día hábil. Lo que sí puedes obtener es un tipo actual: un tipo actualizado bajo demanda desde una fuente en vivo, que es lo que te da una API de divisas. Para FX de verdad a nivel de tick necesitas un feed en streaming, no una hoja de cálculo.
¿Cómo obtengo tipos de cambio en Excel sin una clave de API? El tipo de datos Divisas no necesita clave, pero requiere Microsoft 365 y no te da ni marca de tiempo ni rastro de auditoría. Para cualquier cosa que después tengas que conciliar, una API con clave es la mejor respuesta, y un plan de API de divisas gratuita no cuesta nada.
¿Por qué WEBSERVICE no funciona en Excel para Mac?
La documentación de Microsoft indica que WEBSERVICE depende de características del sistema operativo Windows, por lo que no devuelve resultado en Mac aunque aparezca en la galería de funciones. Lo mismo se aplica a FILTERXML. Los usuarios de Mac deberían usar Power Query cuando sea posible, o el tipo de datos Divisas.
¿Cómo obtengo tipos de cambio históricos en Excel para una fecha concreta?
Construye una tabla de tipos con una fila por fecha, poblada desde una fuente de tipos históricos, y luego haz XLOOKUP contra ella con el modo de coincidencia -1, de modo que los fines de semana y festivos caigan al último día hábil disponible. Nunca revalorices transacciones pasadas al tipo de hoy.
¿Puedo usar Power Query para convertir una tabla de transacciones entera de una vez? Sí, y deberías. Combina tu consulta de transacciones con tu consulta de tipos por el código de divisa, expande la columna del tipo y añade una columna personalizada con el importe convertido. Una sola unión sustituye a decenas de miles de fórmulas volátiles y se actualiza en una única pasada.
¿Qué método debería elegir?
Un par, consulta ocasional: tipo de datos Divisas. Un prototipo en Windows: WEBSERVICE. Cualquier cosa de la que dependan otras personas: Power Query, siempre.
¿Listo para llevar tipos actuales a tu hoja de cálculo como es debido? Consigue tu clave gratuita de la API de Finexly: sin tarjeta de crédito. Obtienes 1.000 peticiones al mes en más de 170 divisas, el parámetro de consulta api_key que hace posible WEBSERVICE, y autenticación por cabecera para Power Query. Consulta la documentación de la API para la referencia completa de endpoints, o compara las API de divisas si todavía estás evaluando opciones.
Explore More
Vlado Grigirov
Senior Currency Markets Analyst & Financial Strategist
Vlado Grigirov is a senior currency markets analyst and financial strategist with over 14 years of experience in foreign exchange markets, cross-border finance, and currency risk management. He has wo...
View full profile →