• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マクロの処理速度が遅くなってしまいました)

マクロの処理速度が遅くなってしまいました

このQ&Aのポイント
  • エクセル2000から2003にバージョンアップしたところ、マクロの処理速度が遅くなってしまいました。
  • 具体的には、sheet2にあるデータを変数に格納して簡単な計算をし、その結果をsheet1に入力する処理が、エクセル2000の時は約0.7秒かかっていましたが、エクセル2003にすると約1.4秒かかるようになりました。
  • 処理速度が遅くなる原因や改善策を教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • Gocho_
  • ベストアンサー率50% (1/2)
回答No.1

実行環境がExcelのバージョン以外は 同一という条件のもとに検証しました。 余計なSelectを消したり、 >KeKKa(i, j) = Data(i, j) + Data(i, j) を KeKKa(i, j) = Data(i, j) * 2 に変更して、データの参照回数を減らしたり、 などして、ゼロコンマ数秒の改善はできました。 そもそも、どの処理にどれだけの時間がかかっているのかを 調べてみると 一回あたり 0.7秒弱に対して Sub サンプルの最後の Range(Cells(1, 1), Cells(2000, 199)) = KeKKa で0.5秒強を要していました。 つまり、大量のメモリ空間のデータをエクセルのデータに転記 するのに時間がかかっているようです。 ためしに、質問者さんの環境で、 Range(Cells(1, 1), Cells(2000, 199)) = KeKKa をコメントアウトして実行してみてください。 それで、劇的に早くなるのであれば、 メモリ不足や、メモリ領域に連続した空き領域がないため、 時間がかかっている可能性があります。 2000より2003の方が起動した状態でのメモリの使用量は 多いはずですので(たぶん) Sub タイム計測() Dim myStart As Single Dim j As Integer Application.ScreenUpdating = False For j = 1 To 5 myStart = Timer Call サンプル Sheet3.Cells(j, 1) = Timer - myStart Next Sheet3.Select Application.ScreenUpdating = True End Sub Sub サンプル() Dim i As Integer, j As Integer Dim Data As Variant, KeKKa(1 To 2000, 1 To 199) As Integer Data = Range(Sheet2.Cells(1, 1), Sheet2.Cells(2000, 199)) For i = 1 To 2000 For j = 1 To 199 KeKKa(i, j) = Data(i, j) * 2 Next Next Range(Sheet2.Cells(1, 1), Sheet2.Cells(2000, 199)) = KeKKa End Sub

okranta
質問者

お礼

確かに   Range(Sheet2.Cells(1, 1), Sheet2.Cells(2000, 199)) = KeKKa の部分をコメントアウトすると約1秒ほど短縮されました。 おっしゃる通りメモリ不足が原因と思われます。  機能面を考慮するとエクセル2003を使いたいのですが、単純な計算だけならエクセル2000の方が効率がいいのかもしれませんね。微妙なところです。  どうもありがとうございました!

関連するQ&A

専門家に質問してみよう