我有一個使用InStr()在字符串中定位字符的函數,但我知道Excel中有一個名爲FIND()的內置函數。任何人都可以建議哪個更快或更高cpu效率?Excel VBA中的哪個更快:InStr或Find?
hours_position = InStr(1, value, " ")
VS
hours_position = Application.WorksheetFunction.Find(" ", value, 1)
我有一個使用InStr()在字符串中定位字符的函數,但我知道Excel中有一個名爲FIND()的內置函數。任何人都可以建議哪個更快或更高cpu效率?Excel VBA中的哪個更快:InStr或Find?
hours_position = InStr(1, value, " ")
VS
hours_position = Application.WorksheetFunction.Find(" ", value, 1)
兩者是相同的,它做同樣的動作。
大多數(但不是全部)工作表函數也可以從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對象。但是,這些服務的目的不同:您不能使用它們來搜索字符串中的文本,而是搜索具有指定內容的單元格。
'WorksheetFunction.Find'與'= FIND('相同,witch是InStr的公式版本,如果沒有找到則返回#NA,而不是從InStr返回的0 – SeanC
[比賽你的馬](https://ericlippert.com/2012/12/17/performance-rant/) – Filburt
他們有不同的目的:'InStr()'用於查找**中的子字符串一弦。 Find()用於在多個字符串中查找字符串(如在單元格中)。我使用'InStr()'通過向數組傳遞範圍,循環它們並使用'InStr()'來創建更快的Find()版本。所以你應該定義你的目的和測量差異 –
@paulbica'Find()'用於特定範圍的單元格。我糾正或丟失了什麼嗎? –