GAS開発者向けにスプレッドシートの行列グループ化・解除・折りたたみ・展開機能をすべてまとめました。
どうでもいいデータ行なんだけど削除はしたくない、ポチっと押すだけですぐ見えるようにしたい、という場面でグループ化は大いに役立ちますね。
そんな時にGASでそのシートの内容に合わせて柔軟に設定できるようになるとさらに便利です。
行列グループ化・解除・折りたたみ・展開に関するメソッドをすべて載せてます。少しでも参考になれば幸いです。
Google Apps Script スプレッドシート 基礎 リファレンス
当ページは、GAS公式リファレンスを元にスプレッドシートの機能毎にまとめた基礎的な内容となっております。
若干、文言がおかしい可能性がありますが、あらかじめご了承ください。
GAS基本メソッドまとめ一覧はコチラ↓↓↓です。スプレッドシートの基本的な機能をまとめてますので、ぜひご活用ください。
まずは実際に動かしてみることをオススメします。マクロの登録方法は以下を参照いただければと思います。
GASの本はまだまだ少ないですね。基礎レベルであれば、以下の参考書が初心者にはベストの本です。
基本的な仕様やよく使われる機能の設定方法がまとまっています。
※JavaScriptの知識が既にある程度ある人にとっては冗長かもしれません。
グループコントロール切替可能位置列挙型[GroupControlTogglePosition]
グループコントロールの切り替えが可能な位置です。
Enum GroupControlTogglePosition
グループコントロールの切り替えが可能な位置を表す列挙体。
プロパティ | タイプ | 説明 |
---|---|---|
BEFORE | Enum | コントロールの切り替えがグループの前にある位置(より低いインデックス)。 |
AFTER | Enum | コントロールの切り替えがグループの後にある位置(より高いインデックス)。 |
参照:Google Apps Script | REFERENCE | SpreadSheet | Enum GroupControlTogglePosition
セル範囲クラス[Range]のグループ化・解除設定
セル範囲の行と列のグループ化と解除メソッドです。
行のグループ化[shiftRowGroupDepth(デルタ)]
shiftRowGroupDepth(delta)
範囲の行グループ化の深さを指定された量だけ変更します。
これは、範囲と交差するグループを作成、変更、または削除する効果があります。正のデルタの場合、グループは作成または変更されます。負のデルタの場合、グループは破棄されたり変更されたりします。
これは、グループの深さをゼロ以下または8以上に減らしても効果がありません。
行グループの制御位置がBEFOREの場合、最初の行の深さをシフトしようとするとエラーが発生します。
function shiftRowGroupDepthSample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
var range = sheet.getActiveRange();
// 行グループ化の深さは1ずつ増えます。
range.shiftRowGroupDepth(1);
// 行グループ化の深さは1減少します。
range.shiftRowGroupDepth(-1);
}
名前 | タイプ | 説明 |
---|---|---|
delta | Integer | この範囲の行グループの深さを変更する量。 |
Return
Range - 連鎖用のセル範囲。
Throws
Error - コントロール位置がGroupControlTogglePosition.BEFOREの場合に最初の行の深さをシフトしようとしたとき。
参照:Google Apps Script | REFERENCE | SpreadSheet | Class Range | Methods | shiftRowGroupDepth(delta)
列のグループ化[shiftColumnGroupDepth(デルタ)]
shiftColumnGroupDepth(delta)
範囲の列グループ化の深さを指定された量だけ変更します。
これは、範囲と交差するグループを作成、変更、または削除する効果があります。正のデルタの場合、グループは作成または変更されます。負のデルタの場合、グループは破棄されたり変更されたりします。
これは、グループの深さをゼロ以下または8以上に減らしても効果がありません。
列グループの制御位置がBEFOREの場合、最初の行の深さをシフトしようとするとエラーになります。
function shiftColumnGroupDepthSample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
var range = sheet.getActiveRange();
// 列のグループ化の深さが1増えます。
range.shiftColumnGroupDepth(1);
// 列のグループ化の深さが1減少します。
range.shiftColumnGroupDepth(-1);
}
名前 | タイプ | 説明 |
---|---|---|
delta | Integer | この範囲の列グループの深さを変更する量。 |
Return
Range - 連鎖用のセル範囲。
Throws
Error - コントロール位置がGroupControlTogglePosition.BEFOREの場合に最初の列の深さをシフトしようとしたとき。
セル範囲クラス[Range]のグループ化折りたたみと展開設定
セル範囲の行と列のグループ化の折りたたみと展開メソッドです。
グループを折りたたむ[collapseGroups()]
collapseGroups()
範囲内に完全に含まれているすべてのグループを折りたたみます。範囲内に完全に収まっているグループがない場合、部分的に範囲内にある最も深く展開されたグループは折りたたまれます。
function collapseGroupsSample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
var range = sheet.getActiveRange();
// 範囲内のすべての行と列のグループが縮小されています。
//range.expandGroups();
range.collapseGroups();
}
Return
Range - 連鎖用のセル範囲。
参照:Google Apps Script | REFERENCE | SpreadSheet | Class Range | Methods | collapseGroups()
グループを展開[expandGroups()]
expandGroups()
範囲またはコントロールの切り替えがこの範囲と交差する折りたたまれたグループを展開します。コントロールの切り替え位置は、設定に応じてグループの直前または直後にコントロールの切り替えが表示されるインデックスです。同じ場所に複数のグループがある場合は、最も浅いグループが展開されます。
function expandGroupsSample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
var range = sheet.getActiveRange();
// 範囲内のすべての行と列のグループが展開されます。
range.expandGroups();
}
Return
Range - 連鎖用のセル範囲。
参照:Google Apps Script | REFERENCE | SpreadSheet | Class Range | Methods | expandGroups()
シートクラス[Sheet]のグループ設定
シートの行と列のグループ設定メソッドです。
行グループコントロール位置設定[setRowGroupControlPosition(位置)]
setRowGroupControlPosition(position)
シート上の行グループコントロールの切り替え位置を設定します。
function setRowGroupControlPositionSample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
sheet.setRowGroupControlPosition(SpreadsheetApp.GroupControlTogglePosition.AFTER);
}
名前 | タイプ | 説明 |
---|---|---|
position | GroupControlTogglePosition | 行グループコントロールの位置を切り替えます。 |
Return
Sheet - 連鎖用のシート。
列グループコントロール位置設定[setColumnGroupControlPosition(位置)]
setColumnGroupControlPosition(position)
シート上の列グループコントロールの切り替え位置を設定します。
function setColumnGroupControlPositionSample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
sheet.setColumnGroupControlPosition(SpreadsheetApp.GroupControlTogglePosition.AFTER);
}
名前 | タイプ | 説明 |
---|---|---|
position | GroupControlTogglePosition | 列グループコントロールの位置を切り替えます。 |
Return
Sheet - 連鎖用のシート。
シートクラス[Sheet]のグループ取得
シートの行と列のグループ取得メソッドです。
行グループ取得[getRowGroup(行インデックス, グループの深さ)]
getRowGroup(rowIndex, groupDepth)
指定されたインデックスとグループの深さにある行グループを返します。
function getRowGroupSample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
// 制御インデックスが2行目で深さが1のグループを返します。
// グループが存在しない場合はnullを返します。
var rowGroup = sheet.getRowGroup(2, 1);
}
名前 | タイプ | 説明 |
---|---|---|
rowIndex | Integer | グループコントロールの行インデックスまたはグループ内のインデックス。 |
groupDepth | Integer | グループの深さ。 |
Return
Group - コントロールインデックスと深度の行グループ、またはグループが存在しない場合はnull。
列グループ取得[getColumnGroup(列インデックス, グループの深さ)]
getColumnGroup(columnIndex, groupDepth)
指定されたインデックスとグループの深さにある列グループを返します。
function getColumnGroupSample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
// コントロールインデックスが2桁目で深さが1のグループを返します。
// グループが存在しない場合はnullを返します。
var columnGroup = sheet.getColumnGroup(2, 1);
}
名前 | タイプ | 説明 |
---|---|---|
columnIndex | Integer | グループコントロールの列インデックスまたはグループ内のインデックス。 |
groupDepth | Integer | グループの深さ。 |
Return
Group - コントロールインデックスと深度の列グループ。グループが存在しない場合はnull。
行グループコントロール位置取得[getRowGroupControlPosition()]
getRowGroupControlPosition()
シート上のすべての行グループのGroupControlTogglePositionを返します。
function getRowGroupControlPositionSample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
// 行のグループ化制御の切り替えがグループの後に表示される場合は
// GroupControlTogglePosition.AFTER。
var rowGroupControlPosition = sheet.getRowGroupControlPosition();
}
Return
GroupControlTogglePosition - このシートのグループの後に行グループ化コントロールの切り替えが表示される場合はtrue、それ以外の場合はfalseです。
列グループコントロール位置取得[getColumnGroupControlPosition()]
getColumnGroupControlPosition()
シート上のすべての列グループのGroupControlTogglePositionを返します。
function getColumnGroupControlPositionSample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
// 列のグループ化制御の切り替えがグループの後に表示される場合は
// GroupControlTogglePosition.AFTER。
var columnGroupControlPosition = sheet.getColumnGroupControlPosition();
}
Return
GroupControlTogglePosition - 列のグループ化コントロールの切り替えがこのシートのグループの後に表示される場合はtrue、それ以外の場合はfalseです。
行グループの深さ取得[getRowGroupDepth(行インデックス)]
getRowGroupDepth(rowIndex)
指定されたインデックスにある行のグループ深度を返します。
グループの深さは、行と重複するグループの数を示します。これは0から8の範囲です。
function getRowGroupDepthSample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
// 1行目から3行目にまたがるグループがある場合は1
var groupDepth = sheet.getRowGroupDepth(1);
}
名前 | タイプ | 説明 |
---|---|---|
rowIndex | Integer | 行のインデックス。 |
Return
Integer - 指定されたインデックスの行のグループ深度。
参照:Google Apps Script | REFERENCE | SpreadSheet | Class Sheet | Methods | getRowGroupDepth(rowIndex)
列グループの深さ取得[getColumnGroupDepth(列インデックス)]
getColumnGroupDepth(columnIndex)
指定されたインデックスにある列のグループの深さを返します。
グループの深さは、列とオーバーラップするグループ数を示します。これは0から8の範囲です。
function getColumnGroupDepthSample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
// 1桁目から3桁目にグループがある場合は1
var groupDepth = sheet.getColumnGroupDepth(1);
}
名前 | タイプ | 説明 |
---|---|---|
columnIndex | Integer | 列のインデックス。 |
Return
Integer - 指定されたインデックスにある列のグループ深度。
シートクラス[Sheet]のグループ折りたたみと展開
シートの行と列のグループ折りたたみと展開メソッドです。
行グループすべて折りたたみ[collapseAllRowGroups()]
collapseAllRowGroups()
シート上のすべての行グループを折りたたみます。
function collapseAllRowGroupsSample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
// シート上のすべての行グループが折りたたまれています。
sheet.collapseAllRowGroups();
}
Return
Sheet - 連鎖用のシート。
参照:Google Apps Script | REFERENCE | SpreadSheet | Class Sheet | Methods | collapseAllRowGroups()
列グループすべて折りたたみ[collapseAllColumnGroups()]
collapseAllColumnGroups()
シート上のすべての列グループを折りたたみます。
function collapseAllColumnGroupsSample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
// シート上のすべての列グループが折りたたまれています。
sheet.collapseAllColumnGroups();
}
Return
Sheet - 連鎖用のシート。
参照:Google Apps Script | REFERENCE | SpreadSheet | Class Sheet | Methods | collapseAllColumnGroups()
行グループすべて展開[expandAllRowGroups()]
expandAllRowGroups()
シート上のすべての行グループを展開します。
function expandAllRowGroupsSample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
// シート上のすべての行グループが展開されます。
sheet.expandAllRowGroups();
}
Return
Sheet - 連鎖用のシート。
参照:Google Apps Script | REFERENCE | SpreadSheet | Class Sheet | Methods | expandAllRowGroups()
列グループすべて展開[expandAllColumnGroups()]
expandAllColumnGroups()
シート上のすべての列グループを展開します。
function expandAllColumnGroupsSample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
// シート上のすべての列グループが展開されます。
sheet.expandAllColumnGroups();
}
Return
Sheet - 連鎖用のシート。
参照:Google Apps Script | REFERENCE | SpreadSheet | Class Sheet | Methods | expandAllColumnGroups()
行グループを指定の深さまで展開[expandRowGroupsUpToDepth(グループの深さ)]
expandRowGroupsUpToDepth(groupDepth)
指定された深さまですべての行グループを展開し、それ以外のすべての行グループを折りたたみます。
function expandRowGroupsUpToDepthSample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
// 深さ2以下の行グループはすべて展開され、
// 深さ3以上のグループは折りたたまれます。
sheet.expandRowGroupsUpToDepth(2);
}
名前 | タイプ | 説明 |
---|---|---|
groupDepth | Integer | 行グループを拡張するグループの深さ。 |
Return
Sheet - 連鎖用のシート。
列グループを指定の深さまで展開[expandColumnGroupsUpToDepth(グループの深さ)]
expandColumnGroupsUpToDepth(groupDepth)
指定した深さまですべての列グループを展開し、それ以外のすべての列グループを折りたたみます。
function expandColumnGroupsUpToDepthSample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
// 深さ2以下のすべての列グループは展開され、
// 深さ3以上のグループは縮小されます。
sheet.expandColumnGroupsUpToDepth(2);
}
名前 | タイプ | 説明 |
---|---|---|
groupDepth | Integer | 列グループを拡張するグループの深さ。 |
Return
Sheet - 連鎖用のシート。
グループクラス[Group]の各機能
スプレッドシートグループにアクセスして変更する。グループは、行または列を非表示/表示する単位として展開または縮小できる、隣接する行または列の間隔の間の関連付けです。
各グループには、グループ全体の前後にグループの前後に(設定に応じて)行または列を直接切り替えるコントロールがあります。
グループの深さとは、そのグループの入れ子の位置と、そのグループに含まれるより大きなグループの数のことです。
グループの折りたたまれた状態とは、親グループが展開された後にグループが折りたたまれたままになるか展開されたままになるかを示します。
また、グループが折りたたまれたり展開されたりした時点では、グループ内の行または列は非表示または表示に設定されますが、個々の行または列は折りたたまれた状態に関係なく非表示または表示に設定できます。
グループ折りたたみ[collapse()]
collapse()
このグループを折りたたみます。
function collapseSample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
var range = sheet.getRange(2:3);
var range = sheet.getRange("2:3");
range.shiftRowGroupDepth(1);
//var group = sheet.getRowGroupAt(2, 1);
var group = sheet.getRowGroup(2, 1);
// このグループを折りたたみます。
group.collapse();
}
Return
Group - 連鎖用のグループ。
参照:Google Apps Script | REFERENCE | SpreadSheet | Class Group | Methods | collapse()
グループ展開[expand()]
expand()
このグループを展開します。
function expandSample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
var range = sheet.getRange(2:3);
var range = sheet.getRange("2:3");
range.shiftRowGroupDepth(1);
//var group = sheet.getRowGroupAt(2, 1);
var group = sheet.getRowGroup(2, 1);
// このグループを展開します。
group.expand();
}
Return
Group - 連鎖用のグループ。
参照:Google Apps Script | REFERENCE | SpreadSheet | Class Group | Methods | expand()
グループコントロールインデックス取得[getControlIndex()]
getControlIndex()
このグループの制御切り替えインデックスを返します。これは、コントロールの切り替えがグループの前に表示されている場合は範囲の直前のインデックス、それ以外の場合は範囲の直後のインデックスです。
function getControlIndexSample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
sheet.setRowGroupControlAfter(true);
//var range = sheet.getRange(2:3);
var range = sheet.getRange("2:3");
range.shiftRowGroupDepth(1);
//var group = sheet.getRowGroupAt(2, 1);
var group = sheet.getRowGroup(2, 1);
// 4を返します
var controlIndex = group.getControlIndex();
}
Return
Integer - このグループの制御切り替えインデックス。
参照:Google Apps Script | REFERENCE | SpreadSheet | Class Group | Methods | getControlIndex()
グループの深さ取得[getDepth()]
getDepth()
このグループの深さを返します。
function getDepthSample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
//var range = sheet.getRange(2:3);
var range = sheet.getRange("2:3");
range.shiftRowGroupDepth(1);
//var group = sheet.getRowGroupAt(2, 1);
var group = sheet.getRowGroup(2, 1);
// グループが深さ1にある場合は1を返します。
var depth = group.getDepth();
}
Return
Integer - このグループの深さ。
参照:Google Apps Script | REFERENCE | SpreadSheet | Class Group | Methods | getDepth()
グループのセル範囲取得[getRange()]
getRange()
このグループが存在する範囲を返します。
function getRangeSample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
//var range = sheet.getRange(2:3);
var range = sheet.getRange("2:3");
range.shiftRowGroupDepth(1);
//var group = sheet.getRowGroupAt(1, 1);
var group = sheet.getRowGroup(1, 1);
// グループが2:3の行にある場合は2:3の範囲を返します
range = group.getRange();
}
Return
Range - グループが存在する範囲。
参照:Google Apps Script | REFERENCE | SpreadSheet | Class Group | Methods | getRange()
グループ化確認[isCollapsed()]
isCollapsed()
このグループが折りたたまれている場合はtrueを返します。
function isCollapsedSample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
//var range = sheet.getRange(2:3);
var range = sheet.getRange("2:3");
range.shiftRowGroupDepth(1);
//var group = sheet.getRowGroupAt(2, 1);
var group = sheet.getRowGroup(2, 1);
// グループが折りたたまれている場合はtrueを返します。
var isCollapsed = group.isCollapsed();
}
Return
Boolean - このグループが縮小されている場合はtrueです。それ以外の場合はfalseを返します。
参照:Google Apps Script | REFERENCE | SpreadSheet | Class Group | Methods | isCollapsed()
グループ化削除[remove()]
remove()
このグループをシートから削除し、範囲のグループの深さを1つ減らします。これは他のグループを修正するかもしれません。これを呼び出した後、グループオブジェクトは使用できなくなります。
function removeSample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
//var range = sheet.getRange(2:3);
var range = sheet.getRange("2:3");
range.shiftRowGroupDepth(1);
//var group = sheet.getRowGroupAt(2, 1);
var group = sheet.getRowGroup(2, 1);
// このグループを削除します
var range = group.remove();
}
参照:Google Apps Script | REFERENCE | SpreadSheet | Class Group | Methods | remove()
最後に
GAS行列グループ化・解除・折りたたみ・展開機能のまとめをご紹介させていただきました。
必要に応じて、有益な情報でさらに更新していきたいと思います。
プログラミングスキルを向上させるためには、本を読むだけでは脳にインプットされませんね。
実際に手を動かしてアウトプットしまくるのが一番の近道だと思います。
実際にサンプルソースをコピーして実行した結果がどうなるかを体験してみてください。
自分なりのアレンジを加えたり、なぜエラーになるのかを考え、何度も試行錯誤して問題を解決しまくり、着実に理解しながらスキルを向上させていきましょう。
GASはExcelVBAとはかなり違いますが、ベースとなっているJavaScriptは覚えて損はないプログラミング言語なのでショートカットキーなどと組み合わせてぜひ活用してみてください。
Googleスプレッドシート全ショートカットキー一覧はこちら↓↓↓
ショートカットキー一覧にもGASメソッドを載せています。どの操作からどのメソッドが呼ばれるのかイメージしてください。
コメント