基本的に2つのワークブックの参照番号と一致し、関連する情報を新しいワークシートに書き込んでいるときに、問題が発生しました。まず、サイズについていくつかの詳細を教えてください。ブックの1つには1987行と66列があり、もう1つには15645行と13列があります。コードの後の新しいワークシートには、5643行と41列があります。私の場合は平均コードが2分10秒で長すぎます。私はコードを高速化するためにいくつかのことを試みましたが、うまくいかなかったのです。どのような助けでもありがとう!VBAコードの高速化
Sub take_swap_values()
With Application
.ScreenUpdating = False
.DisplayStatusBar = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With
Dim h, f As Long
Dim r As Integer
h = Application.WorksheetFunction.Count(Workbooks("swap.xlsx").Sheets("Sheet3").Range("$B$2:$B$1987"))
f = Application.WorksheetFunction.Count(Workbooks("swp_fwd.xlsm").Sheets("Sheet1").Range("$A$2:$A$5645"))
Workbooks("swap.xlsx").Activate
Workbooks("swp_fwd.xlsm").Activate
Workbooks("swp_fwd.xlsm").Sheets("Sheet2").Cells(1, 1).Value = Workbooks("swp_fwd.xlsm").Sheets("Sheet1").Cells(1, 1).Value
For i = 1 To h
For j = 1 To f
If Workbooks("swap.xlsx").Sheets("Sheet3").Cells(i, 2).Value = Workbooks("swp_fwd.xlsm").Sheets("Sheet1").Cells(j, 1).Value Then
For k = 1 To 40
Workbooks("swp_fwd.xlsm").Sheets("Sheet2").Cells(j, k).Value = Workbooks("swap.xlsx").Sheets("Sheet3").Cells(i, k)
Next k
End If
Next j
Next i
With Application
.ScreenUpdating = True
.DisplayStatusBar = True
.Calculation = xlCalculationAutomatic
.EnableEvents = True
End With
End Sub
技術的には、バグを修正するのではなく、作業コードを改善するためのアドバイスが必要な場合は、ここではなく[codereview.se]にコードを投稿する必要があります。ただし、3つのネストされたループが広い範囲で繰り返されます。アプローチが急速になる可能性は低い – Dave
このコードのスピードを上げるために行ったことを投稿し、この質問の質を大幅に向上させるでしょう。 –
これをSQL文で書き直すことができるようです。それはかなり速くなければならない。 –