Impresionado con lo poco que sé, después de horas tratando de averiguarlo, tengo que recurrir a ti.
Estoy pensando que el proceso debería ser el siguiente: definir palabras clave en una matriz; Iterar sobre el rango; A medida que se encuentra la palabra clave, comienza a contar hasta que se encuentra la siguiente palabra clave; Contador se convierte en el número de filas para esa categoría; Comienza de nuevo con la siguiente palabra clave encontrada.
Empecé a escribirlo, pero no puedo ver múltiples bucles for aquí y me pregunto de qué otra forma sería:
function formatCells() { //Utilities.sleep(3000); //Formats Categories and cell colors const ss = SpreadsheetApp.getActiveSpreadsheet(); const boqPipeworkSheet = ss.getSheetByName('BOQ Pipework'); const boqPipeworkRng = boqPipeworkSheet.getRange(5, 1, boqPipeworkSheet.getLastRow(), 14); const boqPipeworkValues = boqPipeworkRng.getValues(); let categoryToPaste = []; let categories = ['Copper pipework']; let counter = 0; for (let r = 0; r < boqPipeworkRng.length; r++) { let category = boqPipeworkRng[r][0]; if (categories.indexOf(category) > -1) { categoryToPaste.push(category); counter++ } } }Aquí hay un enlace a un archivo que contiene un ejemplo: https://docs.google.com/spreadsheets/d/138TD3eJU6GQtRj3uxXBJicn7pZyeXvAqU8lNcU01BDw/edit?usp=sharing
¡Gracias!
Una solución es usar fórmula.
Para Categorías, en F3
={"Category";ArrayFormula(lookup(row(A4:A),row(A4:A)/--REGEXMATCH(B4:B,"^[ ]{2}[AZ].*"),B4:B))}Para Subcategorías, en G3
={"Subcategory";ArrayFormula(if(REGEXMATCH(B4:B,"^[ ]{2}[AZ].*"),"",lookup(row(A4:A),row(A4:A)/--REGEXMATCH(B4:B,"^[ ]{4}[AZ].*"),B4:B)))}