【问题标题】:Using Application.WorksheetFunction.Trim to trim a range of cells使用 Application.WorksheetFunction.Trim 修剪一系列单元格
【发布时间】:2019-06-30 17:49:20
【问题描述】:

我正在尝试使用Application.WorksheetFunction.Trim 修剪一系列单元格。我正在尝试定义我的范围,但出现类型不匹配错误

我创建了 Dim 并设置了我的范围并为函数创建了一个变量。

Dim rng As Range
Dim myanswer

Set rng = ActiveSheet.Range("T2:T10")
myanswer = Application.WorksheetFunction.Trim(rng)

这是我的另一个代码

Dim rng As Range
Dim LastRow As Long

LastRow = Cells(Rows.Count, "T").End(xlUp).Row
Set rng = Range("T2:T" & LastRow)

Application.WorksheetFunction.Trim (rng)

我希望它修剪每个单元格以消除多余的空格。

也试过用这个,但内存不足。

rng = Application.WorksheetFunction.Trim(Cells.Value)

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    Trim() 需要字符串参数。 Application.WorksheetFunction.Trim (rng) 中的参数是一个 Range,只有当该范围由单个单元格组成时,才能解析为字符串。

    Trim()给定范围内的所有单元格,它们应该被循环:

    Public Sub TestMe()
    
        Dim myCell As Range
        For Each myCell In Worksheets(1).Range("A1:A5")
            myCell = WorksheetFunction.Trim(myCell)
        Next myCell
    
    End Sub
    

    【讨论】:

    • 这行得通。谢谢。所以 WorksheetFunction 适用于单个单元格。好的,我明白了。
    【解决方案2】:

    您的代码不起作用,因为您需要遍历每个单元格,您不能一次完成所有操作

    Dim rng As Range, r as range
    Dim myanswer
    
    Set rng = ActiveSheet.Range("T2:T10")
    for each r in rng    
         r.value=Application.WorksheetFunction.Trim(r)
    next r
    

    您可以使用 Evaluate 避免循环

    Sub x()
    
    Dim r As Range
    
    Set r = Range("T2:T10")
    
    r = Evaluate("IF(" & r.Address & "="""","""",TRIM(" & r.Address & "))")
    
    End Sub
    

    请注意,工作表函数 TRIM 删除了多余的内部空格,而 VBA Trim 只删除了前导和尾随空格(无论如何你都已经涵盖了)。

    【讨论】:

    • 在我的大型数据集上,循环到 43 秒,而 Evaluate 在眨眼之间完成
    猜你喜欢
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多