hiroshi akutsuの日記

主にプログラミング関係のこと

Excel【VBAでCopyメソッドやPasteメソッド、PasteSpecialメソッドがやたら遅い】

下記は、何も悪いことはしていない、何の変哲もないVBAスクリプトだが、
こんなのの実行に30秒程度かかるなんて信じられるだろうか。

Sub test()

    Dim i As Integer
    Dim ra As Range
    
    Dim myra As Range
    Set myra = Range("A1:K1")
    myra.Value = 1
    For Each ra In myra
        i = i + 1
        ra.Copy ra.Offset(i)
    Next ra

End Sub

環境はWindows7(64bit)、Excel2013(64bit)、RAM:24G、Core i7である。
不思議なことに上記コードが一瞬で終わる人(PC)もいる。

なんでPCスペックは申し分ないのに、こんなに時間がかかるんだろうと思って、調査開始。


2016年3月ぐらいから急にvbaのPaste処理の実行が重くなりだした。
その時たまたま更新プログラムをインストールしたのでそれが原因かと思った。

一旦エクセルの重くなりそうな処理をすべてオフにして、セキュリティもがばがばにして、PC自体パフォーマンス優先にして、ウイルス対策ソフトを停止したり、不要なファイルを削除したりした。

こんだけやっても、遅いまま。。。
さらにofficeをセーフモードで立ち上げてみても変わらず、PCをセーフモードで立ち上げたら今度はofficeのアプリケーションが起動できず、お手上げ状態。

あと考えられるのはクリップボードを経由するので、エクセルとは別のプロセスが悪さしてんだろうなと思って、msconfigを立ち上げて、スタートアップの不要そうなプログラムのチェックを外した。

再起動をかけ、マクロを実行すると、嘘のような速さ。
30秒かかっていた処理が一瞬で終わった!

一つ一つチェック外しては再起動をかけてを繰り返して調べていくと、なんとDropBoxが原因でした。。。

私のPC以外にも同様の現象に遭遇している人がいたので、その人のDropBoxもmsconfigのスタートアップでOFFにしたところ、見事現象が直りました。

f:id:hakoniwahaniwa:20160405150115p:plain

さすがにこれは、原因なかなか気づかないや。まさかDropboxとは。。。
更新プログラムが影響していたのかどうかまでは不明。