GAS範囲操作と結合解除
GAS基礎
Google Apps Script(GAS)は、Google Workspace のサービスを自動化するための JavaScript ベースのスクリプト言語です。まずは GAS の基本的な構文と、スプレッドシートを操作するための SpreadsheetApp クラスを紹介します。以下のコードは、現在開いているスプレッドシートのアクティブシートを取得し、A1 セルに「Hello, GAS!」と書き込む最小限の例です。
function helloGAS() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
sheet.getRange('A1').setValue('Hello, GAS!');
}
このように、GAS では SpreadsheetApp を通じてスプレッドシートにアクセスし、getRange でセル範囲を指定します。次章では、範囲を動的に操作するテクニックを掘り下げます。
範囲操作応用
範囲操作の応用では、offset と getRanges を組み合わせて、複数のセルを一括で取得・更新する方法を学びます。offset は現在の範囲から相対的に位置をずらした新しい範囲を返します。例えば、A1 のセルから右に 2 列、下に 3 行ずれた範囲を取得するには次のようにします。
const base = sheet.getRange('A1');
const target = base.offset(3, 2); // D4 から始まる範囲
target.setBackground('#ffeb3b');
さらに、getRanges を使うと、複数の非連続範囲を一度に取得できます。以下は、A1 と C1 の 2 つのセルを同時に取得し、値を設定する例です。
const ranges = sheet.getRanges(['A1', 'C1']);
ranges.forEach(r => r.setValue('複数取得'));
これらのテクニックを組み合わせることで、データの抽出や書き込みを効率化できます。
NamedRangeと名前付き範囲
名前付き範囲(NamedRange)は、スプレッドシート内の特定のセルや範囲に意味のある名前を付けることで、スクリプトや数式で参照しやすくする機能です。GAS からは SpreadsheetApp.getActiveSpreadsheet().getRangeByName(name) で取得できます。
const named = sheet.getRangeByName('売上データ');
named.setFontWeight('bold');
名前付き範囲を作成するには、スプレッドシートのメニューから「データ」→「名前付き範囲」を選択し、範囲と名前を設定します。スクリプト側では NamedRange オブジェクトを取得し、getRange() で実際のセル範囲を取得できます。
const namedRange = SpreadsheetApp.getActiveSpreadsheet().getNamedRanges()
.find(r => r.getName() === '売上データ');
const actualRange = namedRange.getRange();
名前付き範囲を活用すると、シート構造が変わってもスクリプトが壊れにくくなります。
セル結合と枠線
セル結合(merge)は、複数のセルを一つにまとめる操作です。GAS では merge() メソッドで結合し、breakApart() で解除します。以下は、A1 から B2 までの 4 セルを結合し、背景色を設定した後、結合解除する例です。
const mergeRange = sheet.getRange('A1:B2');
mergeRange.merge();
mergeRange.setBackground('#c8e6c9');
// 何らかの処理後に結合解除
mergeRange.breakApart();
結合解除時に breakApart() を呼び出すと、元のセル構造に戻ります。結合したセルに枠線(border)を設定するには、setBorder を使います。
mergeRange.setBorder(true, true, true, true, true, true, '#000000', SpreadsheetApp.BorderStyle.SOLID);
枠線を細かく制御したい場合は、setBorder の引数を個別に指定し、上下左右の枠線を個別に設定できます。これにより、レポートやダッシュボードの見た目を整えることが可能です。
コメント
コメントを投稿