¿No hay código? Pero es tan corto y fácil y bonito 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
Edit
Esto es lo más parecido a tu pregunta original.
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
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 a comprobar. El segundo es el patrón RegEx a comprobar. Si el patrón coincide con alguno de los caracteres de la celda, devolverá 1, de lo contrario 0.
Puedes utilizarla como cualquier otra fórmula normal de Excel si primero abres el editor VBA con ALT+F11, insertas un nuevo módulo (!) y pegas el código de abajo.
[] 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)
Para los usuarios nuevos en RegEx explicaré su patrón: [^A-Za-z0-9_-]