Excel 使用“替换”仅替换字符串的一小部分

Excel 使用“替换”仅替换字符串的一小部分,excel,vba,Excel,Vba,我从一个文本文件中读取数据,并尝试将其格式化以匹配单元格的定义名称。定义的名称是89NL\u 10ETH\u A,字符串是89NL 10ETH A,但后面有一堆空格。我使用Replace()将空格转换为“\ux”,但末尾的所有空格都转换为下划线。请注意,trim()由于固定长度而无法工作,我如何将空格修剪成固定长度 我现在就是这样做的 getProduct = Replace(Replace(Mid(Ln, 40, 24), "#", ""), "%", "") 这样做很好: Sub Test

我从一个文本文件中读取数据,并尝试将其格式化以匹配单元格的定义名称。定义的名称是
89NL\u 10ETH\u A
,字符串是
89NL 10ETH A
,但后面有一堆空格。我使用
Replace()
将空格转换为“\ux”,但末尾的所有空格都转换为下划线。请注意,
trim()
由于固定长度而无法工作,我如何将空格修剪成固定长度

我现在就是这样做的

getProduct = Replace(Replace(Mid(Ln, 40, 24), "#", ""), "%", "")
这样做很好:

Sub Test()

    Dim STR As String, arrSTR

    STR = "89NL 10ETH A    "
    arrSTR = Split(Application.Trim(STR), " ")
    MsgBox Join(arrSTR, "_")


End Sub

在您更换之前,只需进行
修剪

Sub TrimTest()

    Dim InputString As String
    InputString = "  89NL 10ETH A    "

    Debug.Print Replace$(Trim$(InputString), " ", "_")

End Sub

Trim
删除开头和结尾
“89NL 10ETH A”中的空格
“89NL 10ETH A”
,因此中间的空格可以替换为下划线
“89NL 10ETH A”

,如@AndyG所述,您可以将Replace()与Trim()一起使用

您可以将其与文本字符串一起使用

getProduct = Replace(Trim("89NL 10ETH A           "), " ", "_")
MsgBox getProduct 
或者,使用单元格值

getProduct = Replace(Trim(Range("A1").Value), " ", "_")
MsgBox getProduct 

Application.Trim
我相信对VBA有效。在修剪之后,您可以使用
Split(STR,“”)
并最终使用
Join(arrSTR,“)
Trim()
工作,而不是使用replace。在替换剩余空间之前,先使用它。我知道我做错了什么。我的
Mid
长度太长了,它从下一个专栏中选取了一个我看不到的句点,为什么我的
Trim
看起来不起作用。为什么只需要替换就可以拆分和合并呢?我想替换是一个工作表函数,所以这样做更快?@Damian好吧,这就是(根据您指定的字符数,将文本字符串的一部分替换为不同的文本字符串。)和(返回一个字符串,其中指定的子字符串已替换为另一个子字符串),但如果您仔细比较文档,它们会做完全不同的事情。如果不进行调查,我将不知道。@Pᴇʜ我已经检查过了,是的……工作表函数适用于单元格,替换函数适用于单个字符串。我今天学到了一些东西,也有RTrim,但差别可能很小。@AndyG是的,但只是为了防止OP需要同时修剪这两个。我只在极少数情况下使用
LTrim
RTrim
不应该删除左空格或右空格。这是正确的。这是我已经准备好的,但是
中间的
长度太长了,我拾取了一个我没有看到的周期,这给人一种错觉,
Trim()
不起作用。