2017-09-06 841 views
0

我有一個使用InStr()在字符串中定位字符的函數,但我知道Excel中有一個名爲FIND()的內置函數。任何人都可以建議哪個更快或更高cpu效率?Excel VBA中的哪個更快:InStr或Find?

hours_position = InStr(1, value, " ") 

VS

hours_position = Application.WorksheetFunction.Find(" ", value, 1) 
+8

[比賽你的馬](https://ericlippert.com/2012/12/17/performance-rant/) – Filburt

+2

他們有不同的目的:'InStr()'用於查找**中的子字符串一弦。 Find()用於在多個字符串中查找字符串(如在單元格中)。我使用'InStr()'通過向數組傳遞範圍,循環它們並使用'InStr()'來創建更快的Find()版本。所以你應該定義你的目的和測量差異 –

+0

@paulbica'Find()'用於特定範圍的單元格。我糾正或丟失了什麼嗎? –

回答

2

兩者是相同的,它做同樣的動作。

大多數(但不是全部)工作表函數也可以從VBA調用。例如,您可以通過調用Application.WorksheetFunction.VLookup(或Application.VLookup)在VBA中使用VLOOKUP工作表函數。

同樣,您可以使用Application.WorksheetFunction.Find和Application.WorksheetFunction.Search。您可以使用它們來模擬工作表函數在VBA代碼中的工作方式。

這些功能僅在Excel VBA中,而InStr函數是一個通用的VBA函數,在所有Office應用程序中提供(在VB6,VB.NET等)

除此之外,在Excel中Range對象VBA具有Find方法,而Worksheet對象具有Find對象。但是,這些服務的目的不同:您不能使用它們來搜索字符串中的文本,而是搜索具有指定內容的單元格。

+0

'WorksheetFunction.Find'與'= FIND('相同,witch是InStr的公式版本,如果沒有找到則返回#NA,而不是從InStr返回的0 – SeanC