En este tutorial vamos a aprender a replicar en Google Sheets una función muy útil que existe en Excel pero que no está disponible de forma nativa en Sheets: sumar el valor de la misma celda a través de varias hojas. Esto es especialmente útil cuando manejamos libros con muchas pestañas y queremos un total rápido sin tener que escribir fórmulas complicadas para cada hoja. Además, te mostraré cómo crear una función personalizada con Google Apps Script para automatizar este proceso y algunos trucos para que funcione bien en Sheets.
Ahora, vamos a construir juntos esta función personalizada para sumar el mismo rango en todas las hojas de un libro de Google Sheets.
¿Qué hace la función personalizada SumaHojas?
En Excel, existe una función que permite sumar el valor de la misma celda entre varias hojas consecutivas, algo así como =SUMA(Hoja1:Hoja3!C3). En Google Sheets, esta función no existe por defecto, pero podemos replicarla creando una función personalizada con Google Apps Script que haga lo siguiente:
- Recibir como argumento la dirección de la celda que queremos sumar (por ejemplo, «C3»).
- Recorrer todas las hojas del libro.
- Tomar el valor de la celda indicada en cada hoja.
- Sumar todos esos valores y devolver el total.
Paso 1: Crear la función personalizada en Google Apps Script
Para empezar, abrimos el editor de Google Apps Script desde nuestro Google Sheets (Extensiones > Apps Script) y creamos la función llamada SumaHojas. Esta función recibirá como parámetro la dirección de la celda que queremos sumar en todas las hojas.
/**
* Función personalizada que suma el valor de una celda específica en todas las hojas del libro.
* @param {string} direccion - La dirección de la celda a sumar, por ejemplo "C3".
* @return {number} La suma de todos los valores en esa celda a través de las hojas.
* @customfunction
*/
function SumaHojas(direccion) {
var libro = SpreadsheetApp.getActiveSpreadsheet();
var hojas = libro.getSheets();
var suma = 0;
for (var i = 0; i < hojas.length; i++) {
var hoja = hojas[i];
var valor = hoja.getRange(direccion).getValue();
suma += Number(valor) || 0;
}
return suma;
}
Esta función hace lo siguiente:
- Obtiene el libro activo con
getActiveSpreadsheet(). - Obtiene todas las hojas con
getSheets(). - Inicializa una variable suma en cero.
- Recorre cada hoja, lee el valor de la celda indicada y lo suma a la variable
suma. - Devuelve el total sumado.
Paso 2: Probar la función en Google Sheets
Después de guardar el script, volvemos a la hoja y escribimos en cualquier celda:
=SumaHojas("C3")
Esto sumará el valor de la celda C3 en todas las hojas del libro. Recuerda que el parámetro debe ir entre comillas porque es un texto que indica la dirección de la celda.
Limitaciones y trucos para la actualización automática
Una limitación de esta función personalizada es que Google Sheets no detecta automáticamente cuando cambian los valores en las hojas para recalcular la función. Esto significa que si cambias un valor en alguna hoja, la suma no se actualizará hasta que vuelvas a editar la fórmula o recargues la hoja.
Para solucionar esto, podemos crear un script adicional que se ejecute cada vez que se abra el archivo y que fuerce a Sheets a «refrescar» las fórmulas. Lo que hace este truco es buscar todas las fórmulas que comienzan con «=» y las reemplaza temporalmente por un texto aleatorio, luego las vuelve a poner con el signo igual, forzando así la actualización.
function onOpen() {
var libro = SpreadsheetApp.getActiveSpreadsheet();
var hojas = libro.getSheets();
var ss = SpreadsheetApp.getActiveSpreadsheet();
// Crear un identificador temporal aleatorio
var temporal = Utilities.getUuid();
// Buscar todas las fórmulas que empiezan con "=" y reemplazarlas por el texto temporal
var busqueda = ss.createTextFinder("=").matchFormulaText(true).findAll();
busqueda.forEach(function(celda) {
var valor = celda.getFormula();
celda.setFormula(""); // quitar fórmula primero
celda.setValue(temporal); // poner texto temporal
});
// Esperar un momento para que Sheets registre el cambio
Utilities.sleep(1000);
// Reemplazar el texto temporal por el signo "=" para restaurar las fórmulas
busqueda.forEach(function(celda) {
var formulaOriginal = celda.getFormula();
// No hay forma directa de recuperar la fórmula original, así que mejor recargar el archivo manualmente
});
}
Este script es un ejemplo básico y puede mejorarse para que reemplace correctamente las fórmulas, pero la idea principal es hacer que Sheets «vuelva a leer» las fórmulas para actualizar los resultados. También puedes ejecutarlo manualmente o adaptarlo para que corra en un onEdit, aunque eso puede ralentizar tu hoja si tienes muchas fórmulas.
Paso 3: Excluir hojas específicas de la suma
En Excel puedes sumar desde una hoja inicial hasta una hoja final, pero en esta función personalizada podemos agregar un segundo parámetro opcional para excluir ciertas hojas de la suma. Por ejemplo, si tienes una hoja llamada «Suma» donde quieres mostrar el total, no quieres incluir esa hoja en la suma.
/**
* Función personalizada que suma el valor de una celda específica en todas las hojas del libro,
* excluyendo hasta tres hojas indicadas.
* @param {string} direccion - La dirección de la celda a sumar, por ejemplo "C3".
* @param {string} [excluir1] - Nombre de la primera hoja a excluir (opcional).
* @param {string} [excluir2] - Nombre de la segunda hoja a excluir (opcional).
* @param {string} [excluir3] - Nombre de la tercera hoja a excluir (opcional).
* @return {number} La suma de todos los valores en esa celda a través de las hojas, excluyendo las indicadas.
* @customfunction
*/
function SumaHojas(direccion, excluir1, excluir2, excluir3) {
var libro = SpreadsheetApp.getActiveSpreadsheet();
var hojas = libro.getSheets();
var suma = 0;
for (var i = 0; i < hojas.length; i++) {
var hoja = hojas[i];
var nombreHoja = hoja.getName();
if (nombreHoja !== excluir1 && nombreHoja !== excluir2 && nombreHoja !== excluir3) {
var valor = hoja.getRange(direccion).getValue();
suma += Number(valor) || 0;
}
}
return suma;
}
Así, si quieres sumar la celda C3 en todas las hojas excepto en «Suma» y «Hoja2», usarías:
=SumaHojas("C3"; "Suma"; "Hoja2")
Conclusión
En este tutorial aprendimos a replicar en Google Sheets la función de Excel que suma el valor de la misma celda en varias hojas con una función personalizada creada en Apps Script. Vimos cómo:
- Crear la función SumaHojas que recibe la dirección de la celda y suma ese valor en todas las hojas.
- Agregar argumentos opcionales para excluir hojas específicas de la suma.
- Entender las limitaciones de actualización automática en Sheets y un truco para forzar la recalculación usando un script onOpen.
Este método es muy útil para manejar libros con muchas hojas y obtener totales rápidos sin escribir fórmulas largas o manuales. Como próximo paso, te recomiendo explorar más funciones personalizadas con Apps Script y cómo automatizar tareas repetitivas en Google Sheets.
Si quieres aprender a usar Google Forms y Google Sheets desde cero, te invito a tomar un curso gratis de 2 horas.