VBA - Doループ+各行をコピペするマクロを高速化したい
以下のマクロを作成しましたが、50行程度あるシートに対し処理を実行~完了するまで約10秒程度かかってしまいます。
シンプルなコードなので、なぜここまで時間がかかってしまうのか、、悩んでいます。
今後、対象データが1000件以上になるケースが想定されるため、処理速度をより高速化したく。
改善方法をご助言頂けますと幸いです。
ちなみに、コード中に記載のとおり、以下はすでに試しました。
Application.ScreenUpdating = False
にして処理を実行する- 貼付け時、「値のみの貼付け」をする
.PasteSpecial Paste:=xlPasteValues
OSはWindows 10、
Excelバージョンは、Microsoft Excel for Office 365 64bit です
マクロの内容
シートws2のA列セルの値(仮にcells(j, "A")とする)の中で、シートws1のA列セルの値(仮にcells(i, "A")とする)と一致するものがあるとき、
range("A" & j, "BA" & j)をRange("A" & i, "BA" & i)にコピペする
一致するものがない場合のみ、range("A" & j, "BA" & j)をシートws1の一番下の空欄列にコピペする
コード
Public ws1 As Worksheet Sub test() Dim ws2 As Worksheet Set ws1 = ThisWorkbook.Worksheets("ws1") Set ws2 = ThisWorkbook.Worksheets("ws2") Dim i As Double Dim j As Double Dim lastRow As Double Dim updated As Boolean Application.ScreenUpdating = False i = 2 Do Until ws2.Cells(i, "A").Value = "" updated = False j = 5 Do Until ws1.Cells(j, "A").Value = "" If ws2.Cells(i, "A").Value = ws1.Cells(j, "A").Value Then ws2.Range("A" & i, "BA" & i).Copy ws1.Range("A" & j).PasteSpecial Paste:=xlPasteValues updated = True Exit Do End If j = j + 1 Loop If updated = False Then lastRow = ws1.Cells(4, "A").End(xlDown).Row ws2.Range("A" & i, "BA" & i).Copy ws1.Range("A" & lastRow + 1).PasteSpecial Paste:=xlPasteValues End If i = i + 1 Loop Application.ScreenUpdating = True End Sub
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/11 09:38