如何在VBA中自引用单元格

ale*_*lex 0 excel vba excel-vba

我有600k行,并希望删除开始和尾随空格.我有以下,但它很慢:

Sub Macro1()
'
' Macro1 Macro
'

'
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "=TRIM(RC[-1])"
    Range("D1").Select
    Selection.AutoFill Destination:=Range("D1:D4")
    Range("D1:D4").Select
    Columns("D:D").Select
    Selection.Copy
    Range("C1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Columns("D:D").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("C1").Select
End Sub
Run Code Online (Sandbox Code Playgroud)

有没有办法可以自己应用这个功能.我想避免在空列中运行函数,然后将值复制到原始列.

我尝试了VBA将公式填写到列的最后一行,以及加快公式.我有几个列可以做到这一点,并想知道是否可以只在C列上工作并修剪空格而不需要额外的计算.

谢谢

Sco*_*ner 5

这不使用第二列并执行C列中的所有值.它将值移动到数组,迭代数组并修剪多余空间并用数组覆盖C中的值.

Sub macro1()
Dim rng As Variant
Dim ws As Worksheet
Dim i As Long

Set ws = Worksheets("Sheet1") 'Change to your sheet name.

With ws
    rng = .Range("C1", .Cells(.Rows.Count, 3).End(xlUp)).Value
    For i = LBound(rng) To UBound(rng)
        rng(i, 1) = Application.Trim(rng(i, 1))
    Next i
    .Range("C1", .Cells(.Rows.Count, 3).End(xlUp)).Value = rng
End With
End Sub
Run Code Online (Sandbox Code Playgroud)