リスト オブジェクト (別名 Excel テーブル) を使用する Excel アプリケーションのパフォーマンスに問題があります。バグの可能性があると思いますが、グーグルで検索しても、それに関する参照は見つかりませんでした。私はすでに自分のアプリケーションの回避策を開発しましたが、私が興味を持っているのは、なぜこれが起こるのかについて誰かが洞察できるかどうかです.
注: Windows Vista で Excel 2007 を使用しています。セットアップは次のとおりです。 リスト オブジェクトにデータを保持するスプレッドシートがあり、コマンド ボタンから起動できる VBA コードがあります。このコードは、ワークシートの任意の数のセルに対して複数の編集を行う可能性があるため、編集前に Excel の計算モードを [手動] に設定します。
私が遭遇した問題は、現在アクティブなセルがリスト オブジェクト内にある場合、計算モードを手動に設定してもまったく効果がないように見えることです。そのため、ユーザーがたまたま重い計算ブックを同じインスタンスで開いている場合、VBA コードの実行速度は非常に遅くなります。これがアクティブなセルによって引き起こされていることを発見するために、実際にはアプリケーションを分解する必要がありました。そして、このシナリオの単純なバージョンで新しいワークブックを作成して、アプリケーションに何らかの破損がないことを確認しました。
私はこれを使って多くのテストケースを行ってきました.以下は私が見つけた結果です:
一般的には計算に関係しているように見えますが、手動と自動で計算モードを切り替えると、まだ時間差があります...
- 手動 = 7.64 秒
- 自動 = 9.39 秒
手動モードは、自動よりも 20% 未満高速です。しかし、問題は手動モードでも計算が開始されるように思われることを考えると、それらは多かれ少なかれ同じになると予想していました。
アクティブ セルがリスト オブジェクト上にない場合と比較すると、結果は大きく異なります...
- 手動 = 0.14 秒
- 自動 = 3.23 秒
現在、手動実行は 50 倍高速であり、自動実行では計算に 3.2 秒以上かかることはありませんでした! したがって、最初のテストでは、手動モードでは計算が 2 回実行され、自動モードではほぼ 3 回計算が実行されたように見えます。
このテストをもう一度繰り返します。今度はどのセルにも計算式がないインスタンスで、突然それほど悪くないように見えます。
- アクティブ セルが List オブジェクトで、Calc が手動 = 0.17 秒
- アクティブ セルが List オブジェクトで、Calc が自動 = 0.20 秒
- アクティブ セルが空で、Calc が手動 = 0.14 秒
- アクティブなセルは空で、計算は自動 = 0.18 秒
まだ遅くはありますが、現在は 10 ~ 20% に過ぎず、目立たなくなりました。しかし、これは、問題が何らかの方法で計算に関連している必要があることを示しています。それ以外の場合は、最初のテストと同じくらい時間がかかったはずです。
これらのテストを作成して自分で確認したい場合は、次のようにセットアップします。
- リスト オブジェクトが追加された新しいワークブック (データにリンクする必要はありません)
- 計算にしばらく時間がかかる数式を追加します(「= 1 * 1」を30,000回繰り返しました)
- 簡単な VBA コードを記述します。(i) セルの単純な編集を数百回ループし、(ii) かかった時間を記録します。
- 次に、リストオブジェクトと空のセルの間でアクティブセルを変更しながらコードを実行します
Excel がこのように動作する理由を誰かが説明できるかどうか、また、それがバグなのか、それとも実際に実際に使用されている List Objects に関する機能なのかを聞いてみたいと思います。
ありがとう、スチュアート