[英]What's the difference between Trim() and Trim$() in VBA?
vba中trim
和trim$
什么區別? 今天偶然地當我在vba中使用left和trim函數時,編譯器說cant find project or library
當我用Google搜索它時,在其中一個論壇上,我發現用戶使用的是這樣的
vba.trim("string")
他回答給功能加上前綴vba。 令人驚訝的是它也可以在我的電腦上工作。但是我發現了這些功能
trim and trim$
left and left$
leftb and leftb$
我想知道什么是trim和trim $。 我想找到不同之處,因此我開始在Google上進行搜索,但結果是忽略$字母的修飾。
我只是想知道這一點,我懷疑trim是vba函數,trim $是excel工作表函數。 但是我們有Application.worksheetfunction
可以使用excel函數嗎?有人可以區分trim和trim $。
當Issun回答您的問題時,我有足夠的細節想發表,以提供進一步的答案,而不是發表評論。
根據我多年來測試得出的數據類型,字符串版本的速度明顯更快,大約為10%至30%。 盡管通常這並不明顯,但是在大型數據集上運行時卻有性能差異。 所以對我來說,使用字符串而不是變體版本是很容易的事情。
下面的示例對字符串起作用,因此在此范圍的高端顯示了速度優勢
我在兩個公共加載項中都結合使用了這些函數和變量數組,因為這些程序通常用於整個工作表甚至整個工作簿
對於您的問題, 此鏈接是一個很好的參考,而且不僅僅限於此
vbBinaryCompare
進行比較,而不是在vbTextCompare
進行比較 VbNullString
的速度比""
快,盡管兩者都會錯過包含'
的單元格,而IsEmpty
選擇 AND
分為兩個獨立的IF
以盡早逃脫) Else
路徑運行(即False
測試可能比True
更合適) 在作業的左側使用Mid$
。 從VBA的隱藏功能
Sub QuickTimer1() Dim lngRow As Long Dim dbTime As Double Dim strSample As String Dim strShort As String strSample = "random string" dbTime = Timer() For lngRow = 1 To 50000000 strShort = Left$(strSample, 6) Next lngRow MsgBox Timer() - dbTime End Sub Sub QuickTimer2() Dim lngRow As Long Dim dbTime As Double Dim strSample As String Dim strShort As String strSample = "random string" dbTime = Timer() For lngRow = 1 To 50000000 strShort = Left(strSample, 6) Next lngRow MsgBox Timer() - dbTime End Sub
Trim
是變體版本。 如果在字符串上使用它,它將需要進行不必要的轉換。
Trim$
是字符串版本。 如果在字符串上使用它,請使用它。
有趣的一點: Application.WorksheetFunction
版本的Trim
與VBA的Trim函數有所不同。
值得注意的是, Left / Left $,Mid / Mid $,Right / Right $也具有變體/字符串版本。 在經常循環或使用這些功能的函數中,如果使用變體版本, 則會發現性能下降,盡管對於現代PC而言,它並不龐大,但是當您知道會引起額外的操作時不做某事仍然是一種很好的做法你不需要
trim
接受變量作為其參數,而trim$
接受字符串。
使用trim $有一些性能上的好處(因為您沒有從變體進行轉換),但是您可能不會注意到它們。
編輯:
我通過檢查對象瀏覽器了解了這一點。 在VBA編輯器中時,按F2鍵,您可以搜索函數並更加熟悉該框架。
我相信這種記法是VB時代的遺留物,其中$用來表示作為字符串(或在字符串上操作)的對象/函數。
從功能上講,沒有區別,盡管我知道$
版本據稱更快 ,因為它消除了從變體轉換為字符串的需要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.