2017-08-11 9 views
1

他の特定のセルに数値が含まれている場合、そのセルといくつかの他のセルの値を使用するカスタム関数をGoogle Apps Scriptに書きます結果を計算する。それ以外の場合、特定の他のセルに数値が含まれていない場合、関数は空の文字列を返すだけで、アクティブなセルは空白に見えます。
私はこれを行うために働く関数を考え出すことができましたが、機密情報を保護するためにここではコピーしません。しかしGoogle Apps Script - 別のセルの値に応じてアクティブセルの数式を設定する

function myFunction() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var rowNum = sheet.getActiveCell().getRow(); 
    var rowVals = sheet.getRange(rowNum, 1, 1, 15).getValues(); 

    var fVal = rowVals[0][5]; 
    if (fVal == "" || isNaN(fVal)) { 
    return ""; //leave cell blank if column F doesn't contain a number 
    } 

    var aVal = rowVals[0][0]; 
    var bVal = rowVals[0][1]; 
    var cVal = rowVals[0][2]; 
    var gVal = rowVals[0][6]; 

    return ((gVal * fVal) + aVal + bVal + cVal); 
} 

それをスピードアップする(そしてまた、あなたがする必要がありますので、ここで説明しようとするために複雑になるいくつかの他の理由ための努力で、:の代わりに、ここで同じことを実現例の機能がありますちょうど私を信頼してください)、私はカスタム関数を計算する代わりに、セルの値を式に設定する必要があります。最初のセルに数式を入れるだけでは機能しません。なぜなら、列Fに数値が含まれていなくても計算結果を表示するからです。ここで は、私がこれまで試したものです:

function myFunction2() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var rowNum = sheet.getActiveCell().getRow(); 
    var fVal = sheet.getRange(rowNum, 6).getValue(); 

    if (fVal == "" || isNaN(fVal)) { 
    return ""; //leave cell blank if column F doesn't contain a number 
    } 

    var formula = '=SUM((G2*F2)+A2+B2+C2)'; 

    return formula; 
} 

^これだけのセルが文字列「= SUM((G2 * F2)+ A2 + B2 + C2)」を表示させます。

は、だから私は、その後、アクティブセルにsetFormulaを使用してみました:

function myFunction3() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var cell = sheet.getActiveCell(); 
    var rowNum = cell.getRow(); 
    var fVal = sheet.getRange(rowNum, 6).getValue(); 

    if (fVal == "" || isNaN(fVal)) { 
    return ""; //leave cell blank if column F doesn't contain a number 
    } 

    cell.setFormula('=SUM((G2*F2)+A2+B2+C2)'); 
} 

^私は、細胞内の関数を呼び出したときに、「あなたはsetFormulaを呼び出すためのアクセス許可がありません」というエラーが返され、。同様のことが、アクティブなセルのa1表記を取得し、setFormulaを直接呼び出す代わりにgetRange(a1Notation).setFormula( '= SUM((G2 * F2)+ A2 + B2 + C2)アクティブセル。

権限エラーの回避方法はありますか?これを達成するための他のアイデアがありますか?

答えて

0

それは私がやったことですので、私は実際に、私は内蔵のIF functionを使用して欲しかったものを達成するための方法を考え出すことになりました。

1

権限エラーは、ユーザー定義関数が実行できる制限があるためです。ただし、このようなのonEditでこれを行うことができます。

function onEdit(e) { 
var ss=SpreadsheetApp.getActiveSpreadsheet() 
var s=ss.getActiveSheet(); 
var col = e.range.getColumn(); 
var rowNum = e.range.getRow(); 
if(col==6){ 
    var fVal = s.getRange(rowNum,col,1, 1).getValue() 
} 
    if (fVal == "" || isNaN(fVal)) { 
     return 
    } 
     else{ 
     s.getRange(rowNum,col,1, 1).setFormula('=SUM((G2*F2)+A2+B2+C2)'); 
    }} 
+0

ありがとうございます!私はそのようなことをすることを考えましたが、これはスプレッドシートがかなり編集されているので、過度/非効率なようでした。 onEditを高価で時間を掛けて使用していますか? – LJW

+0

私はonEditが問題になることはありませんでした。このスクリプトは列Fに限定されています。複数のシートがある場合、特定のシートにさらに制限することができます。列Fでコードを実行し、スクリプトエディタに進みます。メニューから[View]を選択し、[Execution Transcript]を選択します。それは合計実行時間を表示します。私の実行時間は0.126秒でした。次に、別の列に何かを入力します。列Fでないときは、実行時間は0.002秒です。この答えがあなたの問題を解決するなら、答えを承認してください。ありがとう。 –

関連する問題