• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCEL2003 VBAで動作が速くなるようにマクロ記述したいのです)

Excel2003 VBAで動作が速くなるようにマクロ記述する方法

このQ&Aのポイント
  • Excel2003でVBAを使用してマクロを記述し、動作を高速化する方法について教えてください。
  • 現在、Excel2003でVBAを使用してマクロを作成していますが、動作が遅くなってしまいます。どのようにすれば動作を速くすることができるでしょうか?
  • Excel2003のVBAマクロを最適化して高速化する方法について教えてください。

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

  • ベストアンサー
  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.5

forで回さなければいないのですか。 単に領域のコピペに見えますが。 それでいいなら,下記でどうですか,ずっと速いですよ。 なお,R1C1形式にそろえました。 Sub CommandButton1_Click1() Dim i, i0 Dim n, sh1, sh2 Set sh1 = Worksheets("sheet1") Set sh2 = Worksheets("Sheet2") With sh1 .Cells(1, 6).Value = .Cells(1, 6).Value + 1 n = .Cells(1, 6).Value Application.ScreenUpdating = False i0 = 1 i = 300 Range(.Cells(i0, 1), .Cells(i, 1)).Copy sh2.Cells(i0, n).PasteSpecial Paste:=xlValues Application.ScreenUpdating = True End With End Sub

zaq_zaq_zaq
質問者

お礼

仰るとおりForで回す必要性を考えたところ入りませんでした。 ホントに早いですね。 一瞬で結果表示されます。 拡張性も高そうなマクロなので大変勉強になりました。 ありがとうございました。

その他の回答 (5)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

Sub CommandButton1_Click1()  Dim N As Long  N = Worksheets("Sheet1").Range("F1").Value + 1  Worksheets("Sheet1").Range("F1").Value = N   Worksheets("Sheet2").Cells(1, N).Resize(300).Value = _   Worksheets("Sheet1").Cells(1, 1).Resize(300).Value End Sub 必要に応じて、これで挟む必要があるかもしれませんが、それは結果をみて決めればよいと思います。 Application.Calculation = xlManual  ・  ・ Application.Calculation = xlAutomatic Application.ScreenUpdating = False は、シートの上をループして動かなければ不要ですが、試してみてから決めてください。

zaq_zaq_zaq
質問者

お礼

.Valueでコピーする方法もあるのですね。 早いですね! 大変参考になりました。 ありがとうございましたm(__)m

  • hananoppo
  • ベストアンサー率46% (109/235)
回答No.4

これでいいのでは? Private Sub CommandButton1_Click() Dim n As Integer Application.ScreenUpdating = False n = Worksheets("Sheet1").Range("F1").Value + 1 Worksheets("Sheet1").Range("F1").Value = n Worksheets("Sheet1").Range("A1:A300").Copy Worksheets("Sheet2").Cells(1, n).PasteSpecial Paste:=xlValues Application.CutCopyMode = False Application.ScreenUpdating = True End Sub

zaq_zaq_zaq
質問者

お礼

一瞬で結果表示されます!! マクロの記述の仕方で全く処理スピードが変わるもんなんですね。 ビックリしました。 ありがとうございました。

  • conanthe
  • ベストアンサー率65% (114/175)
回答No.3

こんにちは。ハンドルネームconantheです。 おそらくシートに変更が加えられるたびに再計算が行われるので遅くなっていると思われます。プロシージャの最初と最後に、次のコマンドを入れてみてください。最初のコマンドで再計算をオフにし、最後のコマンドでオンにします。 Sub CommandButton1_Click1() Application.Calculation = xlManual ・ ・ ・ Application.Calculation = xlAutomatic End Sub

zaq_zaq_zaq
質問者

お礼

自動再計算の停止&再開というコマンドもあるのですね。 参考になりました。 ありがとうございましたm(__)m

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

#1ですが、申し上げたかったのは以下の2点。 1)For文中のScreenUpdatingの設定をFor文外で行う。 2)代入式の見直し 2)はともかく、1)は変更必須です。

zaq_zaq_zaq
質問者

お礼

For文中のScreenUpdatingの設定をFor文外で行うだけで全然処理スピードが違いますね。 これは一つ勉強になりました。 ありがとうございましたm(__)m

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

Application.ScreenUpdating = False For I = 1 To 300   Worksheets("sheet2").Cells(I, N).value = Worksheets("sheet1").Value Next Application.ScreenUpdating = True でどうなります?

関連するQ&A