驚くほど簡単!GASでグループ化とその解除方法をマスターしよう
GASでスプレッドシートのデータをグループ化する方法を教えてもらえないかなぁ…

猫男

catman
それなら、catmanがGASで簡単にできるグループ化とその解除方法を伝授しよう。
GASでスプレッドシートのデータをグループ化する方法
グループ化とは、
複数の行や列をまとめて折りたたんだり展開したりできる機能のこと
だったよな。
GASでは、shiftRowGroupDepth() を使うことで、「深さ(depth)」ごとに階層的なグループを作れる。
グループ化の基本
まず、特定の範囲をグループ化するスクリプトを書いてみよう。これは行をグループ化するコードだ。
// 2〜11行目をグループ化するスクリプト
function groupRows() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getRange("2:11"); // 2〜11行目を選択
range.shiftRowGroupDepth(1); // グループ化(深さ1)
}
function groupRows() { ... }
→ groupRowsという関数を定義。var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
→ 現在アクティブなスプレッドシートのアクティブなシートを取得。var range = sheet.getRange("2:11");
→ 2行目から11行目までの行全体を取得(列はすべて含む)。range.shiftRowGroupDepth(1);
→ 行グループの深さを1つ増やして、グループ化する。
この関数をボタンから実行すると、次のようになる。
これでグループ化した範囲を表示したり隠したりできるな!
グループ化ってこんなにサクッとできるんだね!でも、間違えちゃったらどうしよう…

猫男
グループ化を解除するには?
大丈夫、GASを使えばグループ化の解除も簡単にできる。以下のスクリプトでグループ化を解除できるぞ。
つまり、深さを1つ減らせばいいんだ。そのためには、shiftRowGroupDepthメソッドの引数を「-1」にする。
function ungroupRows() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getRange("2:11");
range.shiftRowGroupDepth(-1); // グループ解除
}
なるほど!これで誤ってグループ化しても元に戻せるね。

猫男
GASで列をグループ化する方法
行だけではなく、列のグループ化も同様に可能だ。列をグループ化する方法も見てみよう。
行の場合が shiftRowGroupDepth()
なのに対し、列は shiftColumnGroupDepth()
を使うぞ。
列のグループ化の基本
function groupColumns() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getRange("B:D"); // B列〜D列(2〜4列目)
range.shiftColumnGroupDepth(1); // グループ化(深さ1)
}
列も同じように簡単にできるんだね!これは使えそう!

猫男
列のグループ化を解除するには?
列をグループ化解除する方法も見ておこう。
function groupColumns() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getRange("B:D"); // B列〜D列(2〜4列目)
range.shiftColumnGroupDepth(-1); // グループ化(深さ1)
}
練習問題: GASのグループ化とその解除をマスターしよう
以下の問題を通して、GASでのグループ化を実践してみよう。
- シートの5から15行目をグループ化してみてください。
- シートのBからF列のグループ化を解除してください。
解答と解説
問1の解答
function groupRows5to15() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getRange("5:15"); // 5〜15行目を範囲指定
range.shiftRowGroupDepth(1); // グループの深さを1つ追加(=グループ化)
}
問2の解答
function ungroupColumnsBtoF() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getRange("B:F"); // B列〜F列を範囲指定
range.shiftColumnGroupDepth(-1); // グループ解除(深さを1つ減らす)
}