• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel マクロのループ処理の高速化)

Excel マクロのループ処理の高速化

このQ&Aのポイント
  • Excel マクロのループ処理を高速化する方法を教えてください。
  • マクロで1000回繰り返される処理が遅いです。高速化できる方法はありますか?
  • Excel のマクロで、数値の列から無作為に抽出したデータを別のセルにペーストする処理を1000回繰り返すと、遅くなる問題があります。高速化する方法を教えてください。

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

提示されているコードの高速化なら 取敢えず Sub Test()   Dim N As Long   Application.ScreenUpdating = False   For N = 1 To 1000     With Range("E6:E20")       .Value = Range("C6:C20").Value       Cells(N + 5, "G").Resize(, 15).Value = Application.Transpose(.Value)     End With   Next N   Application.ScreenUpdating = True End Sub 配列で処理するなど、まだまだ高速化は出来るでしょう

musume12
質問者

お礼

すばやい回答ありがとうございました。早速試してみます。

その他の回答 (1)

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.2

ご提示のコードではV~Z列は何も入らないように思えますが? CopyやSelect、Pasteを使うと遅くなります。 ScreenUpdatingで画面の更新を押さえると大分早くなりますが出来ればCopyやSelect、Pasteを使わない方が良いです。 G~U列に張り付けるコードを作ってみました。 また、一旦E6:E20にコピーする理由も良く解らなかったので直接C6:C20の値を使用しています。 Sub Sample()   For N = 1 To 1000     RangeStr = "G" & CStr(N + 5) & ":" & "U" & CStr(N + 5)     Range(RangeStr).Value = WorksheetFunction.Transpose(Range("C6:C20").Value)   Next N End Sub

musume12
質問者

お礼

> ご提示のコードではV~Z列は何も入らないように思えますが? Range("C6:C25").Select でした。 > 一旦E6:E20にコピーする理由  こうしないと毎回同じサンプリングになってしまうからです。やむなくしている状況です。 貴重なアドバイスまことにありがとうございました。