我在一个单元格中有一个字符串,它由几个不同长度的较短字符串组成,中间有空格和逗号,在某些情况下,中间只有一个或多个空格。
我想删除所有的空格和逗号,并且在每个字符串元素之间只留下1个逗号。结果必须如下所示:
下面的代码不起作用。我没有得到错误,但是字符串在错误的地方被截断了。我不明白为什么。
Sub String_adaption()
Dim i, j, k, m As Long
Dim STR_A As String
STR_A = "01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
i = 1
With Worksheets("table")
For m = 1 To Len(.Range("H" & i))
j = 1
Do While Mid(.Range("H" & i), m, 1) = "," And Mid(.Range("H" & i), m - 1, 1) <> Mid(STR_A, j, 1) And m <> Len(.Range("H" & i))
.Range("H" & i) = Mid(.Range("H" & i), 1, m - 2) & Mid(.Range("H" & i), m, Len(.Range("H" & i)))
j = j + 1
Loop
Next m
End With
End Sub
5条答案
按热度按时间x7yiwoj41#
我会使用正则表达式来替换任何空格和逗号的组合。
只是为了寻找替代品:
B1
中的公式:7uhlpewt2#
下面的函数将把输入的字符串分割成多个片段(单词),使用逗号作为分隔符。当输入的字符串有多个逗号时,将会导致空单词。
拆分后,函数循环遍历所有单词,修剪它们(去掉开头和结尾的空格)并将它们粘在一起。
我已经将其实现为函数,您可以将其用作UDF:如果输入字符串在B2中,则将
=String_adaption(B2)
作为Formula写入任意单元格。P.S.:几乎可以肯定,这可以用一些神奇的正则表达式来完成,但我不是这方面的Maven。
juzqafwq3#
如果您有最新版本的Excel,您可以使用简单的工作表函数来拆分
space
和comma
上的字符串;然后使用comma
分隔符将其重新组合在一起,并忽略空格 (我刚刚注意到@JvdV之前发布了相同的公式解决方案):在VBA中,可以使用类似的算法,使用
ArrayList
对象收集非空结果。ylamdve64#
这将保留较小字符串中的空格。
ki0zmccv5#
代码类别方法
为了完整起见,也为了展示其他方式 “通向罗马”,我想演示一种方法,允许将字符串输入分组为五个代码类别,以便通过巧妙的匹配提取字母数字 (参见
[B]
函数getCats()
):要满足OP中的要求,请使用以下步骤:
1)
如果为空或仅为空白则移除逗号分隔的标记(可选),2)
将字符分组为代码类别,3)
check cat返回字母数字的代码,包括偶数重音字母或变音字母以及[ -,.+_]等字符Case 2
中的If InStr(" -,", curr) <> 0 Then
,您也可以编写If curr like "[ -,]" Then
。类似于Case 3
:-)*[A]
帮助程序RemoveEmpty
[B]
帮助程序函数getCats()
[C]
帮助程序函数Char2Arr