Posted at

[GAS] スプレッドシートでも串刺し演算がしたい

More than 3 years have passed since last update.


串刺し演算とは?

同じ書式・同じ形の複数のシートのデータを、1つのシートに集計したり加減乗除したりする事です。

Excel 2002からずっと使える機能のようです。

(例)

1つのファイル内に、以下のようなシートがあったとします。

AAAAA, BBBBB, CCCCC, DDDDD, EEEEE, FFFFF, GGGGG, HHHHH



=SUM(CCCCC:FFFFF!B4)



こんな感じで数式を書くと、CCCCC〜FFFFFまでの4枚のシートのセルB4が合算された結果を表示することができます。


Google スプレッドシートでの実現方法

標準機能では、搭載されていないので、GoogleAppsScriptを使って実現します。

function skewersum(cell_no, start_name, end_name) {

var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
var sum = 0;
var add_flag = false;

for(var i = 0; i < sheets.length;i++) {
if(sheets[i].getName() == start_name){add_flag = true;}
if(add_flag){sum += sheets[i].getRange(cell_no).getValue();}
if(sheets[i].getName() == end_name){break;}
}
return sum;
}

=skewersum("B4","CCCCC","FFFFF")

シンプルな実装ですが、動くようにはなりました。

重いですが。。

Tipsとしてどなたかの参考になれば幸いです。