Hojas de cálculo en el trabajo

¿Qué es GAS (Google Apps Script)?
Guía para automatizar Hojas de cálculo de Google

Dejar cada semana una tabla con la misma forma. Borrar las filas vacías de los datos pegados. Marcar las filas que cumplen una condición. Las hojas de cálculo están llenas de tareas con pasos fijos.

GAS (Google Apps Script) es lo que hace estas tareas de forma automática. Este artículo explica qué puede hacer GAS, por dónde empezar y cómo pasar las pantallas de «autorización» en las que se atasca mucha gente la primera vez.

¿Qué es GAS?

GAS es la forma que ofrece Google de ejecutar programas. Usa la misma sintaxis que JavaScript y maneja Hojas de cálculo de Google y también Gmail, Google Calendar, Google Drive y Formularios de Google.

Solo necesitas una cuenta de Google. Es gratis y no hay que instalar nada: abre una hoja en el navegador y empieza a escribir. El programa se ejecuta en los servidores de Google, no en tu ordenador.

Macros grabadas y GAS

Hojas de cálculo de Google tiene «macros» que graban lo que haces para repetirlo cuantas veces quieras. Empieza a grabar con «Extensiones» → «Macros» → «Grabar macro», selecciona y escribe en celdas, y tus acciones se guardan como código GAS.

Grabación: escribir «test» en B2 y ponerlo en negrita
/** @OnlyCurrentDoc */

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('B2').activate();
  spreadsheet.getCurrentCell().setValue('test');
  spreadsheet.getActiveRangeList().setFontWeight('bold');
};

Es decir, una macro es GAS por dentro. Aunque le pongas un nombre como «Prueba negrita», la función del código se llama myFunction. El nombre del menú y el de la función se guardan por separado.

Al grabar, eliges en la barra inferior «Usar referencias absolutas» o «Usar referencias relativas». Las absolutas se guardan como direcciones (B2), así que la macro escribe siempre en el mismo sitio, sea cual sea la celda seleccionada. Las relativas se guardan como «una fila debajo de la celda actual» y parten de la celda seleccionada.

Solo con grabar no se pueden manejar tablas de longitud variable ni pasos con condiciones. A partir de ahí, se lee el código grabado y se completa.

Qué se puede hacer con GAS

  • Borrar las filas vacías de datos pegados y dar formato a los encabezados
  • Revisar importes o fechas y escribir «Grande» o «Vencido» en una columna
  • Añadir un menú propio a la hoja y lanzar procesos como con un botón
  • Crear funciones propias para usar en celdas (funciones personalizadas)
  • Enviar correos con Gmail a partir de una tabla
  • Ejecutar una tarea a una hora fija, por ejemplo cada mañana a las 8 (activadores)
  • Copiar a otra hoja las respuestas de Formularios de Google en cuanto llegan

A mano, cada una de estas tareas lleva de unos minutos a decenas de minutos. Escrita una vez, después basta con pulsar un menú, o se ejecuta sola.

Cómo empezar con GAS

  1. Abrir la hoja y elegir «Extensiones» → «Apps Script»
  2. El editor se abre en una pestaña nueva: «Código.gs» a la izquierda y function myFunction() { } a la derecha
  3. Escribir el código dentro de { } y guardar (Ctrl+S, en Mac ⌘+S)
  4. Pulsar «▷ Ejecutar» arriba. El resultado aparece abajo, en el «Registro de ejecución»
Primer script: leer A1, mostrarlo en el registro y escribir en B1
function myFunction() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const value = sheet.getRange('A1').getValue();
  Logger.log(value);
  sheet.getRange('B1').setValue('Comprobado');
}

Logger.log escribe un valor en el registro de ejecución. Los números aparecen con punto decimal, por ejemplo 120.0 (console.log muestra 120). Si algo no funciona como esperas, revisa primero los valores en el registro.

Las pantallas de autorización en la primera ejecución

La primera vez que ejecutas tu código aparece una pantalla que pregunta si el script puede leer y editar tu hoja. Mucha gente se queda aquí, así que vamos paso a paso.

  1. «Se necesita autorización» → Revisar permisos / Aceptar
  2. Elegir una cuenta
  3. «Google no ha verificado esta aplicación» → «Configuración avanzada» abajo a la izquierda
  4. «Ir a (nombre del proyecto) (no seguro)»
  5. Revisar lo que permites y pulsar «Permitir» (si hay elementos que marcar, márcalos y pulsa «Continuar»)

«Google no ha verificado esta aplicación» es un aviso para scripts que Google no ha revisado. Tus propios scripts y las macros que grabas no están revisados, así que esta pantalla aparece siempre. Si lo has hecho tú, puedes continuar sin problema.

En cambio, si aparece en una hoja que te pasó alguien que no conoces, elige «Volver a seguridad». Una vez permitido, el script puede actuar sobre tus hojas y tu correo con tu cuenta.

Si pones /** @OnlyCurrentDoc */ al principio del código, el script solo puede tocar «esta hoja» y los permisos que se piden son más limitados. Las macros grabadas lo llevan desde el principio.

Puedes seguir los mismos pasos en la misión 1 de la práctica.

Código habitual

Esto es lo que más se usa al trabajar con una hoja. Los números de fila y columna empiezan en 1, y los índices de una matriz leída con getValues, en 0.

CódigoSignificado
const sheet = SpreadsheetApp.getActiveSheet();La hoja abierta ahora
sheet.getRange('A1').getValue()Leer el valor de A1
sheet.getRange('A1').setValue('Completado')Escribir en A1
sheet.getRange(2, 3)Fila 2, columna 3 (C2). Las columnas se pueden indicar con números
sheet.getRange('A2:C10').getValues()Leer un rango de una vez (matriz bidimensional)
sheet.getRange(2, 1, 9, 3).setValues(values)Escribir de una vez (filas y columnas iguales a la matriz)
sheet.getLastRow()Número de la última fila con valor
sheet.appendRow(['10/31', 'sato', 5000])Añadir una fila debajo de la última
sheet.deleteRow(5)Borrar la fila 5 (las de debajo suben)
sheet.getRange('A1:D1').setFontWeight('bold')Poner en negrita
sheet.getRange('A1:D1').setBackground('#fff2cc')Poner color de fondo
Logger.log(value)Escribir en el registro de ejecución (para revisar valores)
Recorrer todas las filas y distinguir según una condición
function judgeTargets() {
  const sheet = SpreadsheetApp.getActiveSheet();
  for (let row = 2; row <= sheet.getLastRow(); row++) {
    const sales = sheet.getRange(row, 2).getValue();
    const target = sheet.getRange(row, 3).getValue();
    if (sales >= target) {
      sheet.getRange(row, 4).setValue('Logrado');
    } else {
      sheet.getRange(row, 4).setValue('No logrado');
    }
  }
}
Añadir un menú propio al abrir (onOpen)
function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('Cierre mensual')
    .addItem('Marcar ventas grandes', 'markLarge')
    .addToUi();
}

Una función llamada onOpen se ejecuta automáticamente al abrir la hoja. Si la ejecutas con «▷ Ejecutar» en el editor aparece el error Cannot call SpreadsheetApp.getUi() from this context., así que guarda y vuelve a abrir la hoja para comprobarlo.

Enviar correos y programar con activadores

Lo que más se busca sobre GAS es el envío de correos y los activadores.

Enviar correos a las direcciones de una tabla
function sendReminders() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const rows = sheet.getRange(2, 1, sheet.getLastRow() - 1, 2).getValues();
  rows.forEach(([name, email]) => {
    MailApp.sendEmail(email, 'Aviso de fecha límite', name + ',\n\nLa fecha límite es este viernes.');
  });
}

Hay un límite de envíos: una cuenta gratuita de Google puede enviar hasta 100 correos al día (las cuentas de Google Workspace, más). Cada ejecución dura como máximo 6 minutos; si se pasa, se detiene con «Exceeded maximum execution time».

Para programarlo, pulsa a la izquierda del editor «Activadores» (icono de reloj) → «Añadir activador» y elige la función y «Según tiempo». Puedes fijar una franja horaria cada día, semana o mes.

Los correos se envían de verdad aunque solo estés probando. Prueba primero con una tabla que solo tenga tu propia dirección.

Diferencias con VBA de Excel

GASVBA de Excel
CódigoJavaScriptVBA(Visual Basic)
Dónde se ejecutaServidores de GoogleExcel en tu propio ordenador
Qué necesitasUn navegador y una cuenta de GoogleLa versión de escritorio de Excel (sobre todo en Windows)
Se conecta conGmail, Calendar, Drive, FormulariosWord, Outlook, archivos del ordenador
Ejecutar a una hora fijaCon activadores (funciona aunque el ordenador esté apagado)Combinado con el Programador de tareas de Windows u otro similar

Las ideas son las mismas en ambos: leer celdas, escribir, repetir y distinguir según condiciones. Si sabes uno, puedes leer el otro. Las macros de Excel están en nuestra introducción a las macros de Excel.

Practicar en el navegador

En la simulación de macros y GAS de este sitio practicas ejecutando código real en una hoja y un editor de Apps Script virtuales. Rellenas huecos en el código y, en el móvil, eliges cada hueco entre cuatro opciones.

  1. Capítulo 1 Grabar y ejecutar macros

    Ejecutar una macro grabada y grabar una propia. Referencias absolutas y relativas, cómo leer y corregir el código grabado.

  2. Capítulo 2 Leer, repetir, distinguir

    Leer celdas con getValue, escribir con setValue y revisar valores en el registro de ejecución. Recorrer todas las filas con for y distinguir con if.

  3. Capítulo 3 Caso práctico: ordenar la tabla de ventas mensual

    Borrar filas vacías, marcar de una vez las ventas grandes y lanzarlo desde un menú propio. Por último, una función propia para las celdas.

Empezar la simulación (13 misiones) →

Cómo aprender GAS

Un buen comienzo es «Grabar macro» en una de tus hojas y leer el código que sale. Así se ve mejor qué hace cada instrucción.

La IA generativa también escribe código. Pero para saber si está bien y dónde corregirlo, tienes que poder leer al menos el «código habitual» de este artículo.

* Los nombres de pantalla y los límites son de octubre de 2026 y pueden cambiar con las novedades de Google.

* Hojas de cálculo de Google es una marca de Google LLC. Este sitio no está afiliado a Google.