2016-07-20 7 views
2

私は、選択した条件に基づいてデータのセットをフィルタリングするために、どこかの同僚がオンラインで見つけたマクロを理解しようとしています。コードの一部は、AutoFilterModeがオフになっているかどうかをチェックするIF文ですのでアドバンストフィルタマクロは、オートフィルタをオフにしてゆっくり実行します。

'Turn on filter if not already turned on 
If Sheets("ORDER DATA").AutoFilterMode = False Then rng.AutoFilter 

非常に次の行が上基づいてデータをフィルタリングする.AdvancedFilterを使用して、オフであることが判明した場合、それを上のトグル私はそれがなかったのように私は、最初の文を取り除くだろうと考えていたので、私のコードでクリーンアップものを維持したいについて比較的OCDだ選択した条件(フィルタと呼ばれる範囲)

rng.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=filter, Unique:=True 

必要と思われる。これを取り除いてから私が見つけたのは、最初のステートメントが削除された場合にフィルタ処理プロセスを実行するにはかなりの時間がかかります。

私は高低のオンラインを検索しましたが、オートフィルタとアドバンストフィルタの関係は何か分かりませんでした。

私の質問はこうです:なぜアドバンストフィルタは、オートフィルタが最初にオンになっていないときに実行するのに時間がかかりますか?

+0

「Autofilter」がオンになっているときにExcelが何らかのキャッシュを保持していて、次に「AdvancedFilter」がそのキャッシュを使用している可能性があります。 – litelite

答えて

0

まず、コードの先頭にこれがあるとしますか?そうでない場合は、それを追加して修正するかどうか確認してください。一番下にリセットオプションがあることを忘れないでください。

With Application 
    .Calculation = xlCalculationManual 
    .ScreenUpdating = False 
    .EnableEvents = False 
End With 
'your code goes here 
With Application 
    .Calculation = xlCalculationAutomatic 
    .ScreenUpdating = True 
    .EnableEvents = True 
End With 

私が言ったように、私はそれがあったと...通常、オートフィルタとadvancedfilterのおかしなと、それがデータで何かあるとされているように、それが解決しなかったと仮定します。だから私はシートを微調整する必要があるときに私が通過する多くのものがあります。これらすべてを試しましたか?

最初に、新しいブックを作成し、古いブックのすべてのデータをコピーして、新しいブックにのみ値を貼り付けます。そのマクロを引き続き使用できるように、最小限に抑えてください。 IE:転送する必要のないボタンなどがある場合は表示されません。余分な用紙が必要ない場合は、用紙を転送しないでください。数式の代わりに値を使用できる場合は、値のみを実行します。しかし、関連するデータセット全体を転送するだけでなく、いくつかのサンプルラインを転送して、できるだけリンゴになるようにしてください。

それでもまだ遅い場合は、コードで奇妙な状況を見ているので、liteliteのようにキャッシュのものがあるかもしれません。あなたが期待しているようにもっとうまくいくなら、それは書式設定のものか、それを乱す他のもののどちらかであることが分かります。

2番目のものは通常は問題であると仮定します。 これらを元のデータでそれぞれ試し、再実行してください。すべての注文は、どちらか一番簡単に始めることができます。私は通常、それぞれの変更後にマクロを再実行し、再度実行する前にこれらのすべてを実行しないで、どの問題が修正されたかを知ることができます。また、私があなたのデータを知らないので、これらのすべてが必ずしも適用されるわけではありません。適用されない場合は無視してください。 まずコピーを作成してコピーに貼り付けます。複数回に渡って修正を見つけた場合は、元のコピーをもう一度作成し、最後の変更のみをコピーに適用し、それがまだ修正されているかどうかを確認してください。

複数のシートがある場合は、余分なシートをすべてコピーして削除してください。使用できるシートの最小量でテストしてください。コピーし

  • すべての非式のデータを、任意の 奇妙なフォーマットの/ etcを取り除くために、特別な/値を貼り付けます。あなたが複数のシートを持っている場合は同様に、以下のニーズのそれぞれは、それらの全てに行われるように、左に。
  • すべての行の表示を解除します。
  • すべてのコメントを削除します。
  • すべての条件付き書式を削除します。
  • すべて選択し、折り返しテキストをオンにしてから、折り返しテキストをオフにします。 (私はこれをMicrosoft Hokey-Pokeyと呼んでいます。チェックマークをつけて、チェックマークをつけてください...)
  • フォームボタン/オブジェクトを持っていれば、それを削除してより速いかどうか確認してください。

最後に、データセット内で何行のデータを処理していますか?

関連する問題