¿Sin código? Pero es tan corto, fácil, hermoso y ... :(
Su patrón RegEx [^A-Za-z0-9_-]
se utiliza para eliminar todos los caracteres especiales en todas las celdas.
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
Editar
Esto es lo más cerca que puedo llegar a tu pregunta original.
El segundo código es una función definida por el usuario =RegExCheck(A1,"[^A-Za-z0-9_-]")
con 2 argumentos. El primero es la celda para verificar. El segundo es el patrón RegEx para verificar. Si el patrón coincide con alguno de los caracteres en su celda, devolverá 1, de lo contrario 0.
Puede usarlo como cualquier otra fórmula normal de Excel si primero abre el editor VBA con ALT+ F11, inserta un nuevo módulo (!) Y pega el código a continuación.
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
Para los usuarios nuevos en RegEx, explicaré su patrón: [^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)