[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『実行時間を早くする』(十六茶)
VBA初心者です。 なんとか下のマクロを作成しました。 実行すると結構な処理時間が掛かります。 早くする方法を御教示お願いします。 又、間違っている箇所がありましたら御指摘ください。 宜しくお願いします。
Sub test()
Application.ScreenUpdating = False
Sheets("sheet3").Select
Dim cnt As Long
Dim i As Long
Dim n As Long
Dim h As Long
Dim k As Long
cnt = WorksheetFunction.CountIf(Sheets("sheet2").Range("H:H"), "F*")
n = 5
h = 10
For i = 1 To cnt
For k = 1 To 17
Cells(n, 1).Value = "0.00"
Cells(n, 2).Value = "0.00"
Cells(n, 3).Value = "0.00"
Cells(n, 4).Value = "0.00"
Sheets("sheet1").Cells(h, "Q").Copy
Cells(n, 5).PasteSpecial Paste:=xlPasteValues
Sheets("sheet1").Cells(h, "R").Copy
Cells(n, 6).PasteSpecial Paste:=xlPasteValues
n = n + 1
h = h + 1
Next
n = n + 4
h = h + 1
Next
Application.ScreenUpdating = True
End Sub
(EXCEL2010でVISTAです)
どの様なデータがどの様なシートにどの様に成るのか サンプルデータと文章を使って 説明しておかれると良いと思います。
(HANA)
コードだけからの単純な変更です。 HANA さんが言っておられるように内容の説明があると 根本的なやり方のアドバイスもあるように思います。 (Mook)
Sub test2()
Sheets("sheet3").Select
Dim cnt As Long
Dim i As Long
Dim j As Long
cnt = WorksheetFunction.CountIf(Sheets("sheet2").Range("H:H"), "F*")
If cnt = 0 Then Exit Sub
Dim arry()
ReDim arry(1 To cnt * 21, 1 To 6)
arry = Range("A5").Resize(cnt * 21, 6)
For i = 0 To cnt - 1
For j = 1 To 17
arry(21 * i + j, 1) = "0.00"
arry(21 * i + j, 2) = "0.00"
arry(21 * i + j, 3) = "0.00"
arry(21 * i + j, 4) = "0.00"
arry(21 * i + j, 5) = Sheets("sheet1").Cells(10 + i, "Q").Value
arry(21 * i + j, 6) = Sheets("sheet1").Cells(10 + i, "R").Value
Next
Next
Range("A5").Resize(cnt * 21, 6) = arry
End Sub
(HANA)さん指摘有難う御座います。 (Mook)さんのマクロをこれから勉強したいと思います。 両名の方お忙しいところ有難う御座いました。 (十六茶)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.