需要在公式中为所有行应用find方法

时间:2013-01-03 04:11:35

标签: vba find formula

我在宏的公式中使用vlookup。但如果它适用于包含超过90k行的纸张,则需要花费太多时间。

相反,我喜欢使用find或Instr方法来减少时间。但是如果我使用“find:方法,我会收到错误。我不知道如何使用”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

1 个答案:

答案 0 :(得分: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")

End Sub

不确定这是否是您正在寻找的,但它的运行速度比VLOOKUP快得多。唯一的问题是,无论何时工作表中发生任何变化,您都必须找到一种方法来自动运行它。