• 締切済み

excelのマクロが遅くなりました

今回パソコンをVistaに更新しました。 excel2000で使っていたソフトを2007に移植して使用したところ、マクロが非常に遅くなった気がします。 パソコンは以前のものはペンティアム4の3..4GHZ、今度のものはCore 2 Quad Q9550です。 性能的には格段に優れているはずなのに、合点がいきません。 こうなる理由が分かりましたら、教えてください。

みんなの回答

  • end-u
  • ベストアンサー率79% (496/625)
回答No.4

#3です。すみません。 今、提示コードを試してみたら全然影響ありませんでした。 忘れてください...orz #言い訳) #9月頃、何度も検証した時は有意な結果だったんですが #情報として古かったようです。ごめんなさい。 #またまたしばらく修行の旅に出ます...XD

kage789
質問者

お礼

わざわざ具体的な例を示していただき、ありがとうございました。

すると、全ての回答が全文表示されます。
  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

Option Explicit Private Declare Function timeGetTime Lib "winmm.dll" () As Long '------------------------------------------------- Private Function timechk(t As Long) As Long   Static chk As Long   timechk = t - chk   chk = t End Function '------------------------------------------------- Sub test()   Const x = 100   Const y = 1000   Dim i As Long   Dim v, w(4, 2)   Application.ScreenUpdating = False   With Workbooks.Add(xlWBATWorksheet)     With .Worksheets(1).Cells(1).Resize(y, x)       .Value = "abcde"       w(0, 1) = "Events=True"       w(0, 2) = "Events=False"       w(1, 0) = "v = .Value"       w(2, 0) = ".ClearContents"       w(3, 0) = ".Value = v"       w(4, 0) = "計"       For i = 1 To 2         Call timechk(timeGetTime)         v = .Value         w(1, i) = timechk(timeGetTime)         .ClearContents         w(2, i) = timechk(timeGetTime)         .Value = v         w(3, i) = timechk(timeGetTime)         Application.EnableEvents = False       Next       Application.EnableEvents = True     End With     w(4, 1) = w(1, 1) + w(2, 1) + w(3, 1)     w(4, 2) = w(1, 2) + w(2, 2) + w(3, 2)     .Sheets.Add.Cells(1).Resize(5, 3).Value = w   End With   Application.ScreenUpdating = True End Sub こんなコードでちょっと実験してみた事があります。 PCの性能にもよりますが、xl2000では1secかからない処理です。2007だと4secかかります。 ただ、2回目のLoopは、Application.EnableEvents = False を入れているため1sec程度に改善します。 ClearContentsメソッドやセル範囲への配列書込み時など、 『イベントプロシージャがない場合でもEnableEventsプロパティは制御したほうが良い』 みたいです。 上記は一例に過ぎませんが、処理内容によっては、バージョンを意識したコーディングが必要という事なのでしょう。 ちょっとした工夫をする事で、少しは改善するかもしれません。

すると、全ての回答が全文表示されます。
  • flowergoo
  • ベストアンサー率38% (13/34)
回答No.2

Excel2007自体が重いのではないでしょうか。 Excel2007も含めてOffice2007は大幅に変わっているようです。 私も2007で実行した所、非常に重くなった上に関数等の互換性も100%ではありません。 最初からExcel2007推奨?関数で組み直した方が良いかも知れません。

kage789
質問者

お礼

回答ありがとうございました。 解決方法は作り直せ、ですか。 残念です。

すると、全ての回答が全文表示されます。
  • FEX2053
  • ベストアンサー率37% (7995/21384)
回答No.1

Excel2000と2007は全く別物のソフトですから、VBAの一部のコードに ついて処理が極端に遅くなることは充分にありえます。 一度VBAをステップ実行して、コードのどこが遅いか解析したほうが 良いんじゃないかと思いますよ。意外な場所で処理時間を食うことが あります。例えば、変数の型を定義せず、「型変換をしつつシートに 書き込む」ような処理があると遅くなることがありますので。 2003以前->2007の、VBA処理つきの変換は、動作しなくなることすら ある結構危険なコンバートです。業務で使っているなら、可能な限り 2003までで使うようにするか、2007で1から作り直すかして下さい。

kage789
質問者

お礼

回答ありがとうございました。 ソフトの問題ですか。 期待していただけにがっかりです。

すると、全ての回答が全文表示されます。

関連するQ&A