Google Spreadshetsで、合計数がわからないすべての利用可能なシートをループするにはどうすればよいですか?


10

私は娘の野球チームの統計情報を保持しています。各ゲームのシートがあり、それぞれ構造が同じです。他のシートの数値を合計した集計シートを作成したい。N枚のシートを参照する式を作成するにはどうすればよいですか?

例:

=G1!C2+G2!C2+G3!C2

新しいシートが追加されたときに、戻って各数式を変更したくありません。

更新:Googleヘルプでさらに検索していますが、これはサポートされていないと思います。私がやっていることは3D範囲と呼ばれ、Excelではサポートされていますが、Googleスプレッドシートではサポートされていません。


1
このQ&Aも興味深いかもしれません。webapps.stackexchange.com
Jacob Jan Tuinstra 2013

回答:


18

マクロを使用してもかまわない場合は、次の操作を実行できます。このスクリプトをスプレッドシートに追加します([ツール]-> [スクリプト]-> [スクリプトエディター])。

function getTotalSum(cell) {
    var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
    var sum = 0;
    for (var i = 0; i < sheets.length ; i++ ) {
        var sheet = sheets[i];
        var val = sheet.getRange(cell).getValue();

        if (typeof(val) == 'number') {
            sum += val;   
        }       
    }

    return sum;
}

そして、式= getTotalSum( "A1")を使用します。ここで、 "A1"は、すべてのシート(式を入力したものを除く)で合計するセルです。

確認できるテストスクリプトを作成しました


これはまさに私が探しているものですが、スクリプトが実行されるたびに、現在セル内にある値に追加されるため、実行されるたびにセル内のシートの合計よりも多くなります。現在の値を削除/置換して、他のシートの合計を追加するにはどうすればよいですか?
キース

要約を行うために同じセル位置を使用していますか?もしそうなら、それはおそらくそれを合計に追加しています。そして、それを再度実行すると、新しい合計が古い合計に追加されます。他のセルに追加するだけで機能します。希望しない場合は、スクリプトを変更して現在のシートのIDを取得し、ifステートメントにチェックを追加して、それが含まれないようにする必要があります。ループの上記第一の追加:var thissheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();そうのような続いて2番目の変更は、if文:if (typeof(val) == 'number') && (i != thissheet)
goodship11

おっと、ifステートメントの構文が間違っています。これを使用してください:if (typeof(val) == 'number' && i != thissheet)
goodship11

1
他のセルの値が変更された場合、カスタム関数はパラメーターが変更されたときにのみ実行されるため、戻り値は更新されません。
ルベン

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.