3

Google アプリ スクリプトを使用して、Google スプレッドシートで簡単なカスタム合計式を作成したいと考えています。

 function somaDias(range, days) {
   var sum = 0;

   for(i=0; i<days; i++){
     sum = sum + range[i];
  }


    return soma;
    }

この関数は、月ごとの金額の列を持つレポートで使用します。アイデアは、値の列全体を選択し、それを範囲として渡し、この値を月の日まで合計することです。私は何か問題があることを知っています

  sum = sum + range[i];

なぜなら、1つしかない列でテストすると...戻り値は「0111111」だからです

=somaDias(C9:C15;6) // 6 を返すはずですが、0111111 を返します

=sum() は日によって範囲が変わるので使いたくありません。月の30日を範囲として渡し、合計したい日数を渡したいです。合計を使用した場合、毎日範囲を再選択する必要があります....

私が間違っていることは何ですか?

4

2 に答える 2

3

スプレッドシートの組み込み関数を使用しないのはなぜSUM()ですか? (ドキュメントはこちら

ここに画像の説明を入力


次のコメントを編集します。

私はカスタム関数が好きではありませんが、ここにあなたが望むものを達成する方法があります.1つのパラメータ=日数のみを使用し、最初の列から数えます.

function somaDias(days) {
  var sum = 0;
  var sh = SpreadsheetApp.getActiveSheet();
  var values = sh.getRange(sh.getActiveCell().getRowIndex(),1,1,days).getValues();

  for(var i in values[0]){
    sum += values[0][i];
  }
  return sum;
}
于 2014-07-28T16:00:59.620 に答える
1

値をループすると、以下の関数を使用できます。オブジェクトと、合計する必要がある列インデックスを指定できます。

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var range = sheet.getRange("A1:F30");
var values = range.getValues();


function sum( obj, colindex ) {
  var sum = 0;
  for( var el in obj ) {
      sum += parseFloat( obj[el][colindex] );
  }
  return sum;
}
于 2018-02-21T17:00:28.243 に答える