公式消除所有,但字母字符

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

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

客户端要求这是一个Excel函数,否则我会用类似于replaceAll("[^a-zA-Z]", "").toUpperCase()的快速Java程序来replaceAll("[^a-zA-Z]", "").toUpperCase() 。 我似乎无法find任何看起来像是一个现成的function,在整个一堆SUBSTITUTEfunction之外做这件事 – 这似乎是每个单元一个。

如果这是我所需要的,我并不是非常stream利地开发自定义的macros。

我前段时间有类似的需求,发现一些很好的东西。

按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 

CleanCode现在是新function,您可以将其用作公式。

所以你要操作的string旁边的单元格复制=CleanCode(yourcell)

如果你想要走下VBA路线 – 你不能使用用户自定义函数(UDF)来改变你进入函数的单元格的值,但是你可以使用一个简单的macros,并利用微软的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 

事实上,在一个单一的单元格内,可能出现一系列的替代品,例如:

 =UPPER(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1," ",""),",",""),"'",""),".",""),"-","")) 

当然可能需要“扩展”来覆盖其他非alpha字符。

另一个VBA解决scheme

 Sub RemoveCrap() Dim varRange As Range Dim varWorkRange As Range Set varWorkRange = Range("A1:A10") For Each varRange In varWorkRange varVal = "" For i = 1 To Len(varRange.Value) varTemp = Mid(varRange.Value, i, 1) If Not (varTemp Like "[az]" Or varTemp Like "[AZ]") Then varStr = "" Else varStr = UCase(varTemp) End If varVal = varVal & varStr Next i varRange.Value = varVal Next End Sub