我正在研究一个由一系列表格和几个宏组成的大型项目。我需要逐月更新的主要报告是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