如何从excel中除句点和空格之外的字符串中删除所有非字母数字字符?

xyz*_*xyz 16 excel vba excel-vba

我需要从Excel中除了句点和空格之外的字符串中删除所有非字母数字字符.使用VBA而不是纯excel函数的解决方案就好了.

Pet*_*ert 38

将此函数插入​​Visual Basic编辑器中的新模块:

Function AlphaNumericOnly(strSource As String) As String
    Dim i As Integer
    Dim strResult As String

    For i = 1 To Len(strSource)
        Select Case Asc(Mid(strSource, i, 1))
            Case 48 To 57, 65 To 90, 97 To 122: 'include 32 if you want to include space
                strResult = strResult & Mid(strSource, i, 1)
        End Select
    Next
    AlphaNumericOnly = strResult
End Function
Run Code Online (Sandbox Code Playgroud)

现在您可以将其用作用户定义函数,即如果您的数据位于单元格中A1,请将此公式放在空单元格中=AlphaNumericOnly(A1).

如果要直接转换大范围,即替换所有非字母数字字符而不离开源,可以使用另一个VBA例程执行此操作:

Sub CleanAll()
    Dim rng As Range

    For Each rng In Sheets("Sheet1").Range("A1:K1500").Cells 'adjust sheetname and range accordingly
        rng.Value = AlphaNumericOnly(rng.Value)
    Next
End Sub
Run Code Online (Sandbox Code Playgroud)

只需将此子放在同一模块中并执行即可.但请注意,这将取代范围内的所有公式.

  • 对于任何想要添加或减去上述字符的人来说,这里需要的是一个参考表:http://office.microsoft.com/en-us/excel-help/ascii-character-chart-HA001133136. ASPX (5认同)
  • +1 好点!或者,我只是使用了`? Asc("A")` 在调试控制台中获取 ASCII 码... (2认同)
  • Tim提供的链接不再起作用.这是一个新的:[链接](http://www.asciitable.com/) (2认同)

ash*_*awg 8

这是使用模式匹配从字符串中删除“您想要的任何字符”的另一种方法。

  • 下面的示例删除字母、数字、空格和句点 ( [A-Z.a-z 0-9]) 之外的所有内容

  • 为了提高效率,它还利用了 VBA在字符串和字节数组之间的无缝转换

cleanString 功能:

Function cleanString(str As String) As String
    Dim ch, bytes() As Byte: bytes = str
    For Each ch In bytes
        If Chr(ch) Like "[A-Z.a-z 0-9]" Then cleanString = cleanString & Chr(ch)
    Next ch
End Function
Run Code Online (Sandbox Code Playgroud)

更多信息:

  • 好的 !这是最优雅的,也可能是最快的。如果速度是一个问题,我会尝试“For i =...”与“For every...” (2认同)

Nig*_*ter 7

我正在寻找一种比我想出的更优雅的解决方案。我打算使用上面 ashleedawg 的代码,因为它肯定比我的代码更简洁。具有讽刺意味的是,我的运行速度快了 30%。如果速度很重要(假设你有几百万要做),试试这个:

    Public Function AlphaNumeric(str As String) As String
    Dim i As Integer

    For i = 1 To Len(str)
        If InStr(1, "01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz. ", Mid(str, i, 1)) Then AlphaNumeric = AlphaNumeric & Mid(str, i, 1)
    Next
End Function
Run Code Online (Sandbox Code Playgroud)

VBA 的每个角落都有惊喜。我从来没有想过这会更快......