dww*_*n66 13 worksheet-function special-characters microsoft-excel
我们有大约 3500 个文档,其文件名需要手动清理以删除特殊字符,如括号、冒号、分号、逗号等。
我有一个已转储到 excel 中的文本文件,我正在尝试创建一个列,如果文件名包含特殊字符,则该列将标记文件名以进行修改。伪代码公式为
=IF (cellname contains [^a-zA-z_-0-9], then "1", else "0")
Run Code Online (Sandbox Code Playgroud)
如果行包含除 AZ、0-9、- 或 _ 以外的任何字符,则标记该行,无论大小写。
任何人都知道可能对我有用的东西?if如果有一些快速而简单的东西,我对编码和大量声明犹豫不决。
nix*_*xda 19
没有代码?但它是如此的简短、简单、美丽,而且...... :(
您的 RegEx 模式[^A-Za-z0-9_-]用于删除所有单元格中的所有特殊字符。
Sub RegExReplace()
Dim RegEx As Object
Set RegEx = CreateObject("VBScript.RegExp")
RegEx.Global = True
RegEx.Pattern = "[^A-Za-z0-9_-]"
For Each objCell In ActiveSheet.UsedRange.Cells
objCell.Value = RegEx.Replace(objCell.Value, "")
Next
End Sub
Run Code Online (Sandbox Code Playgroud)
这与我最接近您最初的问题是一样的。

第二个代码是=RegExCheck(A1,"[^A-Za-z0-9_-]")带有 2 个参数的用户定义函数。第一个是要检查的单元格。第二个是要检查的 RegEx 模式。如果模式匹配您单元格中的任何字符,则返回 1,否则返回 0。
如果您首先使用ALT+打开 VBA 编辑器F11,插入一个新模块(!) 并粘贴下面的代码,则您可以像使用任何其他普通 Excel 公式一样使用它。
Function RegExCheck(objCell As Range, strPattern As String)
Dim RegEx As Object
Set RegEx = CreateObject("VBScript.RegExp")
RegEx.Global = True
RegEx.Pattern = strPattern
If RegEx.Replace(objCell.Value, "") = objCell.Value Then
RegExCheck = 0
Else
RegExCheck = 1
End If
End Function
Run Code Online (Sandbox Code Playgroud)
对于 RegEx 的新用户,我将解释您的模式: [^A-Za-z0-9_-]
[] stands for a group of expressions
^ is a logical NOT
[^ ] Combine them to get a group of signs which should not be included
A-Z matches every character from A to Z (upper case)
a-z matches every character from a to z (lower case)
0-9 matches every digit
_ matches a _
- matches a - (This sign breaks your pattern if it's at the wrong position)
Run Code Online (Sandbox Code Playgroud)
使用类似于 nixda 代码的东西,这里是一个用户定义的函数,如果单元格有特殊字符,它将返回 1。
Public Function IsSpecial(s As String) As Long
Dim L As Long, LL As Long
Dim sCh As String
IsSpecial = 0
For L = 1 To Len(s)
sCh = Mid(s, L, 1)
If sCh Like "[0-9a-zA-Z]" Or sCh = "_" Then
Else
IsSpecial = 1
Exit Function
End If
Next L
End Function
Run Code Online (Sandbox Code Playgroud)
用户定义函数 (UDF) 非常易于安装和使用:
如果您保存工作簿,UDF 将与它一起保存。如果您使用的是 2003 年以后的 Excel 版本,则必须将文件另存为 .xlsm 而不是 .xlsx
要删除 UDF:
要使用 Excel 中的 UDF:
=IsSpecial(A1)
要了解有关一般宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
和
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
有关 UDF 的详细信息
必须启用宏才能使其工作!