1 つのセルをパラメーターとして取り、Web サービスにクエリを実行して結果を返す VBA モジュールとして実装した関数があります。データのソースがリモートであるため、この関数が戻るまでに数秒かかる場合があります。
問題は、列を削除するなどの一部のアクションによって、変更が必要ない場合でも、すべての数式が再計算されるように見えることです。シートに数百行ある場合、Excel が応答しなくなるまで数分かかることがあります。
変更が不要であることを検出し、この手順をスキップする方法を見つけたいと思います。私が試したいくつかのこと:
- 変更するセルの現在の値を特定します。これにより、更新が必要かどうかを判断できます。ただし、ActiveCell.Value は空白で、セル自体を 2 番目のパラメーターとして渡そうとすると、循環参照の警告が表示されます。
- 古い入力値を保持する 2 番目の列を作成しました。この列は関数に渡され、新しい値と比較されます。ただし、関数は成功時にこの古い値を更新できず、数式のみで更新しようとすると常に循環参照の警告が表示されます。さらに、関数が「変更なし」を返すことができるようには見えないため、古い結果を保存して使用する必要があります。
一部のアクションでシート上のすべての数式が更新されないようにする方法はありますか?
その他の要件:
- 数式の自動計算をすべて無効にする方法もあるかもしれませんが、パラメータのセルが入力されたらすぐに各行が更新されるようにしたいです。また、ユーザーにボタンを押して関数を更新するように強制したくありません。
- Visual Studio でカスタム スプレッドシートを作成しようとしましたが、展開を維持するのが自分のユーザー ベースにとって難しすぎることがわかりました。ソリューションは、マクロが有効なブックに完全に含まれている必要があります。
- シートを使用する Excel のバージョンは 2007 および 2010 になります。