是否有用于识别单元格中特殊字符的 Excel 公式?

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)


Gar*_*ent 8

使用类似于 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) 非常易于安装和使用:

  1. ALT-F11 调出 VBE 窗口
  2. ALT-I ALT-M 打开一个新模块
  3. 粘贴内容并关闭 VBE 窗口

如果您保存工作簿,UDF 将与它一起保存。如果您使用的是 2003 年以后的 Excel 版本,则必须将文件另存为 .xlsm 而不是 .xlsx

要删除 UDF:

  1. 调出如上的 VBE 窗口
  2. 清除代码
  3. 关闭 VBE 窗口

要使用 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 的详细信息

必须启用宏才能使其工作