我有以下字符串:
ABCD1234 ABCD1234
我想用换行符替换双倍空格,但保留空格后的任何文本
以下是我正在尝试的内容:
.Replace what:=" *", replacement:=Chr(10), lookat:=xlPart
它确实用换行替换了空格,但删除了空格后面的其余字符串
我希望替换操作仅匹配字符串
后面有文本的情况答案 0 :(得分:1)
星号*
与文本的其余部分匹配,因此文本的其余部分将被替换。
你说你只想替换这两个空格,所以你不应该包括星号。
如果你想替换两个或多个空格,那么AFAIK的Range.Replace函数不支持实际的正则表达式(你可以指定“两个或多个空格”),所以你不得不求助于使用RegEx库和操作每个单元格通过代码(即在代码中,逐个单元格遍历范围,并使用VBScript RegEx库将正则表达式替换应用于单元格的值,您可以轻松地对其进行谷歌搜索)。
编辑:替代使用VBScript RegExp对象
如上所述,要使用实际的正则表达式,您可以自己迭代单元格并使用VBScript RegExp对象进行替换。下面在活动工作表中查找单元格,其中包含两个空格后跟字符,然后用Chr(10)替换这两个空格。
Sub foo()
Dim rng As Range
Set rng = ActiveSheet.UsedRange
Dim regex As New RegExp
regex.Pattern = "([^ ]+) ([^ ]+)"
Dim cell As Range
For Each cell In rng
If Not cell.HasFormula Then
cell.Value = regex.Replace(cell.Value, "$1" & Chr(10) & "$2")
End If
Next
End Sub
您需要将VBScript正则表达式库添加到项目的引用中。
答案 1 :(得分:0)
什么阻止你分裂双倍空间并加入vbNewline?即。
Option Explicit
Sub ReplaceSubstring()
Debug.print join(Split("ABCD1234 ABCD1234", " ", -1,vbbinarycompare),vbNewline)
End sub
它能否可靠地为您提供所需的输出?