2013-01-03 28 views
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但我需要更換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 

回答

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運行更迅速。唯一的問題是,當工作表中發生任何更改時,您都必須找到自動運行的方法。

+0

謝謝隊友。公式=「= if(iferror(FoundCell = Columns(」A:A「))。Find(What:= SearchText,lookat:= xlWhole),」 「」「)=」「」「,」找不到「,找到) – newjenn

+0

比這更簡單 - 你可以寫一些類似於: Range(」D1「)。Value = IfFound(」無論你正在尋找什麼文字「 ) 但是,由於VBA函數是「volatile」,所以這個計算會很慢,這意味着Excel每次在單元格中輸入任何內容時都會重新計算它們(它沒有關於哪些函數可以被忽略的概念,製造),這會打敗你想要做的! –

+0

是的伴侶。即時通訊試圖找到更好的方法來做vlookup – newjenn

相關問題