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