如何在VBA中自引用单元格

时间:2018-01-30 14:19:22

标签: 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

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

我尝试VBA to fill formula down till last row in column以及加快公式。我有几个列可以做到这一点,并想知道是否可以只在C列上工作并修改空白而不需要额外的计算。

由于

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

更改此类代码,因此您不能使用Select。使用SelectSelection可以放慢速度。

Sub Macro1()
    Range("D1").FormulaR1C1 = "=TRIM(RC[-1])"
    Range("D1").AutoFill Destination:=Range("D1:D4")
    Columns("D:D").Copy
    Range("C1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Columns("D:D").ClearContents
End Sub