【发布时间】:2020-07-29 17:58:32
【问题描述】:
我在 VBA 中遇到了一个奇怪的问题。 我正在尝试编写一个用点替换逗号的宏。
我的条件是:
- 如果第一个逗号后跟另一个逗号,则将第二个逗号替换为一个点
- 否则,将第三个逗号替换为一个点
所以输入/输出应该是这样的:
INPUT OUTPUT
1,,3,4 1,.3,4
1,2,3,4 1,2,3.4
1,,3,4 1,.3,4
1,2,3,4 1,2,3.4
我的宏是这样的:
Sub replaceComma()
For i = 1 To 3
If Left(Split(ActiveSheet.Range("A" & i), ",")(1), 1) = "" Then
ActiveSheet.Range("A" & i) = Replace(ActiveSheet.Range("A" & i), "," & Split(ActiveSheet.Range("A" & i), ",")(2), "." & Split(ActiveSheet.Range("A2"), ",")(2))
ElseIf Left(Split(ActiveSheet.Range("A" & i), ",")(1), 1) <> "" Then
ActiveSheet.Range("A" & i) = Replace(ActiveSheet.Range("A" & i), "," & Split(ActiveSheet.Range("A" & i), ",")(3), "." & Split(ActiveSheet.Range("A2"), ",")(3))
End If
Next i
End Sub
但我得到的输出是这样的:
1,.3,4
1,2,3.4
1,.3.4,4
1,2,3,4
因此,宏对第一行和第二行非常有效,但不适用于所有其他行。 我注意到第三行正在使用第二行,但我不明白为什么 此外,如果我尝试将 i 增加到 4,则会收到错误“9-超出范围”。
提前感谢您的帮助。 亚历克斯
【问题讨论】:
-
你在末尾有一些静态的
Split(ActiveSheet.Range("A2"), ",")(2))而不是"A" & i -
哦,对了,对不起,谢谢!
-
我已更正,但仍有问题。你知道为什么这个宏在有 1,,2,2,3 的时候用 2 个逗号代替 1 个逗号吗?我得到 1,.2.2,3 而不是 1,.2,2,3
-
我认为拆分函数只返回两个逗号之间的字段,有没有办法两个拆分单元格以获取逗号后的所有剩余字符串?