我有一个 Excel 工作表,其中的单元格具有不同数量的换行符,我想减少它,以便每个新行之间只有一个换行符。
例如
HELLO
WORLD
GOODBYE
将修改为:
HELLO
WORLD
GOODBYE
我已经为此绞尽脑汁好几个小时了,并想出了一些方法,但没有一个非常有效或产生最好的结果。
这变得特别困难,因为我正在处理的数据集在换行符之前有空格。
因此常规解析不起作用。
我尝试将单元格中的所有 chr(10)
实例替换为 ~
以使其更易于使用,但我仍然没有使其达到精确的数量。我想知道是否有更好的方法。
这是我到目前为止所拥有的:
myString = Replace(myString, Chr(10), "~")
Do While InStr(myString, "~~") > 0
str1 = Split(myString, "~")
For k = 0 To UBound(str1)
myString = Replace(myString, "~~", "~")
Next k
Loop
Do While InStr(myString, " ~") > 0
str1 = Split(myString, "~")
For k = 0 To UBound(str1)
myString = Replace(myString, " ~", "")
Next k
Loop
myString = Replace(myString, " ~", " ~")
myString = Replace(myString, " ~", "~")
myString = Replace(myString, "~", Chr(10))
Cells(2, 2).Value = myString
因此,我使用一些 do while 循环来捕获不同类型的换行符(或在本例中为波浪线)的实例,但我认为这不是解决此问题的最佳方法。
我正在考虑如何循环遍历单元格中的字符,如果存在多个 chr(10) 的实例,请将其替换为 ""
。
所以伪代码看起来像:
for i to len(mystring)
if mystring(i) = chr(10) AND myString(i+1) = chr(10) Then
myString(i + 1) = ""
但不幸的是我认为这不可能通过 vba 实现。
如果有人好心帮助我调整当前的代码或帮助我处理上述伪代码,我将不胜感激!
最佳答案
您可以使用公式来完成:
=SUBSTITUTE(SUBSTITUTE(TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(TRIM(A1)," ","|"),"|"&CHAR(10)," "),CHAR(10)," "))," ",CHAR(10)),"|"," ")
这会将所有空格更改为 |
,然后将 Char(10)
更改为空格。修剪去除了多余的空间。我们反转,空格为 Char(10)
,|
为空格。
VBA:
Function manytoone(str As String)
str = Replace(Application.Trim(str), " ", "|")
str = Replace(str, "|" & Chr(10), " ")
str = Replace(str, Chr(10), " ")
str = Application.Trim(str)
str = Replace(str, " ", Chr(10))
str = Replace(str, "|", " ")
manytoone = str
End Function
关于excel - 减少单元格中的换行数/chr(10),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56402311/