• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ExcelのVBAの配列に関する質問です。)

ExcelのVBA配列に関する質問|データ処理の高速化について

このQ&Aのポイント
  • ExcelのVBAを使用して、sheet1のデータをsheet2に表示する処理を作成しています。
  • 処理に時間がかかるため、配列を使用して高速化を試みましたが、データが正常に表示されません。
  • sheet1のみ配列を使用した場合は正常に表示されています。どこが間違っているのでしょうか?

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

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.1

>test2は、エラーメッセージ等は表示されませんが、sheet2にデータが表示されません。 >test2は、どこが間違っているのでしょうか? 最後に結果配列をSheet2へ戻してやらないといけないのでは?  Worksheets("Sheet2").Range("A1:DZ10018").Value = dataRange2   以上です。    

rose1224
質問者

お礼

ありがとうございました。 肝心なことが抜けていたんですね。 おかげさまで、うまく表示されるようになりました。 1分30秒⇒10秒へ大幅スピードアップできました。 お世話になりました。

その他の回答 (1)

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

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

rose1224
質問者

お礼

ご丁寧にありがとうございました。 両シートとも200列近くデータがあるので、大幅な改修は時間的に難しいようです。 機会があれば、試してみます。 お世話になりました。

関連するQ&A