- ベストアンサー
スプレッドシートでシートをまたいで計算する方法
- Googleスプレッドシートで日報を作成する際、複数のシートをまたいで合計を計算したい場合の方法を紹介します。
- sumSkicount関数を使用して、指定したセル範囲の合計を計算することができます。
- しかし、現在のコードではうまく動かないようです。原因を特定し、修正する必要があります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
以下のようにしておくと =kusiSum("A1","始まりのシート") で終わりのシートを省略できます。 どちらにしても自動再計算はしてくれないみたいですが…。 function kusiSum(cell_no, start_name) { var objS=SpreadsheetApp.getActiveSpreadsheet(); var sheets = objS.getSheets(); var sum = 0; var add_flag = false; var My_sheet = objS.getActiveSheet().getName(); for(var i = 0; i < sheets.length;i++) { if(sheets[i].getName() == start_name){add_flag = true;} if(add_flag){ if(isNaN(sheets[i].getRange(cell_no).getValue())){ var value = parseInt(sheets[i].getRange(cell_no).getValue()); }else{ var value =sheets[i].getRange(cell_no).getValue(); } sum = parseInt(sum) + value; } if(sheets[i].getName() == My_sheet){break;} } return sum; }
その他の回答 (2)
- kkkkkm
- ベストアンサー率66% (1734/2604)
元の串刺しコードでしたら以下のように変更してみてはいかがでしょう。 IsNaNは数値だとFalseを返します。 if(isNaN(sheets[i].getRange(cell_no).getValue())){ var value = parseInt(sheets[i].getRange(cell_no).getValue()); }else{ var value = sheets[i].getRange(cell_no).getValue(); } もしくは if(isFinite(sheets[i].getRange(cell_no).getValue())){ var value = sheets[i].getRange(cell_no).getValue(); }else{ var value = parseInt(sheets[i].getRange(cell_no).getValue()); }
- kkkkkm
- ベストアンサー率66% (1734/2604)
各シートのA1に当日の数値、B1に当日+前日までの合計があるとして 合計(1シート目)現在の日までの合計表示 最終シートのB1 1日(2シート目)A1=1日目の数値 B1=1日目の数値 2日(3シート目)A1=2日目の数値 B1=1日のB1+A1 3日(4シート目)A1=3日目の数値 B1=2日のB1+A1 4日(5シート目)A1=4日目の数値 B1=3日のB1+A1 でいいのではないでしょうか。 シートが連続しているのでしたら function GET_SHEET_NAME() { var objSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var sheet_no =objSheet.getIndex()-2; return SpreadsheetApp.getActive().getSheets()[sheet_no].getSheetName(); } B1にそれぞれ =indirect(GET_SHEET_NAME() & "!B1")+A1 でいけそうな気がしますが、どうでしょう。