0

私は、すべてのセルミラーが別のワークシートの同じセルを参照する巨大な Excel ワークシート (数十列にわたる約 40,000 行) を操作します (奇妙なアーキテクチャを気にしないでください。この Excel の巨獣をエクスポートするソフトウェアの制限から来ています。これは当然のことです) このワークシートだけで約 150,000 個のセルを参照しています。他の表のセルを参照する最も速度効率の良い方法は何だろうか。

  • 古典的なエクセルの方法: 次のようなものを使用します:=value(datasheetname!c2)
  • 次のような比較的新しい表のセル参照を使用します。=table_name[@c_rowname_or_number]

この巨大なワークシートをレスポンシブにするために、すでに自動計算を無効にする必要があるため、パフォーマンスの小さな改善はすべて私にとって素晴らしいことです.

助けてくれてありがとう!

4

2 に答える 2

1

まず、正しい問題を調べているかどうかはわかりません。Excelのセルを単純にリンクするパフォーマンスは非常に高いです。私の例のワークブックでは、5Mのセルをリンクし、計算を実行するのにわずか0.4インチしかかかりませんでした。 、大規模なデータセットのいくつかのVLOOKUP数式でも、リンクされたセルの数よりもはるかに大きなパフォーマンスへの影響があります。速度を向上させる方法については、この回答を確認してください。

あなたの質問に答えるために、私はちょうど5Mセルでワークブックにいくつかのタイマーを実行しました。

単純な参照()でそれらをリンクすると=Sheet1!A2、次の結果が得られました:
10x Application.CalculcateFullRebuild:47 "
10x Application.CalculateFull:3,7"

テーブル通知(=Table1[@Column1])で、次の結果が得られました:
10x Application.CalculcateFullRebuild:193 "(4.1x)
10x Application.CalculateFull:5,7"(1.54x)

したがって、どちらの場合も、テーブルの通知は大幅に遅くなります。あなたの場合、.CalculateFullExcelはファイルをロードするか更新するときにのみ計算ツリーを構築し、それ以外の場合は再計算のみを行うため、おそらくより適切です。

于 2013-02-20T08:30:18.073 に答える
1

動的に名前が付けられた参照 (OFFSET を使用) は、参照が非常に大きい場合に大きな影響を与えることがわかりました。シートにこれらのいずれかがあり、必ずしもそこにある必要がない場合 (列数の設定など)、それらを静的参照に変更する必要があります。

于 2013-02-20T15:01:30.427 に答える