在VBA的选定单元上执行修剪function

我想知道是否有一种方法可以在Excelmacros中运行一个简单的函数(TRIM删除重复的空格字符),所以它直接在单元格上执行,所以我不必创build一个额外的列TRIM前一列的function。

它应该在选定的列或只是选定的单元格上工作

Sub trim() ActiveCell.FormulaR1C1 = "=trim(R1C1)" End Sub 

试试这个:

 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 

这将在所有select单元格上工作。 我们使用Intersect()来提高性能。

虽然有一个本地VBA 修剪function ,它只会从左右两端删除空格。 它也不会改变单词之间的双重空间。 为此,可以使用WorksheetFunction对象和工作表的TRIM函数 。

 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 

请参阅如何避免使用在Excel VBAmacros中select对于Application.Selection属性运行代码的更多样板。

对于快速全列修剪, Range.TextToColumns方法效果很好。

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

后一种方法不会去除内部双重空间; 只有领先和尾随的空间。

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

尝试:

 Private Sub Worksheet_Change(ByVal Target as Range) Target.Value = Trim(Target.Value) End Sub 

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

只是尝试与即时窗口

?Application.Trim(“茶匙”)

茶匙

?WorksheetFunction.Trim(“茶poon”)

茶poon

?修剪(“茶匙”)

茶匙

这不是诀窍吗?

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

这会比交叉慢吗?