TRIM function/remove spaces from cells using VBA

前端 未结 3 670
名媛妹妹
名媛妹妹 2021-02-08 05:43

I am using the code below to trim some \"blank cells\" that contain a space. The thing is it takes too much time, as is looping to every cell. What I want is to remove the spac

相关标签:
3条回答
  • 2021-02-08 06:06

    Do it on the whole range at once using the array version of Excel's Trim:

    myRange.Value = Application.Trim(myRange.Value)
    

    Using the only variables visible in your code, it would be:

    With Range(Cells(1,1), Cells(ScenarioTableLastRow, ScenarioTableLastColumn))
         .Value = Application.Trim(.Value)
    End With
    
    0 讨论(0)
  • 2021-02-08 06:13

    You'll get much better performance copying the data into an array, and working on the array, then placing the data back into the range.

    Also, don't use Excel.Application.Trim. That's Excel 95 syntax, and a late-bound call with unexpected error handling. VBA has a Trim function built-in - it's about 10 times faster and it provides Intellisense.

    Sub test()
    
        'Assuming ScenarioTable is a range
        Dim ScenarioTable As Range
        Set ScenarioTable = Range("ScenarioTable")
    
        'I assume your range might have some formulas, so...
        'Get the formulas into an array
        Dim v As Variant
        v = ScenarioTable.Formula
    
        Dim a As Long
        Dim f As Long
        'Then loop over the array
        For a = LBound(v, 1) To UBound(v, 1)
            For f = LBound(v, 2) To UBound(v, 2)
                If Not IsEmpty(v(a, f)) Then
                    v(a, f) = VBA.Trim(v(a, f))
                End If
            Next f
        Next a
        'Insert the results
        ScenarioTable.Formula = v
    End Sub
    
    0 讨论(0)
  • 2021-02-08 06:27

    For some reason Worksheetfunction.Trim does not remove the spaces, maybe because it has CRLF in it. In those cases Application.Clean function is the best method to choose.

    0 讨论(0)
提交回复
热议问题