2017-02-23 8 views
0

私はワークシートの1行をループし、別のExcelファイルに保存されている追加データをルックアップする(それをBBBと呼ぶ)Excelファイル(これをAAAと呼ぶ)にVBAマクロを持っています。 データを検索するには、BBBのデータをフィルタリング、並べ替え、検索する必要があります。 BBBですべてのアクションを実行するのではなく、まずAAA(およびBBBを閉じる)の余分なワークシートに値を貼り付けてコピーすると、計算時間(すなわち速度)に関して何かが得られるでしょうか? 重要なのは、BBBにはプレーンな値しか入っておらず、数式もないからです(各繰り返しで大量のデータを再計算する危険はありません)。ローカルワークシートのデータをコピーする方が効率的ですか?

+5

コードを見ずに伝えるのは難しいです。すべてが機能している場合は、代わりに[コードレビュー](http://codereview.stackexchange.com/)にコードを投稿してください。質問のガイドラインは異なるので、最初に[質問する](http://codereview.stackexchange.com/help/how-to-ask)ページを読んでください。 – Comintern

答えて

0

あなたの質問に直接お答えください。コンパイラは次の何にもコストBBBへのポインタを使用している

Dim wbBBB as workbook 
Set wbBBB = etc etc 

ので、元のブックにデータを移動せずに他のブックを参照して自由に感じる:いいえ、非常に少ないあなたは、BBBのための変数を宣言しました。 Select文などを避けるように注意してください。常にActiveCellからではなく直接データを参照してください。

ワークシートからの読み書きは、例外的に非常に高価です。 1つの例外は、範囲の内容を配列に格納するのが非常に高速であることです。だから私はAAAを配列に、BBBを配列に読み込むことをお勧めします。両シートはD500の範囲A1内のデータを持っていると仮定すると、例えば:次に

Dim aaa() as Variant, bbb() as Variant 

aaa = sheets("myAaaSheet1").Range("A1:D500").Value 
bbb = sheets("myBbbSheet1").Range("A1:D500").Value 

の代わりに、ワークシートでの作業は配列を扱います。この質問の対象外の配列で作業する方法はたくさんありますが、オンラインでたくさんの情報を見つけることができます。 cpearson.com/excel/ArraysAndRanges

関連する問題