[[20200707103738]] 『オートフィルタの高速化』(じょあ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『オートフィルタの高速化』(じょあ)

1.3万件くらいの行数があって、別のワークシートのセルの番号を参照してフィルタの条件を変更するマクロを書きました。
正常に動くのですが、ソートを変えるだけで5秒くらいかかります。もう少し早くならないかと考え、Screenupdatingを追加してみましたが体感変わらず。
Rangeの指定をC列のみに変えても変わらずでした。
何か良い方法があればアドバイスいただけないでしょうか。

Application.ScreenUpdating = False

    Dim Ws1 As Worksheet
    Set Ws1 = Workbooks("A.xlsm").Worksheets("Data") 
    Dim ws2 As Worksheet
    Set ws2 = Workbooks("A.xlsm").Worksheets("差分確認")

    Dim i As String
    i = ws2.Range("A2")
        With Ws.Range("A1:Q" & Ws.Cells(Rows.Count, "A").End(xlUp).Row)
        .AutoFilter field:=3, Criteria1:=i
        End With
Application.ScreenUpdating = True

< 使用 Excel:Office365、使用 OS:Windows10 >


データ量が多そうなので、列数やセルの内容によっては、仕方ないかもです。

もし、数式で計算している箇所があるならば、Application.Calculation を手動にしてから処理し、終了後に自動に戻してみてください。
(???) 2020/07/07(火) 11:00


???様
早速コメント頂きありがとうございました。
Application.Calculationも試してみたのですが計算式が無いので変わりませんでした。(当たり前ですが...)
頂きましたご助言で試しにデータ量を10分の1くらいに減らしたところ1秒以内で終わりました。
やはりデータが多すぎるのですね。何か工夫できないか考えてみます。
(じょあ) 2020/07/07(火) 11:14

advancedfilterを試してみてはそうでしょうか。

(マナ) 2020/07/07(火) 12:17


 >正常に動くのですが、ソートを変えるだけで5秒くらいかかります
 AutoFilter後にソートすると
 という意味ですか?
(seiya) 2020/07/07(火) 12:46

マナ様
アイディアありがとうございました。Advancedfilter勉強して試してみたのですが、オートフィルターと併用はできなさそうですね。既にオートフィルターがかけられており、そちらは再設定しないまま、追加で1項目のフィルターをセルを参照して変更したいので、今回はオートフィルターでやってみます。

seiya様
上記コードを動かすと(あるセルの数字を参照させてオートフィルターを動かすと)、動作が完了するまでに5秒くらいかかります。
手動でフィルタをかけても同じくらいかかるので、やはりデータ量が問題のような気がしました。
1.6万件データがあったので、作業前にデータを絞り込む事にしました。
(じょあ) 2020/07/07(火) 18:40


 事前にソートしてからAutoFilterしても変わりませんか?
(seiya) 2020/07/07(火) 19:22

seiya様
事前にソートしてから上記コードを動かしているのですが5秒くらいかかります。
この作業(ソートの切り替え)を何度もやるので、すべてのデータから「フィルタの対象にならないデータ」を除外した別シートを作成して(対象となるデータを極力減らして)動かすことにしました。
(じょあ) 2020/07/08(水) 08:49

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.