在列中加快搜索速度

时间:2015-03-04 12:05:24

标签: vba search vlookup

为了在列中查找特定值并使用下一列中的相应值,我使用下面的代码。虽然它工作得很好,但我正在寻找一种更快的方法来进行搜索。

但是,我想要搜索的列的大小正在增加,您可以在代码的第一部分中看到。

这对于最多几百个值的列化速度来说足够快,但是当它具有超过20000个值时,它实际上正在减慢速度。由于我必须在用户表单中执行此操作十次,因此我希望能够更快地执行此操作。

Public Function LR3() As Long   'Func.loc. HW08
    Worksheets("Sheetname").Activate
    Application.Volatile
    LR3 = Cells(Rows.Count, 1).End(xlUp).Row
End Function

For i = 1 To LR3
    If CStr(Sheet11.Cells(i + 1, 1).Value) = FunctionalLocation.Value Then
        Description.Value = Sheet11.Cells(i + 1, 2).Value
    Else
         'no action
    End If
Next i

2 个答案:

答案 0 :(得分:0)

使用字典,试试这个

Sub test()
Dim Dic As Object, key As Variant, LR3&, oCell As Range
Set Dic = CreateObject("Scripting.Dictionary")
LR3 = Cells(Rows.Count, 1).End(xlUp).Row
For Each oCell In Sheet11.Range("A1:A" & LR3)
    If Not Dic.exists(oCell.Value) Then
        Dic.Add oCell.Value, oCell.Offset(, 1).Value
    End If
Next
For Each key In Dic
    If key = FunctionalLocation.Value Then Description.Value = Dic(key)
Next
End Sub

答案 1 :(得分:-1)

我假设第二个代码片段是从一个较大的Sub中复制出来的,如果是这样的话,知道“FunctionalLocation”和“Description”究竟是什么就会有所帮助。

但我想这就是你想要的:

Sheet11.Description.Formula = "=VLOOKUP(A2:B" & LR3 + 1 & ",2,false)"

Sheet11.Range("C2").AutoFill Destination:=Range("C2:C" & LR3 + 1 & ""), Type:=xlLinearTrend