3

Google スプレッドシートで関数を作成する際に If ステートメントを使用する方法を考え出そうとしています。

私が達成しようとしていることの例を提供しました。私の知る限りでは、このコードの If ステートメントは、セル A4 の値が 4 に等しいことを確認するだけで、そうであれば、入力数値に 1.5 を掛けますか? ただし、関数を実行しようとすると、常に 0 (または最初に価格変数に割り当てた値) が返されます。

どんな助けでも大歓迎です。

どうもありがとう

    function calculatePrice(inNum) {

         var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
         var price = 0;

         if (sheet.getRange(1, 4).getValue() == 4) {
             price = inNum * 1.5;
         }

         return price;
     }
4

2 に答える 2

1

TJCrowder が発見したように、受け入れられた回答には重大な弱点があります。カスタム関数は の値に依存していますA4が、その値が変更されても自動的には更新されません。

なんで?最適化のステップとして、スプレッドシートは、編集によって影響を受けると判断したセルのみを更新します。ただし、カスタム関数の内部は分析せず、代わりにスプレッドシートの数式の範囲参照引数に依存します。

関数が の変更に応答することが重要である場合は、それを引数としてA4受け入れるように実装することをお勧めします。したがって、次のようになります。importantFactor

function calculatePrice(importantFactor,inNum) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var price = 0;
  if (importantFactor == 4) {
    price = inNum * 1.5;
  }
  return price;
}

このように使用するにinNumは、 が の値であると仮定しG6ます。

=calculatePrice($A$4,G6)

さらに良いことに、スクリプトなしでこれを実現できます。

=IF($A$4=4, G6 * 1.5, 0)

いずれにせよ、 の内容を変更するとA4、数式を含むセルの再計算がトリガーされます。

于 2013-11-28T22:24:09.853 に答える