excel - MacOs Excel 2011 VBA 宏在字符串模式后添加逗号和空格
问题描述
我需要找到一个不同长度的字符串模式,并在该字符串模式之后添加一个逗号和空格。例如,搜索字符串“Cat. 123” 我想将该字符串替换为值“Cat. 123”(即在“Cat. 123”的末尾添加一个逗号和一个空格)。我使用的是 Mac Office 2011,因此任何代码都必须与 Mac 版本的 Excel 一起使用。
我尝试过使用 Replace.Regex、Split 和我能找到的所有其他 Replace 函数。下面的代码是我想出的最好的代码,但它没有在字符串模式的末尾添加逗号和空格。
Sub test()
Dim r As Range, x, y
Set r = Cells.Find("?*, Cat. *", , , 1)
If Not r Is Nothing Then
Do
' Search for any string with the pattern Cat. 123, Cat. 14, etc
x = Split(r.Value, " Cat. ")
If x(UBound(x)) Like "* *" Then
' Replace string Cat. 123 with the new string Cat. 123,
y = Split(x(UBound(x)))
x(0) = "Cat. " & y(0) & ", " & x(0)
x(UBound(x)) = y(1)
Else
y = x(UBound(x))
x(0) = "Cat. " & y & ", " & x(0)
x(UBound(x)) = ""
End If
r.Value = Join(x)
Set r = Cells.FindNext(r)
Loop Until r Is Nothing
End If
End Sub
因此,每个单元格的输出包含类似于以下示例的模式:“Cat. 123” “Cat. 1” “Cat. 34” “Cat. 4567”,将更改为“Cat. 123”、“Cat. 1” , " "Cat. 34, " "Cat. 4567, " 注意:原始字符串在单词 "Cat" 之后总是有一个句点,然后是一个空格,然后是一个数字,一直到如上图所示的四位数字。
解决方案
试一试(这次没有依赖 vbscript 的正则表达式):
Sub tgr()
Dim aData As Variant
Dim sTemp As String
Dim lCatLoc As Long
Dim lNextSpace As Long
Dim i As Long, j As Long
With ActiveSheet.UsedRange
If .Cells.Count = 1 Then
ReDim aData(1 To 1, 1 To 1)
aData(1, 1) = .Value
Else
aData = .Value
End If
For i = 1 To UBound(aData, 1)
For j = 1 To UBound(aData, 2)
If Len(aData(i, j)) > 0 Then
If aData(i, j) Like "*Cat. [0-9]*" Then
lCatLoc = InStr(1, aData(i, j), "Cat. ", vbTextCompare)
lNextSpace = InStr(lCatLoc + 5, aData(i, j) & " ", " ", vbTextCompare)
sTemp = Mid(aData(i, j), lCatLoc, lNextSpace - lCatLoc)
If Right(sTemp, 1) <> "," Then aData(i, j) = Replace(aData(i, j), sTemp, sTemp & ", ")
End If
End If
Next j
Next i
.Value = aData
End With
End Sub
推荐阅读
- html - 在CSS中仅更改部分字母的文本颜色的方法
- java - Hibernate findAll(example) 抛出“java.lang.IllegalArgumentException:目标对象不能为空”
- session - 从多错误类型中检测特定错误
- java - 我遇到了前导零的问题
- symfony - Symfony 验证器:在控制器中,Doctrine 返回带有空字符串字段的用户项,尽管设置了一个值
- python-3.x - 如何在函数期间禁用 tkinter 列表框
- excel - 直接价值转移,而不是在工作簿之间选择复制/粘贴
- r - 将位置索引添加到列表
- firebase - Firebase 可调用 + 快递?
- sql - 连接多个表中的同一列