在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
这会比交叉慢吗?