パソコン大好き | nekoca.com

パソコンを紹介するサイト

解決!Windows10でエクセルマクロの処理が遅い

time 2020/01/13

解決!Windows10でエクセルマクロの処理が遅い

OSがそろそろWindows10になりましたか?最後のWindowsのバージョンとなり、今後は定期的な大型アップデートは入りますが、以降に新しいWidowsは出ないとのことなので、OSのサポート期限について大きな話題になる事はならないかもしれませんね。

でも、大型アップデートは頻繁にやっているので、これが使用中にやられると困るのでシステム部門の方は大変なのかもしれないですけど・・・。

Windows10でエクセルマクロが遅くなる事が判明

下記の記事でも取り上げました。

解決!Windows10になったらエクセルマクロが動かない

Windows10の機能「クリップボードの履歴」がマクロ処理のスピード低下につながっています。おそらくですが、マクロで「Copy」を実行する部分が大幅に低下しているようです。

クリップボードの履歴をオンとオフでスピードの比較

テストはシート1を100シートコピーするサンプルで行います。

新規のエクセルファイルを作成して、コードの編集画面に下記のコードを張り付けてください。

Option Explicit

Public Sub SheetCopy()
    Dim intLoop As Integer
    Dim strMsg As String
    Dim datStart As Date
    Dim datEnd As Date
    
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
        .Calculation = xlCalculationManual
        .DisplayAlerts = False
    End With
   
    datStart = Now
    
    For intLoop = 1 To 100
        Worksheets.Add after:=Worksheets(Worksheets.Count)
        
        With Worksheets(1)
            .Activate
            .Range("A1:AX20000").Copy
        End With
        
        With Worksheets(Worksheets.Count)
            .Activate
            .Range("A1").PasteSpecial Paste:=xlPasteValues
        End With
    Next
    
    datEnd = Now
    
    strMsg = "Start: " & Format$(datStart, "hh:nn:ss") & "   End: " & Format$(datEnd, "hh:nn:ss")
    
    Call MsgBox(strMsg)
    
    Debug.Print strMsg
    
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
        .Calculation = xlCalculationAutomatic
        .DisplayAlerts = True
    End With
End Sub

100シートをコピーするマクロですが、2度の目実行の時にはコピーした100シートを消すか、新しいエクセルにコードをコピーして実行してください。

※当初、不要シートを削除するようにしておりましたが、事故防止のためにその部分は削除しました。

クリップボードの履歴をオン

一度目は「クリップボードの履歴」をオンにして実行します。

クリップボードの履歴をオン

クリップボードの履歴オンでの結果

Start: 10:53:00 End: 10:54:03

1分3秒でした。

クリップボードの履歴をオフ

二度目はクリップボードの履歴をオフにします。

クリップボードの履歴をオフ
クリップボードの履歴をオフ

クリップボードの履歴をオフでの結果

Start: 10:57:59 End: 10:58:08

9秒となりました!

クリップボード履歴をオンにするとマクロが遅くなるのが確定!

クリップボードの履歴がオン:63秒

クリップボードの履歴がオフ:9秒

比較にならないほどのスピード差となりました。

マクロの処理にもよると思いますが、下記のコマンドについて

  • Copy
  • PasteSpecial

ステップ実行すると、これらが遅い印象ですので、これらを使っているマクロは遅いと思って問題ないでしょう。

クリップボードの履歴はパソコンを使う人の個人設定なので、オフにせよと強制することはできない項目かもしれませんが、問題が発生するよりもましだと思うのでできるだけ「クリップボードの履歴」についてはオフにした方がよさそうですね。

PasteSpecialはもともと早い処理ではありませんので、スピードを速くしたいのであればRangeオブジェクト上でデータのコピーを行うべきなのかもしれませんけど、PesteSpecialを使う必要が出てくる場面もあるかと思います。

その場合はクリップボードの履歴はオフとしましょう!

「クリップボードの履歴」機能をオフにするには下記の記事をご参照ください。

解決!Windows10になったらエクセルマクロが動かない

管理猫について

茶トラ

茶トラ

管理猫の茶トラです!