ピボットテーブル操作したい(PivotTable

スプレッドシートのデータを整理するとき、ピボットテーブルはとても便利です。

  1. データを選択する

  2. [挿入][ピボットテーブル]

  3. [挿入先]を選択

    • 新しいシート

    • 既存のシート → 挿入先のセルを選択

  4. 「行」を追加

  5. 「列」を追加

  6. 「値」を追加

  7. 「フィルタ」を追加

データを多角的に確認したい場合は、同じデータに対して、 複数のピボットテーブルを作成することもあります。

ピボットテーブルを作成したい(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.getLastRowRange.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で行グループ/列グループを、任意のビン数でヒストグラム(度数分布)にできます。 行/列に指定したカラムの値が連続値の場合にとても便利です。

リファレンス