次の方法で共有

ExcelVBAでオートフィルタの方がAdvancedFilterより高速なのは何故?

Anonymous
2014-03-05T02:03:16+00:00

業務で「フィルタをかけつつグラフをPDF出力する」という処理を、指定したフォルダ配下の全ファイルに対して実行するというマクロを作成しました。

これを実行した時、AdvancedFilterを実行する行で異常に時間がかかってしまいます。(1時間/回)

対象となるExcelファイルは千切ったビッグデータ(csvで60GB超)をさらに限界まで千切っているため、これ以上のスリム化は不可能です。

    160MB (xlsx)

    構成:データシート1:76列×387728行、データシート2:76列×29256行、グラフシート(PDF出力対象)×2、その他ワークシート×2

    フィルタ項目値: データシート1、2とも120文字

PDF出力は問題ありません。

また、データシート内には計算式等は存在しません。

(グラフのタイトル部作成のために配列関数等は別シートに存在します)

ファイルサイズが小さければAdvancedFilterが高速なのですが、

基本的に元データがビッグデータのため、出力対象のExcelファイルサイズは100MBを越えてしまいます。

さらに、出力対象ファイルは私が作成するわけではないので書式云々について指定できません。

素人考えではオートフィルタの実行行はマルチコアで動作し(ているように見えた)、

AdvancedFilterはシングルコアで動作しているため処理が分散できず、CPU1個分の能力しか使えていないからではないかと思ったのですがどうなのでしょうか?

実際問題として、現在の速度では運用に耐えられません。

ファイルサイズが大きい場合はオートフィルタの方が高速なのでしょうか?

それともAdvancedFilterで高速化する手立てがあるのでしょうか?

よろしくお願いします。

※1回1時間というのはデバッグモードで「AdvancedFilter()」の1行を実行した時にかかった時間です。

※フィルタはすべて完全一致。

開発者テクノロジ | Visual Basic for Applications

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

1 件の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2014-03-06T01:14:45+00:00

    kyo_icho556 さん、こんにちは。

    マイクロソフト コミュニティをご利用いただき、ありがとうございます。

    VBA の AdvancedFilter で行う処理と、オートフィルターで処理時間に差があるのはなぜかという質問ですね。

    まず、 AdvancedFilter と オートフィルターの CPU を使った処理について、情報を調べてみましたが、有力な情報は見つからず解りませんでした。。

    AdvancedFilter は VBA を使った処理になるので、 VBA コードを見直してみるとよいかもしれません。

    専門の VBA フォーラムがあるので、こちらのフォーラムに作成されている VBA コードを記載し、修正点などがないか質問として投稿してみてはいかがでしょう。

    Visual Basic for Application (VBA)

    よろしければ、ご活用くださいね。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません