VBA中的Trim()和Trim $()有什么区别?

时间:2011-11-02 14:42:35

标签: excel vba excel-vba trim

vba中trimtrim$之间的区别是什么?在今天我在vba中使用left和trim函数时,编译器说cant find project or library

当我用Google搜索时,在论坛上我发现用户使用了这些

 vba.trim("string")

他回答用vba作为函数的前缀。并且令人惊讶的是它也在我的电脑上工作。但我找到了这些功能

 trim and trim$ 
 left and left$ 
 leftb and leftb$

我想知道什么是修剪和修剪$。我想找到差异所以我开始谷歌它但结果是修剪忽略$ alphabet。

我只是很想知道它。我怀疑修剪是vba功能,修剪$是excel表功能。但我们有Application.worksheetfunction使用excel功能吗?任何人都可以区分修剪和修剪$。

4 个答案:

答案 0 :(得分:21)

虽然Issun已按照要求回答了您的问题,但我有足够的详细信息要发布,以提供进一步的答案而非评论。

字符串版本 明显更快〜约10-30%,具体取决于我多年来的测试数据类型。虽然这通常不明显,但在大型数据集上运行时,性能会有所不同。所以对我来说,使用字符串而不是变体版本是明智的。

下面的示例适用于字符串,因此它在此范围的较高端显示速度优势

我已经在我的public addins中将这些函数与变量数组结合使用,因为这些程序通常用于整个工作表甚至整个工作簿

对于您的问题,

This link是一个很好的参考,远远超出

  1. vbBinaryCompare而不是vbTextCompare
  2. 中进行比较
  3. 优化空字符串
  4. 更换前的测试
  5. 使用内置常量,VbNullString""快,但两者都会错过包含'的单元格,而IsEmpty会选择此内容
  6. 优化循环(将AND分成两个单独的IF以提前逃脱)
  7. 优化如果测试首先返回最常见的布尔结果而不是通过Else路径(即False测试可能比True更合适)
  8. 在作业的左侧使用Mid$。来自hidden features of 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
    

答案 1 :(得分:9)

Trim 是变体版本。如果在字符串上使用它,则需要进行不必要的转换。

Trim$ 是字符串版本。如果您在字符串上使用它,请使用此选项。

有趣的注意事项:Application.WorksheetFunction Trim版本与VBA的修剪功能有所不同。

值得注意的是,左/左$,中/中$,右/右$ 也有变体/字符串版本。在经常循环或使用这些函数的函数中,如果使用变体版本, 注意到性能损失,尽管使用现代PC并不是很大,但是当你知道时不做某事仍然是好的做法它会引起你不需要的额外步骤。

答案 2 :(得分:5)

trim接受变量作为参数,而trim$接受字符串。

使用trim $有一些性能优势(因为你没有从变种中转换),但你可能不会注意到它们。

编辑:

我通过检查对象浏览器来解决这个问题。当您在VBA编辑器中时,按F2键可以搜索功能并更熟悉框架。

答案 3 :(得分:2)

我认为符号是VB日的遗产,其中$用于表示(或操作)字符串的对象/函数。

从功能上讲,虽然我理解$版本为alleged to be faster,但没有区别,因为它不需要将变体转换为字符串。