我正在研究一個由一系列表格和幾個宏組成的大型項目。我需要逐月更新的主要報告是21K行,並在不斷增長。它在12個獨立的專欄中收集所有12個月的更新。要完成「更新」,我必須匹配包含在列「A」中的主文件中的部件號(21k行是所有部件號及其信息),並將其與部件號生成的另一報告相匹配(此時包含在柱9 sht1的代替Vlookup找到大20k行表嗎?
地點的值由變量
地點指定列7 sht1的值設置爲SHT柱:柱「B」),並且如果它匹配(需要被精確匹配),下面的返回SHT柱27
地點塔11 SHT 1至SHT柱34
每次匹配時的值,由RO循環排w,直到列A中包含的最後一個零件編號在sht中。
下面的代碼有效,但我想知道是否有更好的方法我應該寫這個?這對於處理速度和準確性來說是最好的嗎?我剛剛在另一個代碼塊中意識到,這種方法沒有執行完全匹配,現在已經拋出了一面紅旗,可能會改變我的方法。我絕對需要這樣做是準確的,它必須完全匹配,或者將內容留空。
'Set variable with cell range value for ABC Code based on month selected by User
Dim ABCCodeCell As Integer
Dim wb1 As Workbook
Dim wb2 As Workbook
Dim sht1 As Worksheet
Dim sht As Worksheet
Dim lRow As Long
Dim rng As Range
Set wb1 = Workbooks(vFileName1) 'ABC Matrix File
Set wb2 = Workbooks(vFileName2) 'Cycle Count Remainder Browse File
Set sht = wb1.Worksheets(1) 'ABC Matrix File
Set sht1 = wb2.Worksheets(1) 'Cycle Count Remainder Browse File
lRow = sht.Cells(sht.Rows.Count, 1).End(xlUp).Row
Select Case ABCMatrixMonthSelect.ComboBox1.value
Case "January": ABCCodeCell = 21
Case "February": ABCCodeCell = 23
Case "March": ABCCodeCell = 25
Case "April": ABCCodeCell = 3
Case "May": ABCCodeCell = 5
Case "June": ABCCodeCell = 7
Case "July": ABCCodeCell = 9
Case "August": ABCCodeCell = 11
Case "September": ABCCodeCell = 13
Case "October": ABCCodeCell = 15
Case "November": ABCCodeCell = 17
Case "December": ABCCodeCell = 19
End Select
'Execute Find (Vlookup)
On Error Resume Next
For i = 2 To lRow
If sht.Cells(i, 1).value <> "" Then
Set rng = sht1.Range("B:B").Find(sht.Cells(i, 1).value)
If Not rng Is Nothing Then
sht.Cells(i, ABCCodeCell).value = sht1.Cells(rng.Row, 9).value
sht.Cells(i, 27).value = sht1.Cells(rng.Row, 7).value
sht.Cells(i, 34).value = sht1.Cells(rng.Row, 11).value
End If
End If
Next
@Tim Williams就是這樣。我只是不得不重寫它,因爲我之前發佈過它,但沒有人回覆,所以我在幾天後刪除了它。謝謝! - 雅典娜,又名SharePoint0508 – SharePoint0508
它對我來說看起來不錯...目前它運行速度太慢嗎?你是否在使用'Application.ScreenUpdating = False,Application.Cursor = xlWait'等等?有什麼特別不起作用?這對Code Review來說可能是一個更好的問題。 – dwirony
*我剛剛在另一個代碼塊中實現,這種方法沒有執行完全匹配,*,這是什麼意思? – dwirony