Nuestros mejores programadores agotaron sus depósitos de café, por su búsqueda noche y día por la respuesta, hasta que Mauricio encontró la solución en Gitea así que hoy la compartimos aquí.
Solución:
¿Sin código? Pero es tan corto y fácil y 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 su pregunta original.
El segundo código es una función definida por el usuario. =RegExCheck(A1,"[^A-Za-z0-9_-]")
con 2 argumentos. La primera es la celda a comprobar. El segundo es el patrón RegEx para verificar. Si el patrón coincide con alguno de los caracteres de su celda, devolverá 1; de lo contrario, 0.
Puede usarlo como cualquier otra fórmula normal de Excel si primero abre el editor de VBA con alternativa+F11inserte un nuevo módulo (!) y pegue 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)
Usando algo similar al código de nixda, aquí hay una función definida por el usuario que devolverá 1 si la celda tiene caracteres especiales.
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
Las funciones definidas por el usuario (UDF) son muy fáciles de instalar y usar:
- ALT-F11 abre la ventana VBE
- ALT-I ALT-M abre un nuevo módulo
- pegue las cosas y cierre la ventana de VBE
Si guarda el libro de trabajo, la UDF se guardará con él. Si está utilizando una versión de Excel posterior a 2003, debe guardar el archivo como .xlsm en lugar de .xlsx
Para eliminar la UDF:
- abrir la ventana VBE como se muestra arriba
- borrar el código
- cerrar la ventana VBE
Para usar la UDF desde Excel:
=EsEspecial(A1)
Para obtener más información sobre las macros en general, consulte:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
y
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
y
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
para detalles sobre UDF
Las macros deben estar habilitadas para que esto funcione!
Aquí hay una solución de formato condicional que marcará los registros con caracteres especiales.
Simplemente aplique una nueva regla de formato condicional a sus datos que use la fórmula (extremadamente larga) a continuación, donde A1
es el primer registro en la columna de nombres de archivos:
=SUMPRODUCT((CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<48)*(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<>45))+SUMPRODUCT((CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>57)*(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<65))+SUMPRODUCT((CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>90)*(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<97)*(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<>95))+SUMPRODUCT((CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>122)*1)
Esta fórmula verifica cada carácter de cada nombre de archivo y determina si su código ASCII está fuera de los valores de caracteres permitidos. Desafortunadamente, los códigos de caracteres permitidos no son todos contiguos, por eso la fórmula tiene que usar sumas de SUMPRODUCT
s. La fórmula devuelve el número de caracteres malos que hay. Se marcan todas las celdas que devuelven un valor superior a 0.
Ejemplo:
Reseñas y valoraciones del post
Recuerda algo, que tienes la capacidad de comentar si te fue útil.