1 つ以上の名前付き範囲を削除できるスクリプトがあります。ただし、スクリプトが終了した後、またはフラッシュ コマンドが与えられた後、シートは再計算されません。再計算を強制できる唯一の方法は、空のセルに新しい数式を物理的に挿入するか、既存の数式を変更することです。
トリガーするためだけに使用してみましたSpreadsheetApp.flush()
が、シートに目に見える変更がない場合、再計算は発生しません。
これは欠陥ですか、それとももっと賢明なアプローチがありますか?
1 つ以上の名前付き範囲を削除できるスクリプトがあります。ただし、スクリプトが終了した後、またはフラッシュ コマンドが与えられた後、シートは再計算されません。再計算を強制できる唯一の方法は、空のセルに新しい数式を物理的に挿入するか、既存の数式を変更することです。
トリガーするためだけに使用してみましたSpreadsheetApp.flush()
が、シートに目に見える変更がない場合、再計算は発生しません。
これは欠陥ですか、それとももっと賢明なアプローチがありますか?
実際、INDIRECT は依存関係をスキップし、セルの変更時に常に再計算します。このため、可能な限り INDIRECT を避けることをお勧めします。
そのため、セルを変更するだけで再計算できます。
範囲を削除してもセルは変更されないため、INDIRECT は再計算されません。
スプレッドシートに対して実行されたアクションが数式に影響を与えない場合、再計算は行われません。たとえば、名前付き範囲を削除しても、その名前付き範囲が数式で参照されていない限り、再計算の影響はありません。(その場合、スプレッドシートは削除によって破損した可能性があります。)
Spreadsheet.flush()
再計算を強制しません。保留中の変更をスプレッドシートに書き込むことだけが想定されています。(そして、その変更が式に影響を与えない場合は...おわかりでしょう。)
最終的な結果は、説明したソリューションが残っていることです。計算に関係するセルを更新する必要があります。式を置き換えるとうまくいきます。申し訳ありませんが、これには魔法の呪文はありません。