2011-12-08 2 views
4

私はある範囲に書き込んでいるデータの配列が非常に大きいです。しかし、配列のいくつかの要素だけが変化することがあります。私は範囲全体に配列全体を書いているので、すべてのセルが再計算されていると私は信じています。要素のサブセット、具体的には変更された要素を効率的に記述する方法はありますか?範囲に配列を書き込み、変更されたセルのみを再計算できますか?

アップデート:私は基本的に書き込み時間を節約するためにこのメソッドを次のようだ:特に

http://www.dailydoseofexcel.com/archives/2006/12/04/writing-to-a-range-using-vba/

、私は(彼らは細胞である)すべてのオブジェクトを取り込むプロパティコレクションを持っていると私が必要とするデータ次に、すべてのプロパティをループし、値を配列に書き込み、配列にインデックスを付けて、書き込む範囲の次元に一致させます。最後に、TheRange.Value = TempArrayを使用して、配列にデータを書き込みます。この最後のステップでは全範囲が上書きされますが、実際の値が変更されていないセルでも再計算が行われると思います。

+0

どのようにデータ配列をセルにマップしますか?配列のどの要素が変更されたのか分かりますか?データがコピーされた後 – chance

+0

あなたが戻って自動に、その後、手動に計算方法を変更する考えがあります: Application.Calculation = xlCalculationManual 「あなたの仕事を Application.Calculation = xlCalculationAutomatic – Fink

+0

うん、私は計算を把握しようとしています今のこと - 汚れた細胞にフラグを立てる方法があるかどうか知っていますか? –

答えて

5

は、私はいくつかの基本から始めましょう:

  • あなたは値が同じであっても、セルの範囲に書き込み、Excelがまだ変化と、それを見て、それに応じて再計算します。計算をオフにしても、次に範囲/シート/ワークブックを計算すると、その範囲に依存するすべての値が再計算されます。
  • あなたが発見したように、配列を範囲に書き込むことは、セルごとに書き込むよりはるかに高速です。また、範囲を配列に読み込む方が、セルごとに読み込むよりもはるかに高速です。

変更されたデータのサブセットのみを作成することについては、どのデータが変更されたかを迅速に判断する必要があります。これはおそらく明らかですが、その方法が何であれ、時間がかかりますので、考慮する必要があります。

変更されたデータのみを書き込むには、次の2通りの方法があります。セル単位の書き込みに戻るか、アレイを小さなまとまりに分割します。これらのいずれかが全範囲を書き込むよりも速いかどうかを知る唯一の方法は、3つの方法すべてを試して、のデータでを実行することです。データの90%が変更された場合、ブロック全体を書き込むことは、セルごとに書き込むよりも確実に速くなります。一方、変更されたデータが5%のみを表している場合、セルごとにセルが良好である可能性があります。パフォーマンスは、あまりにも多くの変数に依存して、1つの答えに合うソリューションを提供します。

+3

私は、更新された配列全体をダンプするのではなく、(1)コードに実行時間を追加してテストプロセスを調整する(2)多くの範囲の領域に対処する必要があるため、コードの複雑さを軽減できます。また、配列を使用して単一のセルに書き込むこともできないことにも注意してください。 – brettdj

+0

私は全く同意します! –

+0

私は実際に私の初期のメモに「私はレイチェルに同意します」と言いました。私は最終的に完全なダンプのための私のサポートを与えられた質問者のために少し混乱するかもしれないと思ったので、私はそれを取り出した。 :)テストプロセスが賢明に聞こえます – brettdj

関連する問題