Vba 删除字符串中的所有空格

Vba 删除字符串中的所有空格,vba,excel,Vba,Excel,我创建了一个宏,用于删除字符串中的所有空白,特别是电子邮件地址。然而,它只删除了大约95%的空白,并留下了一些空白 我的代码: Sub NoSpaces() Dim w As Range For Each w In Selection.Cells w = Replace(w, " ", "") Next End Sub 我试图解决的问题包括: ~确认空格确实是带有代码函数的空格,它是字符32(空格) ~将替换宏与替换宏一起使用 ~有额外的宏使用修剪功能

我创建了一个宏,用于删除字符串中的所有空白,特别是电子邮件地址。然而,它只删除了大约95%的空白,并留下了一些空白

我的代码:

Sub NoSpaces()
    Dim w As Range

    For Each w In Selection.Cells
        w = Replace(w, " ", "")
    Next
End Sub
我试图解决的问题包括:

~确认空格确实是带有代码函数的空格,它是字符32(空格)
~将替换宏与替换宏一起使用
~有额外的宏使用修剪功能删除前导和尾随空格
~制作了一个单独的宏来测试非中断空格(字符160)
~使用“查找并替换”功能搜索并替换空白空间。确认工作


运行宏时,我只选择了一个单元格。由于选择,它选择并遍历所有单元格。单元格是代码的一部分

举几个例子:

1 STAR MOVING @ ATT.NET
322 TRUCKING@GMAIL.COM
ALEZZZZ@AOL. COM. 

这些仅包含常规空格,但被跳过。

只需使用正则表达式:

'Add a reference to Microsoft VBScript Regular Expressions 5.5
Public Function RemoveWhiteSpace(target As String) As String
    With New RegExp
        .Pattern = "\s"
        .MultiLine = True
        .Global = True
        RemoveWhiteSpace = .Replace(target, vbNullString)
    End With
End Function
可以这样称呼:

Sub NoSpaces()
    Dim w As Range

    For Each w In Selection.Cells
        w.Value = RemoveWhiteSpace(w.Value)
    Next
End Sub
使用“替换” 例子。。。
=替换(C1:C18,“,”)

,因为您假定
选择。单元格
包括工作表上的所有单元格

Cells.Replace " ", ""
试试这个:

Sub NoSpaces()
Selection.Replace " ", ""
End Sub

为了补充所有伟大贡献者的优秀建议,请尝试

TRIM或LTRIM或RTRIM,您可以在此处阅读有关这些功能的更多信息:

现在,这不会删除嵌入的空格(字母之间的空格),但会删除任何前导空格和尾随空格


希望这有帮助。

Excel的空间问题 好的,我看到这两种类型的空间的唯一方法是转换它们的Ascii码值 现在,为了解释我创建的这个函数,它将逐个字符地检查字符串是否等于我提到的两种类型的空格。如果没有,它会将该字符连接到字符串中,该字符串将是循环后的最终值。希望这有帮助。谢谢

Function spaceremove(strs) As String
Dim str As String
Dim nstr As String
Dim sstr As String
Dim x As Integer
str = strs

For x = 1 To VBA.Len(str)
    sstr = Left(Mid(str, x), 1)
    If sstr = " " Or sstr = " " Then
    Else
        nstr = nstr & "" & sstr
    End If

Next x
spaceremove = nstr
End Function

我复制了一个包含数据的HTML表格并粘贴到excel中,但是单元格中填充了不需要的空格,并且这里发布的所有方法都不起作用,所以我调试了一下,发现它实际上不是空格字符(ASCII 32)(ASCII 160)或HTML

因此,为了使它与不间断的空格字符一起工作,我做了以下操作:

Sub NoSpaces()
    Dim w As Range

    For Each w In Selection.Cells
        w.Value = Replace(w.Value, " ", vbNullString)
        w.Value = Replace(w.Value, Chr(160), vbNullString)
    Next
End Sub

你能提供一个不适用的字符串吗?这将有助于重现问题。如果在运行代码之前未选择单元格,是否不会替换空格?此代码仅适用于您选择的单元格。当我运行宏时,我只选择了一个单元格,它会选择并遍历所有单元格,因为选择。单元格是代码的一部分。至于提供字符串,我将给出几个通用示例:1 STAR MOVING@ATT.NET,322TRUCKING@GMAIL.COM及ALEZZZZ@AOL. 通用域名格式。正如你所看到的,这些只包含常规的空格,但由于某些原因被跳过。可能重复的我已经尝试了你的解决方案,并得到了相同的结果。一些电子邮件中仍然有空格。@PatrykChristopher-如果您显式引用它们所在的单元格,它会替换它们吗?即
Range(“A1”).Value=删除空白(Range(“A1”).Value)
?您在哪里设置
选择
?我继续运行函数,并单独运行=removewitespace(CellNumber),它工作得非常好。但是,在运行宏时,由于某些原因,它不会删除空格。@PatrykChristopher-这意味着您的循环未命中这些单元格。您没有关闭错误处理,是吗?@user1274820-您应该将其指向OP-我已经知道所有这些,但我是您正在ping的人。这非常有效!我想这是细胞选择的问题。非常感谢你!是的,我有一个修剪宏,负责前导和尾随空格,谢谢您的输入!