Я не знаю формул, но могу написать сценарий, поэтому я и сделал. Этот код читает левые столбцы, а затем записывает правые столбцы. Если форматирование листа изменится, потребуются изменения в коде. Скопируйте / вставьте эту функцию в скрипт и запустите функцию test
. Если это работает, можно запустить из пользовательского меню вместо использования формулы. Если это не сработает, вставьте сюда ошибку, и я попробую отладить.
function test() {
var sheet = SpreadsheetApp.getActiveSheet();
// 5th row to start, 1st col to start, sheet.getLastRow()-4 is the num of rows to read, 3 cols to read
// [ row, row ... ]
var left = sheet.getRange(5, 1, sheet.getLastRow() - 4, 3).getValues();
// filter empty rows
left = left.filter(function(row) {
return row.every(function(el) {
return el != '';
});
});
// hold rows to insert
// will be [ row, row... ]
var right = [];
// for each row create row to insert right
left.forEach(function(row) {
var item = row[0];
var colors = row[1].split(',');
var price = row[2];
colors.forEach(function(c) {
// create row, [item, color, price]
right.push([item, c, price]);
});
});
// insert rows to right
// 5th row to start, 5th col to start, right.length is the num of rows to insert, 3 cols to write
sheet.getRange(5, 5, right.length, 3).setValues(right);
}