簡體   English   中英

VBA中的Trim()和Trim $()有什么區別?

[英]What's the difference between Trim() and Trim$() in VBA?

vba中trimtrim$什么區別? 今天偶然地當我在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%。 盡管通常這並不明顯,但是在大型數據集上運行時卻有性能差異。 所以對我來說,使用字符串而不是變體版本是很容易的事情。

下面的示例對字符串起作用,因此在此范圍的高端顯示了速度優勢

我在兩個公共加載項中都結合使用了這些函數和變量數組,因為這些程序通常用於整個工作表甚至整個工作簿

對於您的問題, 此鏈接是一個很好的參考,而且不僅僅限於此

  1. vbBinaryCompare進行比較,而不是在vbTextCompare進行比較
  2. 優化空字符串
  3. 更換前進行測試
  4. 使用內置常量, VbNullString的速度比""快,盡管兩者都會錯過包含'的單元格,而IsEmpty選擇
  5. 優化循環(將AND分為兩個獨立的IF以盡早逃脫)
  6. 優化If測試以首先返回最常見的布爾結果,而不是通過Else路徑運行(即False測試可能比True更合適)
  7. 在作業的左側使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM