1

我在宏的公式中使用 vlookup 。但是如果应用于包含超过 90k 行的工作表则需要太多时间。

相反,我喜欢使用 find 或 Instr 方法来减少时间。但是如果我使用“查找:方法”,我会收到错误消息。我不知道如何使用“Instr”

Sub testt()

Dim l As Long

l = Sheets(1).Range("A1:A" & Sheets(1).Cells(Sheets(1).Rows.Count, "A").End(xlUp).Row).Count
    With Sheets("Sheet1")
        .Range("d1").Formula = "=IF(iferror(vlookup(c1,$D:$D,1,false),"""")="""","""",1)"
        .Range("d1").AutoFill Destination:=Range("d1:d" & l), Type:=xlFillDefault
    End With
End Sub

这是我的 vlookup 公式。但我需要用 find 替换 vlookup

l = Sheets(1).Range("A1:A" & Sheets(1).Cells(Sheets(1).Rows.Count, "A").End(xlUp).Row).Count
    With Sheets("Sheet1")
        .Range("d1").Formula = "=IF(iferror(range("A1:A" & l).find(c1),"""")="""","""",1)"
        .Range("d1").AutoFill Destination:=Range("d1:d" & l), Type:=xlFillDefault
    End With
4

1 回答 1

0

我所知道的 Excel 中没有 FIND 函数。但是,您可以编写一个 VBA 函数来查找查找列中的每个相关单元格。这是相关的代码:

Function IfFound(SearchText As String) As String

Dim FoundCell As Range

'look in particular column for a value
Set FoundCell = Columns("A:A").Find(What:=SearchText, lookat:=xlWhole)

'if found, return value in cell to its right
If FoundCell Is Nothing Then
    IfFound = ""
Else
    IfFound = FoundCell.Offset(0, 1).Value
End If

结束功能

你可以这样称呼它:

Sub TestFunction()

'make sure word TEST is in column A somewhere
MsgBox IfFound("test")

结束子

不确定这是否是您要查找的内容,但它的运行速度会比 VLOOKUP 快得多。唯一的问题是,当工作表中发生任何更改时,您必须找到一种自动运行它的方法。

于 2013-01-03T17:33:53.840 回答