消除除alpha字符以外的所有字符的公式

dww*_*n66 1 excel vba excel-vba excel-formula substitution excel-udf

我需要在Excel中擦除一列名称以消除所有非Alpha字符,包括句点,逗号,空格,连字符和撇号.

示例:更改O'Malley-Smith, Tom, Jr.OMALLEYSMITHTOMJR

客户端要求这是一个Excel函数,否则我会使用类似的快速Java程序轻松实现replaceAll("[^a-zA-Z]", "").toUpperCase().在一堆乱七八糟的SUBSTITUTE功能之外,我似乎无法找到任何看起来像现成功能的东西- 这似乎只有每个单元一个.

如果这就是我需要的话,我对开发自定义宏不是非常流利.

Sam*_*Sam 7

如果你想沿着VBA路线走 - 你不能使用用户定义函数(UDF)来改变你输入函数的单元格的值 - 但你可以使用一个简单的宏来利用微软的VBScript RegEx引擎:

Sub SO()

Dim searchRange     As Excel.Range
Dim cell            As Variant
Dim RegEx           As Object

Set RegEx = CreateObject("VBScript.RegExp")

With RegEx
    .Pattern = "[^a-zA-Z]"
    .Global = True
    .MultiLine = True
End With

Set searchRange = ActiveSheet.Range("A1:D5") '// Change as required

    For Each cell In searchRange.Cells
        If RegEx.test(cell) Then cell.Value = RegEx.Replace(cell.Value, vbNullString)
        cell.Value = UCase(cell.Value)
    Next cell

Set searchRange = Nothing
Set RegEx = Nothing

End Sub
Run Code Online (Sandbox Code Playgroud)


pnu*_*uts 5

事实上,在一个单元格中可能存在一堆SUBSTITUTE,例如:

=UPPER(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1," ",""),",",""),"'",""),".",""),"-",""))   
Run Code Online (Sandbox Code Playgroud)

当然可能需要"扩展"以涵盖其他非字母字符.

  • 你真好,但公式不是我真正喜欢的。虽然我认为巴里没有任何对手,但他绝对是最好的句号。 (2认同)

小智 5

前段时间我有类似的需求,发现了一些非常好的东西.

按Alt + F11以打开Visual Basic编辑器.插入一个新模块并粘贴以下代码.

Function CleanCode(Rng As Range)
    Dim strTemp As String
    Dim n As Long

    For n = 1 To Len(Rng)
        Select Case Asc(Mid(UCase(Rng), n, 1))
            Case 48 To 57, 65 To 90
                strTemp = strTemp & Mid(UCase(Rng), n, 1)
        End Select
    Next
    CleanCode = strTemp
End Function
Run Code Online (Sandbox Code Playgroud)

CleanCode现在是新功能,您可以将其用作公式.

因此,在您要操作的字符串的单元格旁边只需复制 =CleanCode(yourcell)