- ベストアンサー
ExcelのVBA配列に関する質問|データ処理の高速化について
- ExcelのVBAを使用して、sheet1のデータをsheet2に表示する処理を作成しています。
- 処理に時間がかかるため、配列を使用して高速化を試みましたが、データが正常に表示されません。
- sheet1のみ配列を使用した場合は正常に表示されています。どこが間違っているのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>test2は、エラーメッセージ等は表示されませんが、sheet2にデータが表示されません。 >test2は、どこが間違っているのでしょうか? 最後に結果配列をSheet2へ戻してやらないといけないのでは? Worksheets("Sheet2").Range("A1:DZ10018").Value = dataRange2 以上です。
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
For i = 7 To endrow ←これは縦でしょう。縦と横はどちらが長いと言ったら、やっぱり縦では? それも、どんなに長くても、間断なく一列しかないはずです。それを一括して写せばよいのではないでしょうか? だから、「 For i = 7 To endrow」って、意味がないと思うのです。 ループは、飛び飛びでも、行でなく、列方向だと思います。 Test2 は、発想そのものは同じものだから、速くはなっても、対して変わらないような気がしますね。 '// Sub TestValueCopy() Dim Ar As Variant, Ar2 As Variant Dim i As Long, m As Long Dim Sh1 As Worksheet, Sh2 As Worksheet Set Sh1 = Worksheets("Sheet1") Set Sh2 = Worksheets("Sheet2") 'ここに列番号を書き加える Ar = Array(2, 28, 31, 32) Ar2 = Array(1, 8, 9, 10) m = Sh1.Range("A7", Sh1.Cells(Rows.Count, 1).End(xlUp)).Rows.Count Application.ScreenUpdating = False For i = 0 To UBound(Ar) Sh2.Cells(26, Ar2(i)).Resize(m).Value = Sh1.Cells(7, Ar(i)).Resize(m).Value Next i Application.ScreenUpdating = True Set Sh1 = Nothing Set Sh2 = Nothing End Sub
お礼
ご丁寧にありがとうございました。 両シートとも200列近くデータがあるので、大幅な改修は時間的に難しいようです。 機会があれば、試してみます。 お世話になりました。
お礼
ありがとうございました。 肝心なことが抜けていたんですね。 おかげさまで、うまく表示されるようになりました。 1分30秒⇒10秒へ大幅スピードアップできました。 お世話になりました。