Cómo consolidar datos de varias hojas en Google Sheets con Apps Script

En este tutorial te voy a mostrar cómo consolidar datos de varias hojas dentro de un mismo archivo de Google Sheets usando Google Apps Script. La idea es juntar la información de ventas de tres países diferentes — Colombia, Ecuador y Perú — en una sola hoja llamada «Consolidada». Esto es súper útil cuando manejas datos distribuidos en varias pestañas y quieres unificar todo para análisis o reportes sin complicarte con fórmulas complejas. Además, con este método podrás fácilmente extenderlo a más países o modificarlo para que se adapte a tus necesidades.

Ahora, vamos a explicar cómo construyo yo este script desde cero, con todo detalle para que puedas replicarlo y adaptarlo.

Paso 1: Configurar la función para copiar una hoja

Lo primero que hago es crear una función que se conecte a una hoja específica, por ejemplo «Colombia», y copie todo el contenido, desde la fila 1 y columna 1 hasta la última fila y columna con datos. Esto lo hago con los métodos getLastRow() y getLastColumn() para detectar dinámicamente el rango con datos. Luego convierto ese rango en un arreglo para manipularlo fácilmente.

function copiarColombia() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var hojaColombia = ss.getSheetByName("Colombia");
  var hojaConsolidada = ss.getSheetByName("Consolidada");
  
  var ultimaFila = hojaColombia.getLastRow();
  var ultimaColumna = hojaColombia.getLastColumn();
  
  var rangoColombia = hojaColombia.getRange(1; 1; ultimaFila; ultimaColumna);
  var datos = rangoColombia.getValues();
  
  hojaConsolidada.getRange(1; 1; ultimaFila; ultimaColumna).setValues(datos);
}

Con esto ya tienes un script que copia todo el contenido de la hoja «Colombia» y lo pega en la hoja «Consolidada». Pero, ¿qué pasa si quieres hacer esto con varios países y no solo uno?

Paso 2: Separar encabezados y datos para evitar duplicados

Para evitar que los encabezados se repitan al copiar varias hojas, separo la copia de los encabezados (la primera fila) de los datos (desde la fila 2 hacia abajo). Primero pego los encabezados solo una vez en la hoja consolidada, y luego voy pegando los datos de cada país uno debajo del otro.

function copiarEncabezado() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var hojaColombia = ss.getSheetByName("Colombia");
  var hojaConsolidada = ss.getSheetByName("Consolidada");
  
  var ultimaColumna = hojaColombia.getLastColumn();
  
  var encabezado = hojaColombia.getRange(1; 1; 1; ultimaColumna).getValues();
  hojaConsolidada.getRange(1; 1; 1; ultimaColumna).setValues(encabezado);
}

Luego, para copiar los datos sin el encabezado, hago que el rango empiece en la fila 2 y que se pegue justo después de la última fila con datos en la hoja consolidada.

function copiarDatosPais(nombrePais) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var hojaPais = ss.getSheetByName(nombrePais);
  var hojaConsolidada = ss.getSheetByName("Consolidada");
  
  var ultimaFilaPais = hojaPais.getLastRow();
  var ultimaColumnaPais = hojaPais.getLastColumn();
  
  // Datos sin encabezado
  var datos = hojaPais.getRange(2; 1; ultimaFilaPais - 1; ultimaColumnaPais).getValues();
  
  var ultimaFilaConsolidada = hojaConsolidada.getLastRow();
  
  // Pegamos los datos justo después de la última fila con datos
  hojaConsolidada.getRange(ultimaFilaConsolidada + 1; 1; datos.length; datos[0].length).setValues(datos);
}

Paso 3: Consolidar varios países con un ciclo

Para automatizar la copia de varios países, defino un arreglo con los nombres de las hojas que quiero consolidar. Luego, hago un ciclo que recorre ese arreglo y llama a la función que copia los datos de cada país.

function consolidarPaises() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var hojaConsolidada = ss.getSheetByName("Consolidada");
  
  // Limpio la hoja consolidada antes de copiar
  hojaConsolidada.clearContents();
  
  // Copio encabezados de Colombia (o cualquier hoja)
  copiarEncabezado();
  
  var paises = ["Colombia"; "Peru"; "Ecuador"];
  
  paises.forEach(function(pais) {
    copiarDatosPais(pais);
  });
}

Así, cada vez que ejecutes consolidarPaises(), se borrará el contenido anterior, se pegarán los encabezados y se copiarán los datos de todos los países listados en el arreglo, uno debajo del otro.

Consejos y posibles mejoras

Este código asume que todas las hojas tienen la misma estructura: mismos encabezados, mismas columnas en el mismo orden. Si alguna hoja tiene columnas adicionales o diferentes, habría que hacer ajustes para manejar esas diferencias.

También puedes modificar el arreglo paises para incluir más países o cambiar el nombre de la hoja destino si quieres consolidar en otra hoja diferente.

Si quieres agregar una columna extra, por ejemplo para indicar la empresa o el país en cada fila, habría que modificar la función que copia los datos para añadir esa información a cada registro antes de pegarlo.

Conclusión

En resumen, vimos cómo crear un script básico para consolidar datos de varias hojas en una sola, separando encabezados y datos para evitar duplicados, y usando un arreglo con un ciclo para automatizar la consolidación de múltiples países. Esta solución es ideal para emprendedores y pequeños negocios que manejan información distribuida y quieren centralizarla fácilmente en Google Sheets sin complicarse con fórmulas avanzadas.

Con este método, podrás ahorrar tiempo y evitar errores manuales al copiar y pegar datos. Además, es muy fácil de adaptar y extender para tus necesidades específicas.

Si quieres aprender a usar Google Forms y Google Sheets desde cero, te invito a tomar un curso gratis de 2 horas.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

JuanSGuzman
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.