ピボットテーブルを操作したい(PivotTable)
スプレッドシートのデータを整理するとき、ピボットテーブルはとても便利です。
データを選択する
[挿入]→[ピボットテーブル][挿入先]を選択新しいシート
既存のシート → 挿入先のセルを選択
「行」を追加
「列」を追加
「値」を追加
「フィルタ」を追加
データを多角的に確認したい場合は、同じデータに対して、 複数のピボットテーブルを作成することもあります。
ピボットテーブルを作成したい(createPivotTable)
1// ピボットテーブルに使用する範囲
2const readRange = readSheet.getRange("A1:D10");
3
4// ピボットテーブルを出力するセルを選択
5const pivotRange = writeSheet.getRange("A1");
6
7// (空の)ピボットテーブルを作成
8const pivotTable = pivotRange.createPivotTable(readRange);
9
10// 行グループを追加(1列目)
11pivotTable.addRowGroup(1);
12
13// 列グループを追加(2列目)
14pivotTable.addColumnGroup(2);
15
16// ピボット値を追加(3列目をCOUNTAで集計)
17const method = SpreadsheetApp.PivotTableSummarizeFunction.COUNTA;
18pivotTable.addPivotValue(3, method);
19
20// フィルターを追加(4列目が空でない行のみ表示)
21const criteria = SpreadsheetApp.newFilterCriteria().whenCellNotEmpty().build();
22pivotTable.addFilter(4, criteria);
createPivotTableメソッドで、ピボットテーブルを作成できます。
作成するときに、使用するデータの範囲 と ピボットテーブルを出力するセル のRangeオブジェクトの指定が必要です。
注釈
ピボットテーブルは、利用するデータ範囲と同じシートに作成できます。 そのときは、選択したデータ範囲と重ならないようにする必要があります。
1const readRange = readSheet.getRange("A1:D10");
2
3// 行方向に作成する場合
4const lastRow = readSheet.getLastRow();
5const pivotRange = readSheet.getRange(lastRow + 2, 1);
6
7// 列方向に作成する場合
8const lastCol = readSheet.getLastColumn();
9const pivotRange = readSheet.getRange(1, lastCol + 2);
Sheet.getLastRowやSheet.getLastColumnを使って、
出力範囲の選択を自動化できます。
行や列を追加したい(addRowGroup / addColumnGroup)
1const rowGroup = pivotTable.addRowGroup(1);
2const colGroup = pivotTable.addColumnGroup(2);
PivotTable.addRowGroupで行グループ、
PivotTable.addColumnGroupで列グループを追加できます。
引数には対象カラムの列番号(1はじまり)を渡します。
ひとつのPivotTableに対して複数の行グループ/列グループを追加できます。
返り値はPivotGroupオブジェクトが新規作成されます。
このオブジェクトに対してソートしたり、総計を表示したり、設定できます。
ピボット値を追加したい(addPivotValue)
1const headers = ["カラム1", "カラム2", "カラム3", "カラム4"];
2const col = "カラム2";
3const index = headers.indexOf(col) + 1;
4const method = SpreadsheetApp.PivotTableSummarizeFunction.COUNTA;
5pivotTable.addPivotValue(index, method);
フィルターを追加したい(addFilter)
1const headers = ["カラム1", "カラム2", "カラム3", "カラム4"];
2const col = "カラム3";
3const index = headers.indexOf(col) + 1;
4const criteria = SpreadsheetApp.newFilterCriteria().whenCellNotEmpty().build();
5pivotTable.addFilter(index, criteria);
addFilterでフィルターを追加できます。
フィルター条件はフィルターを操作したい(FilterCriteria)を参考にFilterCriteriaオブジェクトを作成します。
行グループ/列グループの表示順や名前を変更したい(PivotGroup)
1const rowGroup = pivotTable.addRowGroup(1);
2
3// 降順に並び替え
4rowGroup.sortDescending();
5
6// 表内に合計値を表示
7rowGroup.showTotals(true);
8
9// 表示名を変更
10rowGroup.setDisplayName("集計項目");
addRowGroup / addColumnGroupが返すPivotGroupオブジェクトを操作して、
表示順や合計表示、表示名などを設定できます。
日時を集計したい(PivotGroup.setDateTimeGroupingRule)
1const headers = ["タイムスタンプ", "カラム2", "カラム3"];
2const index = headers.indexOf("タイムスタンプ") + 1;
3
4const pivotRow = pivotTable.addRowGroup(index);
5const byHour = SpreadsheetApp.DateTimeGroupingRuleType.HOUR;
6pivotRow.setDateTimeGroupingRule(byHour);
7pivotRow.setDisplayName("時刻");
8
9const pivotCol = pivotTable.addColumnGroup(index);
10const byDay = SpreadsheetApp.DateTimeGroupingRuleType.DAY_OF_WEEK;
11pivotCol.setDateTimeGroupingRule(byDay);
12pivotCol.setDisplayName("曜日");
13
14const method = SpreadsheetApp.PivotTableSummarizeFunction.COUNTA;
15const pivotVal = pivotTable.addPivotValue(index, method);
PivotGroup.setDateTimeGroupingRuleで日時データをグルーピングできます。
設定値はSpreadsheetApp.DateTimeGroupingRuleTypeの中で定義されている値から選択します。
注釈
日時でないカラムを渡してもエラーはでません。
ヒストグラムにしたい(PivotGroup.setHistogramGroupingRule)
1// 3列目の値を、0〜100の範囲で10刻みのビンに分ける
2const pivotRow = pivotTable.addRowGroup(3);
3pivotRow.setHistogramGroupingRule(0, 100, 10);
PivotGroup.setHistogramGroupingRuleで行グループ/列グループを、任意のビン数でヒストグラム(度数分布)にできます。
行/列に指定したカラムの値が連続値の場合にとても便利です。