[[20170321164327]] 『処理時間を短縮したい…』(0969) ページの最後に飛ぶ

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

 

『処理時間を短縮したい…』(0969)

投稿
[[20170307114243]] 『タイトル行が2行ある場合の検索&削除』(パピコ) 
について...

同じような処理がしたくて、上記のコードを参考に作成しました。


Sub 処理()

    Dim SH As Worksheet
    Dim e As Long

    Application.ScreenUpdating = False

   For Each SH In Sheets(Array("あああ", "いいい"))

        SH.Select

            For e = SH.Range("A5").CurrentRegion.EntireColumn.Count To 1 Step -1
                If Not "|番号|名称|設定|説明|方法|備考|担当名|" Like "*|" & SH.Cells(5, e).Value & "|*" Then
                    If Not "|A|BB|C|DDD|結合|No.|種類|個数|" Like "*|" & SH.Cells(6, e).Value & "|*" Then
                        SH.Columns(e).Delete
                    End If
                End If
            Next e
    Next SH

    Application.ScreenUpdating = True
 End Sub

使用する上記のコードはほとんどいじっていません。

あああシートには34列のデータがあり、
いいいシートには、48列あります。

どちらも見出し行は2行で、同じようなデータ構成で出来ていますが
あああシートにあって、いいいシートにはない列も多数存在します。

そこで、本題のご相談です。

内部動作は何の問題ないのですが
処理に2分ほど時間がかかってしまいます。

ステップ実行してもとまることはありません。

データが多いためにこんな時間がかかってしまうのでしょうか??
この処理時間がふつうなのであればいいのですが、
出来ればもう少し処理時間を早めたいです…

どこをどう改善すればいいのでは?などのご意見があれば伺いたいです。

厚かましいお願いかと思いますが
よろしくお願いします。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 データ行数がどれくらいあるのかはわかりませんけど、あああシートといいいシートを作成し
 アップされたコードをそのまま実行してみました。

 当方のPC,かなり性能がいいということもあるんですが、実行時間は 0.03秒〜0.04秒です。

 そちらのシート、

 ・数式がたくさん記述されているということはありませんか?
 ・あああシートやいいいシートにChangeイベント等のイベントコードが書いてありませんか?
 ・A5のCurrentRegionを相手にしていますが、4行目は空白行ですか?
 ・もし4行目が空白行ではない場合、1〜4行目、かなり右のほうの列まで値が入っているということはないですか?

( β) 2017/03/21(火) 17:38


(β)様

行は約1800弱あります。

>・数式がたくさん記述されているということはありませんか?

あああシートだけでも3列数式列があり、合わせて5000ぐらいあります。

> ・あああシートやいいいシートにChangeイベント等のイベントコードが書いてありませんか?

イベントコードって「ブックを開く」とか「ブックを閉じる」とかですか?

> ・A5のCurrentRegionを相手にしていますが、4行目は空白行ですか?

4行目は空白ではないです。
1〜4行目の10このセルにもじやら入力しています。

> ・もし4行目が空白行ではない場合、1〜4行目、かなり右のほうの列まで値が入っているということはないですか?

最終列以降には文字や値は入れていません。

1〜4行目に複数値が入っている場合と
4行目が空白の場合では大きく処理時間変わってくるものなのでしょうか?

(0969) 2017/03/21(火) 18:04


 とりあえず

    Application.ScreenUpdating = False のとことを

    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual

    Application.ScreenUpdating = True のところを

    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic

 にして試してみてください。どうなるでしょうか?

(β) 2017/03/21(火) 18:47


(β)様

上記のコード試してみましたが、
3分ほどかかってしまいました。

なので、どうにか4行目を空白にして
処理時間を短縮したいと思います><

ご回答ありがとうございました!
(0969) 2017/03/22(水) 09:34


コメント返信:

[ 一覧(最新更新順) ]


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