Q&A

回答の並べ替え:
投稿新規に質問を投稿する

シート切替時にウィンドウを最大化しているとパフォーマンスが低下する現象について

tdrk tdrk

2021-12-06 15:26

現在、以下のようなアプリを作成しており
「最大化をした状態でシートの切替を行うとパフォーマンスが低下する」
という現象が発生しています。

【アプリ概要】
シートA、B、Cがあり、それぞれシート起動時にDBからデータを取得して表示。
各シートでは、取得した値を参照し多数のセルで数式による計算(乗算・除算・SUMなど)を行っているほか、
他のシートのセル(数式セルを含む)を直接参照しておりシート起動時に他シートのデータ取得処理も実行。
 例:シートAを表示時…Aのデータを取得後、B、Cのデータ取得アクションも実行
   シートBを表示時…Bのデータを取得後、A、Cのデータ取得アクションも実行
   シートCも同様

※各シートは縮尺100%だとウィンドウを最大化しても表示しきれず、縦横スクロールが発生するサイズです。
 それぞれウィンドウのデフォルトサイズは35.0 * 25.0cmの100%表示としています。
 (実行環境の画面解像度は1920 * 1080)

【発生している現象】
例えばシートAからCに表示を切り替えると、シートCの表示が完了するまで約5秒ほどかかります。
シートサイズが大きい上に扱うデータ量も多いため5秒かかるのは妥当だと思っています。

ところが「シートAを最大化してからCに表示を切り替える」と約4倍(20秒ほど)かかります。
シートAを最大化し、元のデフォルトサイズに戻してから切替をしても約4倍の時間がかかっています。

このように「シートを一度でも最大化するとパフォーマンスが低下する」というのはCELFの仕様なのでしょうか?
この現象について回避策等ありましたらご教示いただけますと幸いです。

tdrk tdrk
ご回答いただきありがとうございました。

データ量が多く、計算式も多数埋め込まれているため時間がかかっているようでした。
アクションで計算するという方法を参考にしてみます。
どうもありがとうございました。
Yexiongmao Yexiongmao
メダルベストアンサー
こんにちは。

シートサイズが大きく扱うデータ量もおいとのことですが、シートの表示に時間がかかるのは、表示のタイミングで式が再計算されるためだと思われます。
一度表示を最大化をするとそのシートがデフォルトサイズに戻ってもすべての計算式を再計算してから表示されるのでは無いかと思います。
シートAがシートB、Cを参照し、シートB、Cも同様であれば、すべてのシートのビジブルでないセルの式も再計算されていると思われます。
これを防ぐには、セルに式を埋め込むのをやめて、アクションで計算結果をセルに書き込むようにするのが良いと思います。
セルに式を埋め込む方法は、データの最大量以上のセルに予め式を埋め込んで置かなければなりません。
そのため、式にIFやIFERRORなどが必須になっていると思います。
更にVLOOKUPやSUMIFなどがあれば再計算に相当な時間が掛かります。
また、式をコピーで配置すると、周辺のセルを挿入、削除などをした際に、何かの加減で一つだけセルの式が変わっていたなどという事が起きる可能性もあり、トラブル発生時にすべての式を再確認しなければならないような事になりかねません。
アクションで参照値が変更されたときに必要なセルのみに計算結果を書き込むようにすれば、シートが軽くなり、またメンテナンスも容易になると思います。