Excelでシート間のデータ移行プログラムをVBAで書いていますが処理が遅く
Excelアプリが落ちてしまうことがあります。
処理を軽くするにはどのようなコードに変更すると良いでしょうか。
ご教示お願いいたします。
やりたいことは以下の通りです。
Sheet1に膨大なデータ(5万行ほど)がありその中から
必要なデータをSheet2に移行します。
Sheet1のデータの内、【品物】→冷蔵庫 【番号】→A007 というデータの担当・室温をSheet2に移行する。
移行先の行の指定はSheet1の時間と比較し、同じ時間が入力されている行とする。
生データと移行後のサンプル画像とコードを添付いたしましたのでご参照ください。
何卒宜しくお願いいたします。
質問投稿後コメント欄にアドバイスをいただき
【For文を1つにまとめる】【dictionary活用】2方法を教えて頂きました。現在変更中です・・・・
その他アドバイスありましたら引き続き教えて頂けますと幸いです。
VBA
1コード 2Application.ScreenUpdating = False 3 4Dim 時間 As String 5Dim 品物 As String 6Dim 番号 As String 7Dim 室温 As String 8Dim 担当 As String 9 10Dim 品物A As String 11Dim 番号A As String 12Dim 時間A As String 13品物A = "冷蔵庫" 14番号A = "A007" 15 16 17Dim LASTROW As Long 18Dim LASTROW2 As Long 19LASTROW = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row 20LASTROW2 = Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row 21 22Dim i As Long 23Dim k As Long 24 For i = 2 To LASTROW 25 時間 = Worksheets("Sheet1").Cells(i, 1).Value 26 品物 = Worksheets("Sheet1").Cells(i, 2).Value 27 番号 = Worksheets("Sheet1").Cells(i, 3).Value 28 室温 = Worksheets("Sheet1").Cells(i, 4).Value 29 担当 = Worksheets("Sheet1").Cells(i, 5).Value 30 31 If 品物 = 品物A And 番号 = 番号A Then 32 33 For k = 2 To LASTROW2 34 時間A = Worksheets("Sheet2").Cells(k, 1).Value 35 36 If 時間 = 時間A Then 37 Worksheets("Sheet2").Cells(k, 2).Value = 室温 38 Worksheets("Sheet2").Cells(k, 3).Value = 担当 39 End If 40 Next k 41 End If 42 Next i 43 44Application.ScreenUpdating = True
回答1件
あなたの回答
tips
プレビュー