CeMIACE FCE-UBA

Pedile el
código a la IA.

Patrones replicables de automatización para Google Sheets y Excel Online. Ya no hace falta saber programar: hace falta saber qué pedir.

Diego Parras
Cdor. y Lic. Diego Parras
Prof. Asociado Gestión de la IA · FCE-UBA
Primer Embajador n8n de Argentina
graduado@fce-uba ~ pedile-a-la-ia.sh
NO ESCRIBÍS EL CÓDIGO DESCRIBÍS EL PROBLEMA LA IA HACE EL RESTO NO ESCRIBÍS EL CÓDIGO DESCRIBÍS EL PROBLEMA LA IA HACE EL RESTO

Abrilos ahora.

Estos son los dos archivos sobre los que vamos a trabajar en vivo. Abrilos en pestañas separadas antes de que arranquemos así seguís cada ejemplo en tu propia copia.

Tip: en Sheets, hacé Archivo → Hacer una copia para tener tu versión propia donde puedas pegar los scripts sin pisar la de tus compañeros. En Excel, idem con Archivo → Guardar una copia.

Cambió quién escribe el código.

Hace cinco años, automatizar una planilla requería un programador o muchas horas de StackOverflow. Hoy, el profesional de económicas describe lo que necesita y la IA escribe el código. El cuello de botella ya no es técnico: es entender qué pedir.

— ANTES

El programador

"Necesito esto para el martes" → 3 reuniones → cotización → 2 semanas → no era exactamente eso.

  • Aprender VBA, Apps Script o pagar a un dev
  • Iterar por mail, perder contexto entre versiones
  • Quedar dependiente para cada cambio chiquito
  • Tiempos de semanas para tareas de minutos
  • El profesional sabe el problema, no la solución
— AHORA

El profesional + IA

"Necesito esto" → describilo bien → pegalo en ChatGPT/Claude/Gemini → probalo → listo.

  • Reconocés el patrón (UDF, filtro, disparador, API)
  • Pedís en castellano con el contexto que la IA necesita
  • Probás, ajustás, pegás. Sin intermediarios
  • De semanas a 10 minutos por automatización
  • El que entiende el negocio resuelve el negocio

Cuatro pasos. Cero código.

No hay magia. Hay un proceso repetible. Lo aplicás una vez, lo aplicás cien. Lo único que cambia es la descripción de lo que querés.

1

Reconocé el patrón

¿Es una fórmula nueva? ¿Mover datos de una hoja a otra? ¿Algo que se dispare al editar? ¿Conectarse a una API? Cuatro categorías cubren el 95% de los casos.

2

Describilo en castellano

"Quiero que cuando ponga 'Aprobado' en la columna E, se escriba la fecha de hoy en F". Concreto. Con ejemplo. Como se lo dirías a un becario nuevo.

3

Elegí la plataforma

Google Sheets usa Apps Script (JavaScript). Excel Online usa LAMBDA (fórmulas) o Office Script (TypeScript). Decir cuál usás cambia el código.

4

Pedí, probá, pegá

Pegás el prompt en ChatGPT/Claude/Gemini. Copiás el código. Lo pegás en el editor de la planilla. Si rompe, le mostrás el error. Iterás hasta que ande.

Inventá tus
propias fórmulas.

Una UDF (user-defined function) es una fórmula que vos te creás. Una vez cargada, aparece en cualquier celda como si fuera nativa. Es el patrón más rentable: una hora de armado, años de uso.

Cotización en vivo =DOLAR("blue") trae el último valor desde dolarapi.com cada vez que se recalcula.
Validación CUIT/DNI =VALIDARCUIT(B2) aplica el algoritmo del 11 y devuelve VERDADERO/FALSO sin librerías.
Ajuste por inflación =AJUSTARIPC(monto; fecha) trae el coeficiente del INDEC y devuelve el valor ajustado.
Ejemplo A.1
Cotización del dólar en vivo =DOLAR("blue")

Trae la cotización oficial, blue, MEP, CCL, cripto o tarjeta desde dolarapi.com. Se actualiza al recalcular la planilla.

/** * Trae la cotizacion del dolar desde dolarapi.com. * @param {string} tipo - "oficial", "blue", "mep", "ccl", "cripto" o "tarjeta". * @return {number} Precio de venta. * @customfunction */ function DOLAR(tipo) { tipo = (tipo || "blue").toString().toLowerCase(); const url = "https://dolarapi.com/v1/dolares/" + tipo; const respuesta = UrlFetchApp.fetch(url, { muteHttpExceptions: true }); const datos = JSON.parse(respuesta.getContentText()); return datos.venta; }
USO EN LA CELDA =DOLAR("blue") =DOLAR("mep") =DOLAR("oficial")
OJO ACÁ. Excel Online no permite que una función desde celda llame a internet. Las opciones son: (1) Power Query tirando del JSON y refrescando; (2) un Office Script con botón que escribe la cotización en una celda fija. Acá va la opción 2.
/** * Office Script: escribe la cotizacion del dolar blue en B2 de la hoja "Cotizaciones". * Se ejecuta desde un boton o desde Power Automate (programado). */ async function main(workbook: ExcelScript.Workbook) { const respuesta = await fetch("https://dolarapi.com/v1/dolares/blue"); const datos = await respuesta.json(); const hoja = workbook.getWorksheet("Cotizaciones"); hoja.getRange("B2").setValue(datos.venta); hoja.getRange("C2").setValue(new Date().toLocaleString("es-AR")); }
USO Botón "Ejecutar" en la cinta Automatizar
EL PROMPT QUE LE PASÁS A LA IA

"Para Google Sheets / Apps Script, necesito una función personalizada llamada DOLAR(tipo) que reciba un string ('oficial', 'blue', 'mep'…) y devuelva el precio de venta consultando https://dolarapi.com/v1/dolares/{tipo}. Quiero usarla como =DOLAR("blue") en una celda."

Ejemplo A.2
Validar CUIT con algoritmo del 11 =VALIDARCUIT(B2)

Aplica el dígito verificador estándar de AFIP/ARCA. Devuelve VERDADERO/FALSO. Útil para auditar listados antes de importarlos.

/** * Valida un CUIT/CUIL argentino con el digito verificador. * @param {string|number} cuit - CUIT con o sin guiones (11 digitos). * @return {boolean} true si es valido, false si no. * @customfunction */ function VALIDARCUIT(cuit) { const limpio = String(cuit).replace(/[^0-9]/g, ""); if (limpio.length !== 11) return false; const factores = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]; let suma = 0; for (let i = 0; i < 10; i++) { suma += parseInt(limpio[i], 10) * factores[i]; } let resto = 11 - (suma % 11); if (resto === 11) resto = 0; if (resto === 10) return false; return resto === parseInt(limpio[10], 10); }
USO =VALIDARCUIT("20-12345678-3") =VALIDARCUIT(B2)
Excel sí lo resuelve sin código. Como es matemática pura, una LAMBDA guardada en el Administrador de nombres alcanza. Esto es la ventaja del lado Microsoft: para validaciones algorítmicas, fórmulas declarativas.
// Administrador de nombres → Nuevo → Nombre: VALIDARCUIT // Hace referencia a: =LAMBDA(cuit, LET( limpio, SUSTITUIR(SUSTITUIR(cuit;"-";"");" ";""), SI(LARGO(limpio)<>11; FALSO; LET( digitos, --EXTRAE(limpio; SECUENCIA(11); 1), factores, {5;4;3;2;7;6;5;4;3;2;0}, suma, SUMAPRODUCTO(digitos*factores), resto, RESIDUO(11-RESIDUO(suma;11);11), SI(resto=10; FALSO; resto=INDICE(digitos;11)) ) ) ) )
USO =VALIDARCUIT("20-12345678-3") =VALIDARCUIT(B2)
EL PROMPT QUE LE PASÁS A LA IA

"En Excel Online, dame una LAMBDA guardable en el Administrador de nombres llamada VALIDARCUIT(cuit) que aplique el algoritmo del 11 (factores 5,4,3,2,7,6,5,4,3,2) y devuelva VERDADERO/FALSO. Acepta CUIT con o sin guiones. Para Sheets, dame también la versión Apps Script equivalente."

Ejemplo A.3
Ajuste por inflación con tabla IPC =AJUSTARIPC(monto; fecha)

Toma un monto histórico y una fecha, lee el coeficiente desde una tabla IPC en otra hoja, y devuelve el valor ajustado a fecha actual. Patrón clásico para AxI / Justificación Patrimonial.

/** * Ajusta un monto por IPC entre dos fechas. * Requiere una hoja "IPC" con columnas: A=Mes (yyyy-mm) | B=Indice * @param {number} monto - Monto historico. * @param {Date|string} fechaOrigen - Fecha del monto. * @param {Date|string} [fechaDestino] - Fecha objetivo (default: hoy). * @return {number} Monto ajustado. * @customfunction */ function AJUSTARIPC(monto, fechaOrigen, fechaDestino) { const sh = SpreadsheetApp.getActive().getSheetByName("IPC"); const tabla = sh.getRange(2, 1, sh.getLastRow() - 1, 2).getValues(); const claveOrigen = Utilities.formatDate(new Date(fechaOrigen), "GMT-3", "yyyy-MM"); const claveDestino = Utilities.formatDate( new Date(fechaDestino || new Date()), "GMT-3", "yyyy-MM"); const ipcOrig = tabla.find(f => f[0] === claveOrigen)?.[1]; const ipcDest = tabla.find(f => f[0] === claveDestino)?.[1]; if (!ipcOrig || !ipcDest) return "#IPC_NO_DISPONIBLE"; return monto * (ipcDest / ipcOrig); }
USO =AJUSTARIPC(150000; "2023-08-01")
Acá LAMBDA + BUSCARV alcanza y sobra: la lógica es lookup + multiplicación.
// Administrador de nombres → Nombre: AJUSTARIPC // Asume hoja "IPC" con A:B = Mes (yyyy-mm) | Indice =LAMBDA(monto, fechaOrigen, [fechaDestino], LET( fd, SI(ESOMITIDO(fechaDestino); HOY(); fechaDestino), claveOrigen, TEXTO(fechaOrigen; "aaaa-mm"), claveDestino, TEXTO(fd; "aaaa-mm"), ipcOrig, BUSCARV(claveOrigen; IPC!A:B; 2; FALSO), ipcDest, BUSCARV(claveDestino; IPC!A:B; 2; FALSO), monto * (ipcDest / ipcOrig) ) )
USO =AJUSTARIPC(150000; FECHA(2023;8;1))
EL PROMPT QUE LE PASÁS A LA IA

"Necesito una función AJUSTARIPC(monto, fechaOrigen, fechaDestino). La tabla IPC está en una hoja llamada 'IPC' con columnas A=Mes (formato 'yyyy-mm') y B=Indice. Dame la versión Apps Script y la versión LAMBDA para Excel Online. La fecha destino debe ser opcional (default: hoy)."

Mover datos
según una condición.

Tres tareas que todos hacemos a mano y la IA puede automatizar en 5 minutos: copiar filas que cumplen un criterio a otra hoja, detectar duplicados, y conciliar dos listas.

Auditoría de facturas Copiar a la hoja "Revisar" las facturas con monto > $X o con proveedor en lista negra.
Detección de duplicados Marcar en rojo CUITs/DNIs repetidos al cargar un padrón nuevo.
Conciliación bancaria Cruzar movimientos contables vs extracto y listar lo que aparece en uno y no en el otro.
Ejemplo B.1
Copiar facturas grandes a hoja "Auditoría"

Recorre la hoja "Facturas", filtra las que tienen monto > $1.000.000, y las pega en "Auditoría" (limpiando primero lo que había). Ejecutable con un botón.

/** * Copia las facturas con monto > 1.000.000 a la hoja "Auditoria". * Asume que en "Facturas" la columna D (indice 3) es el monto. */ function copiarFacturasGrandes() { const ss = SpreadsheetApp.getActive(); const origen = ss.getSheetByName("Facturas"); const destino = ss.getSheetByName("Auditoria"); const datos = origen.getDataRange().getValues(); const cabecera = datos.shift(); const filtradas = datos.filter(fila => Number(fila[3]) > 1000000); destino.clear(); destino.getRange(1, 1, 1, cabecera.length).setValues([cabecera]); if (filtradas.length > 0) { destino.getRange(2, 1, filtradas.length, cabecera.length) .setValues(filtradas); } SpreadsheetApp.getActive().toast( filtradas.length + " facturas movidas a Auditoria", "OK", 3); }
USO Insertar → Dibujo → Botón → Asignar script "copiarFacturasGrandes"
/** * Office Script equivalente: copia facturas > 1.000.000 a "Auditoria". */ function main(workbook: ExcelScript.Workbook) { const origen = workbook.getWorksheet("Facturas"); const destino = workbook.getWorksheet("Auditoria"); const datos = origen.getUsedRange().getValues(); const cabecera = datos[0]; const filtradas = datos.slice(1) .filter(fila => (fila[3] as number) > 1000000); destino.getUsedRange()?.clear(ExcelScript.ClearApplyTo.contents); destino.getRange("A1") .getResizedRange(0, cabecera.length - 1) .setValues([cabecera]); if (filtradas.length > 0) { destino.getRange("A2") .getResizedRange(filtradas.length - 1, cabecera.length - 1) .setValues(filtradas); } console.log(`${filtradas.length} facturas movidas`); }
USO Cinta Automatizar → Nuevo Office Script → Botón en hoja
EL PROMPT QUE LE PASÁS A LA IA

"Tengo dos hojas: 'Facturas' (con cabecera en fila 1, monto en columna D) y 'Auditoria' (vacía). Necesito un script que copie a 'Auditoria' la cabecera + todas las filas con monto > 1.000.000. Que limpie 'Auditoria' antes. Dame la versión Apps Script para Sheets y la Office Script para Excel Online."

Ejemplo B.2
Marcar duplicados de CUIT en rojo

Recorre la columna B (CUITs), detecta repeticiones y pinta el fondo en rojo. Útil al cargar padrones nuevos antes de procesarlos.

/** * Marca en rojo los CUITs duplicados de la columna B. */ function marcarDuplicadosCUIT() { const sh = SpreadsheetApp.getActive().getActiveSheet(); const ultima = sh.getLastRow(); const rango = sh.getRange(2, 2, ultima - 1, 1); const valores = rango.getValues().map(f => String(f[0]).trim()); const conteo = {}; valores.forEach(v => conteo[v] = (conteo[v] || 0) + 1); const colores = valores.map(v => [conteo[v] > 1 && v !== "" ? "#FFB380" : null] ); rango.setBackgrounds(colores); }
USO Botón "Detectar duplicados"
Acá Excel gana en simpleza: formato condicional con una fórmula. Sin código, sin Office Script. Es uno de esos casos donde pedirle a la IA "dame la fórmula de formato condicional" alcanza.
// 1. Seleccionar el rango B2:B1000 // 2. Inicio → Formato condicional → Nueva regla // 3. "Usar una formula" → pegar: =CONTAR.SI($B$2:$B$1000; B2)>1 // 4. Formato → Relleno naranja → Aceptar
USO Aplica automáticamente. Cero programación.
EL PROMPT QUE LE PASÁS A LA IA

"En Google Sheets quiero un script que recorra la columna B (a partir de la fila 2) y pinte el fondo en naranja claro de los CUITs que aparecen más de una vez. En Excel Online no quiero código: dame la fórmula de formato condicional equivalente."

Que la planilla
reaccione sola.

"Cuando pase X, hacé Y". Así de literal. La planilla queda escuchando y reacciona a ediciones, cambios, horarios, formularios. Es el patrón que más sorprende a la audiencia.

Timestamp automático Cuando ponés "Aprobado" en una columna, otra columna se llena con la fecha y el usuario.
Notificación por mail Cuando se carga una factura nueva > $X, le llega un mail al jefe con el resumen.
Reporte semanal Todos los lunes a las 8am, se manda por mail un PDF con los KPIs de la semana anterior.
Ejemplo C.1
Timestamp + usuario al aprobar

Cuando alguien escribe "Aprobado" en la columna E, la columna F se completa automáticamente con la fecha y la columna G con el usuario que lo hizo. Sin botones, sin clicks extra.

/** * Disparador onEdit: cuando se edita columna E con "Aprobado", * llena F con fecha actual y G con email del usuario. * NO requiere instalacion: Apps Script lo detecta automaticamente * por el nombre de la funcion (onEdit). */ function onEdit(e) { if (!e || !e.range) return; const col = e.range.getColumn(); const fila = e.range.getRow(); if (col !== 5) return; // solo columna E if (fila === 1) return; // saltar cabecera if (e.value !== "Aprobado") return; const hoja = e.range.getSheet(); hoja.getRange(fila, 6).setValue(new Date()); hoja.getRange(fila, 7).setValue(Session.getActiveUser().getEmail()); }
CARGAR EN Extensiones → Apps Script → Pegar → Guardar
Asimetría grande: Office Scripts no tiene onEdit nativo. Se resuelve con Power Automate: trigger "Cuando se modifica una fila en Excel" → acción "Run Script" pasando los datos. Funciona, pero es un combo de dos productos.
/** * Office Script: completa fecha y usuario en la fila pasada como parametro. * Power Automate lo invoca cuando detecta una modificacion. */ function main( workbook: ExcelScript.Workbook, fila: number, estado: string, usuario: string ) { if (estado !== "Aprobado") return; const hoja = workbook.getWorksheet("Facturas"); hoja.getCell(fila - 1, 5).setValue(new Date().toISOString()); hoja.getCell(fila - 1, 6).setValue(usuario); } // En Power Automate: // Trigger: "When a row is modified" (Excel Online) // Action: "Run script" (este, pasando fila + estado + usuario)
EL PROMPT QUE LE PASÁS A LA IA

"En Google Sheets, dame un disparador onEdit que: si se edita la columna E (excepto fila 1) y el valor escrito es exactamente 'Aprobado', llene la celda F de esa fila con la fecha actual y la G con el email del usuario. Para Excel Online, explicame la arquitectura equivalente con Power Automate + Office Script."

Ejemplo C.2
Email automático al aprobar una factura

Cuando se aprueba una factura > $500.000, le llega un mail al jefe con número, proveedor y monto. Útil para alertas de límites de aprobación.

/** * Cuando se aprueba una factura > 500.000, manda mail al jefe. * Asume columnas: A=NumeroFactura | B=Proveedor | C=Monto | E=Estado */ function onEdit(e) { if (!e || e.range.getColumn() !== 5) return; if (e.value !== "Aprobado") return; const fila = e.range.getRow(); const hoja = e.range.getSheet(); const [numero, proveedor, monto] = hoja.getRange(fila, 1, 1, 3).getValues()[0]; if (Number(monto) <= 500000) return; GmailApp.sendEmail( "jefe@empresa.com.ar", `[ALERTA] Factura aprobada > $500K · #${numero}`, `Factura aprobada que supera el limite:\n\n` + ` Numero: ${numero}\n` + ` Proveedor: ${proveedor}\n` + ` Monto: $ ${Number(monto).toLocaleString("es-AR")}\n\n` + `Aprobado por: ${Session.getActiveUser().getEmail()}` ); }
En Excel Online el flujo natural es Power Automate con conector Outlook. Lo lindo es que el conector ya está autenticado: no hay claves API. Office Script no manda mails directamente, pero retorna datos al flow que sí los manda.
// Office Script: devuelve los datos de la factura al flow. function main( workbook: ExcelScript.Workbook, fila: number ): { numero: string; proveedor: string; monto: number; supera: boolean } { const hoja = workbook.getWorksheet("Facturas"); const valores = hoja.getRangeByIndexes(fila - 1, 0, 1, 5).getValues()[0]; const monto = Number(valores[2]); return { numero: String(valores[0]), proveedor: String(valores[1]), monto: monto, supera: monto > 500000 }; } // En Power Automate: // 1) Trigger: "When a row is modified" (Excel) // 2) Condicion: si Estado = "Aprobado" // 3) Action: "Run script" (este de arriba) // 4) Condicion: si supera = true // 5) Action: "Send an email" (Outlook) con el body armado
EL PROMPT QUE LE PASÁS A LA IA

"En Sheets necesito que cuando alguien marque 'Aprobado' en la columna E de una factura cuyo monto (col C) supera $500.000, se mande un mail a jefe@empresa.com.ar con el número (col A), proveedor (col B), monto y email del aprobador. Usá GmailApp.sendEmail. Para Excel Online, dame el plan en Power Automate con un Office Script que devuelva los datos."

La planilla
se conecta al mundo.

Cualquier dato público con una URL JSON puede entrar a tu planilla. BCRA, INDEC, ARCA, dolarapi, MercadoLibre, OpenWeather… Si tiene endpoint, tenés función.

Tipos de cambio BCRA Dólar mayorista oficial diario, sin tener que entrar a la web del BCRA cada mañana.
IPC INDEC Último índice publicado, para alimentar tu tabla de coeficientes de ajuste.
Padrón ARCA Buscar nombre, condición de IVA y domicilio fiscal a partir de un CUIT.
Ejemplo D.1
Tipo de cambio del BCRA =BCRA("USD")

Trae el último valor publicado por la API del Banco Central para una moneda dada. Útil para revaluar saldos en moneda extranjera.

/** * Trae el ultimo valor de cierre del BCRA para una moneda. * @param {string} moneda - Codigo: "USD", "EUR", "BRL", etc. * @return {number} Valor de cierre. * @customfunction */ function BCRA(moneda) { const codigo = (moneda || "USD").toString().toUpperCase(); const url = "https://api.bcra.gob.ar/estadisticascambiarias/v1.0/" + "Cotizaciones/" + codigo; const opciones = { muteHttpExceptions: true, validateHttpsCertificates: false }; const respuesta = UrlFetchApp.fetch(url, opciones); const datos = JSON.parse(respuesta.getContentText()); // La API devuelve un array de detalles; tomamos el "Tipo Cotizador" const detalle = datos.results?.[0]?.detalle?.[0]; return detalle?.tipoCotizacion || "#SIN_DATO"; }
USO =BCRA("USD") =BCRA("EUR")
El camino canónico en Excel para datos externos no es Office Script: es Power Query. Una vez configurado, refrescás con un click. Acá va el código M (lo pegás en Editor avanzado de Power Query).
// Datos → Obtener datos → Desde otras fuentes → Consulta en blanco // → Editor avanzado → pegar: let Origen = Json.Document( Web.Contents("https://api.bcra.gob.ar/estadisticascambiarias/v1.0/Cotizaciones/USD") ), Resultados = Origen[results], Primero = Resultados{0}, Detalle = Primero[detalle]{0}, Cotizacion = Detalle[tipoCotizacion] in Cotizacion // Despues: Inicio → Cerrar y cargar → A tabla en una hoja // Refrescar: Datos → Actualizar todo
EL PROMPT QUE LE PASÁS A LA IA

"Necesito traer la cotización oficial del BCRA. La API es https://api.bcra.gob.ar/estadisticascambiarias/v1.0/Cotizaciones/{moneda}. Dame: (1) una función personalizada de Apps Script que se use como =BCRA("USD"), y (2) la consulta Power Query equivalente para Excel."

Ejemplo D.2
Buscar razón social por CUIT en padrón =PADRON(B2)

Dado un CUIT, devuelve la razón social, condición frente al IVA y domicilio fiscal. Patrón clave para chequear proveedores antes de cargar facturas.

Nota: ARCA no tiene API pública abierta para padrón por CUIT (requiere autenticación con WSAA). Como atajo se suele usar un servicio público de terceros como cuitonline o un padrón propio (CSV de A13). Acá usamos un endpoint genérico de tercero para mostrar el patrón; en producción conviene autenticar con ARCA o usar A13 cargado en Sheets.
/** * Busca razon social por CUIT (atajo: servicio publico de terceros). * @param {string|number} cuit - CUIT con o sin guiones. * @return {string} Razon social, o "" si no encontrado. * @customfunction */ function PADRON(cuit) { const limpio = String(cuit).replace(/[^0-9]/g, ""); if (limpio.length !== 11) return "#CUIT_INVALIDO"; const cache = CacheService.getScriptCache(); const cacheado = cache.get(limpio); if (cacheado) return cacheado; const url = "https://api.cuitonline.com/search.php?q=" + limpio; const respuesta = UrlFetchApp.fetch(url, { muteHttpExceptions: true }); const datos = JSON.parse(respuesta.getContentText()); const razon = datos?.results?.[0]?.label || ""; cache.put(limpio, razon, 21600); // 6hs de cache return razon; }
USO =PADRON("30-12345678-9")
// Power Query con parametro: // 1) Crear celda con CUIT, definirla como tabla "tCUIT" con valor. // 2) Editor avanzado: let cuit = Text.Select(tCUIT{0}[CUIT], {"0".."9"}), Origen = Json.Document( Web.Contents("https://api.cuitonline.com/search.php?q=" & cuit) ), Resultados = Origen[results], Primero = if List.Count(Resultados) > 0 then Resultados{0} else null, Razon = if Primero <> null then Primero[label] else "" in Razon
EL PROMPT QUE LE PASÁS A LA IA

"Necesito una función =PADRON(cuit) en Sheets que devuelva la razón social. Aclaración: ARCA no expone API pública sin auth, así que vamos a usar un servicio de terceros tipo cuitonline. Agregá cache de 6hs para no pegarle a la API cada recálculo. Validá que el CUIT tenga 11 dígitos. Después dame la versión Power Query con parámetro."

Armá tu prompt en 30 segundos.

Elegí la plataforma, el tipo de patrón y describí qué querés. El sitio te arma el prompt completo con todo el contexto técnico que la IA necesita. Después lo copiás y lo pegás en ChatGPT, Claude o Gemini. Listo.

Describí tu problema

Como se lo dirías a un becario nuevo. Concreto. Con ejemplos.

// Tu prompt listo
PLANTILLA UNIVERSAL

La estructura que la IA agradece

Cuando vayas a pedir cualquier automatización fuera de este sitio, esta es la receta de prompt que mejor anda. Cinco bloques fijos: contexto, plataforma, qué hace, ejemplo concreto, restricciones.

[CONTEXTO] Soy contador y trabajo con una planilla de {describir brevemente el contexto del negocio}. [PLATAFORMA] Google Sheets · Apps Script (o "Excel Online · LAMBDA" / "Excel Online · Office Script" / "Excel + Power Query") [QUE NECESITO] {describir el comportamiento esperado en una o dos oraciones} [ESTRUCTURA DE LA PLANILLA] Hoja "{nombre}": columnas A=…, B=…, C=…. Cabecera en fila 1. // repetir por cada hoja relevante [EJEMPLO CONCRETO] Si en la celda {X} hay {valor}, el resultado debe ser {Y}. [RESTRICCIONES] - Funcion personalizada usable como =NOMBRE(args) (si aplica) - Sin librerias externas - Comentarios explicando cada paso - Manejo de errores (devolver "" o "#ERROR" si falta data) - Compatible con cuentas gratuitas [QUE TE PIDO] 1. El codigo completo, listo para pegar. 2. Donde pegarlo (Extensiones → Apps Script / Administrador de nombres / etc.). 3. Como probarlo con un caso concreto.

Lo que rompe la primera vez.

Tres errores que todo el mundo comete al pedirle código a la IA. Sabiéndolos de antemano, te ahorrás dos horas de frustración.

1. No decirle qué plataforma es

"Hacé una función que valide CUIT" no alcanza. Apps Script y LAMBDA son lenguajes distintos. Si no aclarás, te puede dar VBA (que ya no anda en Excel Online).

2. No describir la estructura

La IA no sabe que tu monto está en la columna D. Decile siempre las columnas: "A=Cliente, B=CUIT, C=Monto…". Si no, asume cualquier cosa.

3. Confundir UDF con disparador

Las funciones personalizadas =MIFUNCION() no pueden modificar otras celdas ni mandar mails. Para eso necesitás un onEdit o un botón. Aclará bien qué tipo querés.

Para seguir desde el lunes.

LA FRASE PARA LLEVARNOS

El profesional moderno
no programa.
Prompt-ea.

— Diego Parras

↗ LINKEDIN ↗ INSTAGRAM ⚡ ARMAR UN PROMPT