- ベストアンサー
Excel マクロのループ処理の高速化
- Excel マクロのループ処理を高速化する方法を教えてください。
- マクロで1000回繰り返される処理が遅いです。高速化できる方法はありますか?
- Excel のマクロで、数値の列から無作為に抽出したデータを別のセルにペーストする処理を1000回繰り返すと、遅くなる問題があります。高速化する方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
提示されているコードの高速化なら 取敢えず 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 配列で処理するなど、まだまだ高速化は出来るでしょう
その他の回答 (1)
- mt2015
- ベストアンサー率49% (258/524)
ご提示のコードでは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
お礼
> ご提示のコードではV~Z列は何も入らないように思えますが? Range("C6:C25").Select でした。 > 一旦E6:E20にコピーする理由 こうしないと毎回同じサンプリングになってしまうからです。やむなくしている状況です。 貴重なアドバイスまことにありがとうございました。
お礼
すばやい回答ありがとうございました。早速試してみます。