目次
※この記事は他の記事と統合をおこないました。申し訳ありませんが下記をご参照ください。
解決!Windows10になったらエクセルマクロが動かないまた、下記ではWindows11での検証も行いました。
Office365 Windows11でエクセルマクロは遅くなるのか?クリップボードの履歴をオン
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になったらエクセルマクロが動かない