見出し画像

【GAS】Google Apps Script 活用事例 行を追加したら、隣接する行のセル結合を自動化するスクリプト


1枚のシートに2つの表って生産性が下がると思うんだが….

実務では、セルが結合されたシートの更新を依頼されるケースが多々あります。フィルター使えないし、見栄え悪いし、自動化しづらいし、百害あって一理なしと思っているのですが仕方ないか…..。

なぜ、このような更新するのに不都合な仕様になっているかというと、この表の上に別の表があるためです。
皆さんもそういうことありませんか?

例えば商品Aの下に新しい行を追加した際に、隣接する行のセル結合は引き継がれません。この表の場合、商品名と備考欄それぞれにセルの結合をしないと見た目が悪くなってしまいます。

そこで今回は、行を追加した際に、上の行や下の行のセル結合を自動化するスクリプトを書いてみました。

スクリプト全文

function onEdit() {
  const sheet = SpreadsheetApp.getActiveSheet();

  // *****にはsheetIdが入ります。
  if(sheet.getSheetId() !== ******) return;
  console.log(`処理対象シート: ${sheet.getName()}`);

  const activeRow  = sheet.getActiveRange().getRow();
  const numColumns = 4;
  console.log(`アクティブ行: ${activeRow}`);

  const columns = [2, 10];

  for(const column of columns){
    const currentRange = sheet.getRange(activeRow, column, 1, numColumns);
    console.log(`処理対象範囲:${currentRange.getA1Notation()}`);

    // セルの結合する
    currentRange.merge();

  }
}

sheetIdとは

https://docs.google.com/spreadsheets/d/1_ZQFoqoy4OI0OSSIIbEqKsDeFZsU8WnEWGsY-l_xHR0/edit#gid=1891866064

スプレッドシートのURLの#gid=以下がシートIDです。
このシートIDを突き合わせることで、処理対象のシートかどうかを判定できます。

セルの結合があるかどうかを確かめる

 if (mergedRanges.length > 0) {
    console.log("選択した範囲内に結合されたセルが存在します。");
    // または任意の処理を実行
  }

セルの結合がある場合は1など数値で帰ってきます。

編集可能なシートサンプル

編集可能にしていますが、下ネタとか蔑視するような類の書き込みはお控えくださいね。

この記事が気に入ったらサポートをしてみませんか?