VBAで質問があります。 別添画像を見ていただきたいのですが、 黄色セルの数値を切り上げして配列に入れる → 青色セルへ転記 という処理をしています。
VBAで質問があります。 別添画像を見ていただきたいのですが、 黄色セルの数値を切り上げして配列に入れる → 青色セルへ転記 という処理をしています。 テストデータなので、10行のデータが8つですが、、、 実際のデータは、20行のデータが30くらいあって、、、 以下のコードでは処理が遅いです。。。 早く処理するにはどうしたらいいのでしょうか? どなたか、よろしくお願いします。 Sub test() Dim Cnt Dim k, c, r Dim Box(79) Application.ScreenUpdating = False '黄色列を切り上げして配列に格納 Cnt = 0 For k = 0 To 1 For c = 3 To 12 Step 3 For r = 1 To 10 Box(Cnt) = WorksheetFunction.RoundUp(Cells(r + k * 19, c), 0) Cnt = Cnt + 1 Next r Next c Next k '配列データを青色セルへ転記 Cnt = 0 For k = 0 To 1 For c = 14 To 17 For r = 1 To 10 Cells(r + k * 19, c) = Box(Cnt) Cnt = Cnt + 1 Next r Next c Next k MsgBox "END" End Sub
Visual Basic | Excel・56閲覧
ベストアンサー
EXCELはセルへの書き込みが遅いんです。 http://officetanaka.net/excel/vba/speed/s11.htm 折角配列へ代入しているのですから、書き込みは1回で済ませます。 Sub OneCase() Const ROW_COUNT As Long = 10 Const COLUMN_COUNT As Long = 4 Dim dataArray1(1 To ROW_COUNT, 1 To COLUMN_COUNT) As Long, dataArray2(1 To ROW_COUNT, 1 To COLUMN_COUNT) As Long Dim i As Long, j As Long, cnt As Long Application.ScreenUpdating = False cnt = 1 For i = 3 To 12 Step 3 For j = 1 To 10 dataArray1(j, cnt) = WorksheetFunction.RoundUp(Cells(j, i).Value, 0) dataArray2(j, cnt) = WorksheetFunction.RoundUp(Cells(j + 19, i).Value, 0) Next j cnt = cnt + 1 Next i Range("N1").Resize(UBound(dataArray1), UBound(dataArray1, 2)) = dataArray1 Range("N20").Resize(UBound(dataArray2), UBound(dataArray2, 2)) = dataArray2 Application.ScreenUpdating = True MsgBox "END" End Sub
1人がナイス!しています
質問者からのお礼コメント
素晴らしいです。 速度がめちゃくちゃ早くなりました。 ありがとうございます。 完璧です。
お礼日時:7/4 22:11