前提
GASで
①ピボットテーブルを自動作成
②ピボット集計した値をコピー
③同ファイル内の別のシートに貼り付け
をさせたいです。
今回、上記① (②) で躓いています。
実現したいこと
ピボットテーブル生成の際、割合部はD列とE列+F列の2種で
集計をさせたいです。
E列とF列でピボットグループを作成する場合、手動操作だと、
ピボットテーブル上でE列とF列を選択後、ピボットグループを
作成しますが、どのようにすればこれと同じことをGASで実現
できるかを教えてほしいです。
Q1:どのようなコードを書けば、上記が実現できますか?
試したこと(発生している問題)
ピボットテーブル生成時にE列とF列をグループ化する方法が思い
つかなかったため、
・まず、30%(D列)、50%(E列)、100%(F列)の3種でピボット生成
・その後に、別途50%(E列)、100%(F列)を合算し、ピボットシート
H列に追記
という2段階でのアプローチを試みました。
E列とF列の合算は、setFormulaR1C1('組込関数SUM')で算出しよう
としたのですが、SUM範囲を指定する際、終点の行を可変にしよう
とピボットテーブルシートH列で#ERRORとなってしまい、うまく
できません。
終点行を「2」と指定すれば、想定した通りの動きをしてくれます。
Q2:終点行が可変としたい場合、どのようにすればコード修正
すればSUM算出できますか?
GAS
1【うまくできなかったコード】 2function sumPivot() { 3 4const ss = SpreadsheetApp.getActiveSpreadsheet(); 5const detaSheet = ss.getSheetByName("データ"); 6const summarySheet = ss.getSheetByName("集計"); 7const S_pivotSheet = ss.getSheetByName('ピボットB'); 8 9//▼最終行(lastRow)を取得 10const lastRow = S_pivotSheet.getLastRow(); 11console.log('lastRow ' + lastRow ) //4が正解 12const targetRows = lastRow - 2; 13console.log('targetRows ' + targetRows ) //2が正解 14 15//★うまくできない★ 16//▼H列にE列(割合50%)とF列(割合100%)の合算値を補充 17//合算値はsetFormulaR1C1('組込関数SUM')で算出 18//基準セルから、行方向下に▲行、列方向左方向に●列 >>「R[▲(下方向)]C[-●(左方向)]」 19 const sum = S_pivotSheet.getRange(3, 8, targetRows, 1).setFormulaR1C1("=SUM(R[0]C[-3]:R[targetRows]C[-2])"); 20
(参考)ピボットテーブル作成させるコード
GAS
1function makePivotB() { 2const ss = SpreadsheetApp.getActiveSpreadsheet(); 3const mySheet = ss.getActiveSheet(); 4 5//▼ファイル内にピボットTBL用の新シートを追加 6//スプシ内の左から4番目に新しいシートを作成し、シート名は「ピボットB」に変更 7const newSheet = ss.insertSheet('ピボットB',3); 8 9const pivotSheet = ss.getSheetByName('ピボットB'); 10const detaSheet = ss.getSheetByName("データ"); 11 12//▼ピボットTBLのデータ取得元を指定 13const deta = detaSheet.getDataRange(); //「データ」シートからデータを取得する 14const pivot = pivotSheet.getRange(1,1).createPivotTable(deta); //ピボットシートにピボットTBLを作成 15 16//▼ピボットTBLの行に表示するデータを指定 17pivot.addRowGroup(4).showTotals(false); //ピボット行にD列(所属1)を追加。小計は表示しない 18pivot.addRowGroup(5).showTotals(false); //ピボット行にE列(所属2)を追加。小計は表示しない 19pivot.addRowGroup(6).showTotals(false); //ピボット行にF列(所属3)を追加。小計は表示しない 20pivot.addColumnGroup(11).setDisplayName('割合').showTotals(true); //ピボット列に元データJ列を追加。小計は表示しない 21 22 23//▼ピボットTBLの値に表示するデータを指定 24//B列(社員番号)_COUNTで設定 25const count = pivot.addPivotValue(2,SpreadsheetApp.PivotTableSummarizeFunction.COUNT); //3が出たら正解 26 27//▼ピボットTBLにフィルタをかける 28//フィルタ絞込み条件はH列(兼任)=1のみ表示 29//setVisibleValues(['表示させる値']) 30//※変数名は必ずcriteriaを使う? 31const criteria1 = SpreadsheetApp.newFilterCriteria().setVisibleValues([1]).build(); 32//addFilter(●列目,criteria) 33pivot.addFilter(8,criteria1); 34 35SpreadsheetApp.flush(); //処理がつまらないように強制実行 36 37//▼処理完了Msgを表示 38Browser.msgBox("ピボットBTBLを作成しました。",Browser.Buttons.OK); 39} 40
補足情報(FW/ツールのバージョンなど)
非エンジニアビギナーです。
回答は急ぎませんので、次回から自分で解決できるように
なりたいので非エンジニア、ビギナーでも理解できるレベル
のアドバイス、解説をいただけると助かります。
お忙しい中、お手数をおかけして申し訳ありません。
よろしくお願いいたします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/01/29 23:46