删除字符串中的所有空格

时间:2017-02-17 19:56:22

标签: excel vba excel-vba

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

我的代码:

Sub NoSpaces()
    Dim w As Range

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

我试图解决这个问题的事情包括:

〜用Code函数确认空格确实是空格,它是字符32(空格)
〜使用替换宏与替换宏结合使用 〜有额外的宏利用Trim功能去除前导和尾随空格
〜制作一个单独的宏来测试不间断的空间(字符160)
〜使用“查找和替换”功能来搜索和替换空格。确认工作。

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

一些例子:

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

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

7 个答案:

答案 0 :(得分:4)

只需使用正则表达式:

'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

答案 1 :(得分:2)

试试这个:

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

答案 2 :(得分:1)

使用"替代" 例... = SUBSTITUTE(C1:C18,"","")

答案 3 :(得分:1)

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

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

https://msdn.microsoft.com/en-us/library/office/gg278916.aspx

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

希望这有帮助。

答案 4 :(得分:0)

因为您假设Selection.Cells包含工作表上的所有单元格。

Cells.Replace " ", ""

答案 5 :(得分:0)

Excel的空间问题 好的,我看到这两种类型的空间的唯一方法是转换它们执行此操作的它们的Ascii代码值here 现在解释一下我所做的此功能,它将仅通过字符检查来筛选字符串是否等于我提到的两种类型的空格。如果不是,它将把该字符连接到字符串中,这将是循环后的最终值。希望这可以帮助。谢谢。

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

答案 6 :(得分:0)

我复制了一个带有数据的HTML表并粘贴到excel中,但是单元格中填充了多余的空间,此处发布的所有方法均无效,因此我进行了调试,发现它实际上不是空格字符(ASCII 32),是Non-breaking space)(ASCII 160)或HTML .on('zoomend')

因此,为了使其与不间断的空格字符一起工作,我这样做: