Header Ads Widget

Responsive Advertisement

Borrar filas de forma instantánea con script

Automatiza Excel: Cómo Borrar Filas Masivamente (Sin Errores de Memoria)

¿Tienes un archivo de Excel con miles de filas y necesitas borrar solo aquellas que dicen "SIN COBERTURA"? En este tutorial te enseño el script exacto en Office Scripts para hacerlo en segundos y sin que Excel colapse.

📺 Mira el Tutorial Paso a Paso

Si prefieres ver cómo implemento y explico este código, aquí tienes el video completo:




El Problema: Limpieza de Datos Masivos

Imagina que tienes datos en la columna AZ y necesitas eliminar toda la fila si el valor es "SIN COBERTURA". Si usas un filtro normal, a veces Excel se pone lento. La mejor solución es usar Office Scripts (TypeScript) en Excel 365.

⚠️ Atención al "Límite de Carga": Muchos scripts fallan al intentar leer miles de filas y decenas de columnas al mismo tiempo (Error: "El tamaño de la carga ha superado el límite"). El script que te comparto a continuación está optimizado para leer ÚNICAMENTE la columna específica que necesitamos evaluar, evitando que la memoria se sature.

El Script Optimizado (Copia y Pega)

Ve a la pestaña Automatizar > Nuevo Script en tu Excel y pega lo siguiente:

function main(workbook: ExcelScript.Workbook) {
  const sheet = workbook.getActiveWorksheet();
  const usedRange = sheet.getUsedRange();
  
  if (!usedRange) {
    console.log("La hoja está vacía.");
    return;
  }

  // --- CONFIGURACIÓN ---
  const targetColumnIndex = 51; // Columna AZ (Índice 51)
  const targetText = "SIN COBERTURA";

  // Obtenemos dónde empieza la tabla y cuántas filas tiene
  const startRow = usedRange.getRowIndex();
  const rowCount = usedRange.getRowCount();

  // SOLUCIÓN DE MEMORIA: Leemos SOLO la columna AZ
  const columnRange = sheet.getRangeByIndexes(startRow, targetColumnIndex, rowCount, 1);
  const values = columnRange.getValues();

  console.log(`Analizando ${rowCount} filas...`);

  // Iterar de ABAJO hacia ARRIBA (Vital para no saltar filas al borrar)
  for (let i = values.length - 1; i >= 0; i--) {
    
    // Como ahora 'values' solo tiene 1 columna, el índice siempre es 0
    let cellValue = values[i][0]; 
    
    if (String(cellValue).toUpperCase() === targetText) {
      
      let rowToDelete = startRow + i;

      sheet.getRangeByIndexes(rowToDelete, 0, 1, 1)
           .getEntireRow()
           .delete(ExcelScript.DeleteShiftDirection.up);
           
      console.log(`Fila ${rowToDelete + 1} eliminada.`);
    }
  }
  
  console.log("Limpieza finalizada con éxito.");
}

💡 Los 2 secretos de este Script

  1. Iteración Inversa: Recorremos las filas de abajo hacia arriba (i--). Si borras una fila de arriba hacia abajo, las de abajo suben, los índices cambian y el código se saltaría celdas.
  2. Ahorro de Memoria: Al usar getRangeByIndexes limitando la lectura a 1 sola columna, evitamos que Excel se congele tratando de leer cientos de columnas vacías o irrelevantes.

¿Cómo adaptarlo a tu archivo?

  • Para cambiar la columna: Modifica la variable targetColumnIndex. Recuerda que la programación cuenta desde cero (A=0, B=1, C=2... AZ=51).
  • Para cambiar el texto: Modifica lo que está entre comillas en targetText. El código convierte todo a mayúsculas automáticamente para evitar errores si escribes "Sin Cobertura" o "sin cobertura".

¡Espero que este código te ahorre mucho tiempo de trabajo! Si tienes dudas o te gustaría ver más automatizaciones, déjame un comentario.

Publicar un comentario

0 Comentarios