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功能之外,我似乎无法找到任何看起来像现成功能的东西- 这似乎只有每个单元一个.
如果这就是我需要的话,我对开发自定义宏不是非常流利.
如果你想沿着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)
事实上,在一个单元格中可能存在一堆SUBSTITUTE,例如:
=UPPER(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1," ",""),",",""),"'",""),".",""),"-",""))
Run Code Online (Sandbox Code Playgroud)
当然可能需要"扩展"以涵盖其他非字母字符.
小智 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)
| 归档时间: |
|
| 查看次数: |
12994 次 |
| 最近记录: |