Google、スプレッドシートのピボットテーブルで,データ範囲の更新
Excelのピボットテーブルではデータ範囲に式を使うことができるが,スプレッドシートだとどうも無理みたい。
だからといってあらかじめ広めのデータ範囲を指定すると,空欄ができてしまうし,
この空欄をフィルタリングすると,自動で行が追加されてもフィルタリング条件は更新されないので表示されない。
で,データの追加は元々スクリプトで行うからスクリプトで更新できる方法を探してみた。
一応これでシート名指定すると指定されたシートのピボットテーブルのデータ範囲は更新はできる模様。
(Google の拡張サービスからGoogle Sheets APIの有効が必要だけど)
それにしてもピボットテーブル辺りはExcelの方が使いやすいな。。。
グラフも連動しないし。。。
function updatePivotTable(pivotTableSheetName) { var ss = SpreadsheetApp.getActiveSpreadsheet(); var pivotTableSheetId = ss.getSheetByName(pivotTableSheetName).getSheetId(); var fields = "sheets(properties.sheetId,data.rowData.values.pivotTable)"; var sheets = Sheets.Spreadsheets.get(ss.getId(), {fields: fields}).sheets; for (var i in sheets) { if (sheets[i].properties.sheetId == pivotTableSheetId) { var pivotTableParams = sheets[i].data[0].rowData[0].values[0].pivotTable; break; } } var sourceSheetId = pivotTableParams.source.sheetId || 0; for(var [i, sht] in ss.getSheets()) { if(sourceSheetId == sht.getSheetId()) { var sourceSheet = sht; } } // Update source range: pivotTableParams.source.endRowIndex = sourceSheet.getLastRow(); // Send back the updated params var request = { "updateCells": { "rows": { "values": [{ "pivotTable": pivotTableParams }] }, "start": { "sheetId": pivotTableSheetId }, "fields": "pivotTable" } }; Sheets.Spreadsheets.batchUpdate({'requests': [request]}, ss.getId()); } 参考:https://sites.google.com/site/scriptsexamples/learn-by-example/google-sheets-api/pivot