在VBA中对选定的单元格执行修剪功能

时间:2016-05-03 14:00:35

标签: excel vba excel-vba

我试图弄清楚是否有一种方法可以在Excel宏中运行一个简单的函数(TRIM去除重复的空格字符),因此它直接在单元格上执行,所以我不必使用TRIM前一列的函数创建一个额外的列。

它应该适用于选定列或仅选定的单元格

Sub trim()

 ActiveCell.FormulaR1C1 = "=trim(R1C1)"

End Sub

5 个答案:

答案 0 :(得分:9)

尝试一下:

Sub TrimAndFit()
    Dim r As Range

    With Application.WorksheetFunction
    For Each r In Intersect(Selection, ActiveSheet.UsedRange)
        r.Value = .Trim(r.Value)
    Next r
    End With
End Sub

这适用于所有选择 ed单元格。我们使用Intersect()来提高效果。

答案 1 :(得分:4)

虽然存在本机VBA Trim function,但它只会从左端和右端移除空格。它也不会将单词之间的双重空格更改为单个空格。为此,您可以使用WorksheetFunction object和工作表的TRIM function

Sub myTrim()
    dim rng as range
    for each rng in Selection
        'use only one of these
        rng = Trim(rng.Value)
        rng = WorksheetFunction.Trim(rng.Value)
    next rng 
End Sub

有关How to avoid using Select in Excel VBA macros属性运行代码的更多样板,请参阅Application.Selection

对于快速全列修剪,Range.TextToColumns method效果非常好。

Sub myTrim2()
    Dim col As Range
    For Each col In Selection.Columns
        col.TextToColumns DataType:=xlFixedWidth, FieldInfo:=Array(0, 1)
    Next col
End Sub

后一种方法不会删除内部双重空间;只有前导和尾随空格。

将程序和/ pr函数命名为与现有函数相同并不是一个好主意,除非您有意要覆盖该函数。

答案 2 :(得分:1)

尝试:

Private Sub Worksheet_Change(ByVal Target as Range)

Target.Value = Trim(Target.Value)

End Sub

这会将您在工作表中更改的任何单元格更改为单元格值的裁剪版本。

答案 3 :(得分:0)

只需尝试即时窗口

  

?Application.Trim("茶匙")

茶匙

  

?WorksheetFunction.Trim(" teas poon")

茶叶

  

?修剪("茶勺")

茶匙

答案 4 :(得分:0)

不会这样做吗?

Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False

这会比相交慢吗?