Объединение ячеек с одинаковым значением

Имею таблицу вида

Дата Действие
31.05.22 вверх
31.05.22 низ
31.05.22 низ
01.06.22 низ
01.06.22 вверх
01.06.22 низ

Подскажите пожалуйста. Как сделать что бы ячейки с одинаковой датой объединялись в одну ячейку, а данные из второго столбца были не изменны


Ответы (1 шт):

Автор решения: contributorpw

Можно попробовать в первом приближении что-то такое:

function run() {
  const book = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = book.getSheetByName('Решение');
  sheet.getRange('A:A').breakApart();
  const values = sheet.getDataRange().getValues();
  let buffer = { start: 0, value: String(values[0][0]) };
  values.forEach((row, i, arr) => {
    const cell = row[0] === '' ? buffer.value : String(row[0]);
    if ((buffer.value !== cell || i == arr.length - 1) && buffer.start !== i) {
      let lrx = 0;
      if (i == arr.length - 1) lrx = 1;
      if (i == arr.length - 1 && buffer.value !== cell) lrx = 0;
      sheet.getRange(buffer.start + 1, 1, i - buffer.start + lrx).merge();
      buffer.start = i;
      buffer.value = cell;
    }
  });
}

К сожалению, с пустыми ячейками в обхединении такое работать не будет, т.е. нужно либо предзаполнять данные, либо обрабатывать breakApart через внешнее хранение.

Пример в Таблице https://docs.google.com/spreadsheets/d/1SPtNpvRKbGNnHzkOEN_APXrErTNJsCQLsLNTrCfveUI/edit?usp=sharing

введите сюда описание изображения

→ Ссылка