Vishwajeet tiene una serie de números de pieza en una columna. Estos números de pieza deben seguir un patrón específico (2 números, 5 letras, 4 números, 1 letra, 1 número, 1 letra y 1 número). Se pregunta si hay una manera de identificar fácilmente cuáles de las celdas de la columna difieren de este patrón.

Hay varias formas de abordar esta tarea, según la verdadera naturaleza de sus datos. Por ejemplo, podría usar una fórmula como esta en una columna de ayuda:

=AND(LEN(A1)=15,ISNUMBER(--LEFT(A1,2)),ISTEXT(MID(A1,3,5)), ISNUMBER(--MID(A1,8,4)),ISTEXT(MID(A1,12,1)),ISNUMBER(-- MID(A1,13,1)),ISTEXT(MID(A1,14,1)),ISNUMBER(--RIGHT(A1,1)))

La fórmula (que es bastante larga) devuelve Verdadero o Falso, dependiendo de si el patrón es correcto o no. Sin embargo, existe un problema con la fórmula. No captará los símbolos utilizados en lugar de letras (como un signo de dólar o un asterisco) y no captará algunos símbolos utilizados en lugar de números (como un punto o un signo de porcentaje). La razón es que la función ISTEXT considera que los símbolos son texto y la función ISNUMBER analiza algo como «1.23» como un número.

Si desea detectar este uso indebido de símbolos, se puede utilizar la siguiente fórmula:

=AND(LEN(A1)=15,ISNUMBER(SUM(SEARCH(MID(A1,{1,2,8,9,10,11, 13,15},1),"0123456789"),SEARCH(MID(A1,{3,4,5,6,7,12,14},1), "ABCDEFGHIJKLMNOPQRSTUVWXYZ"))))

Este funciona porque usa la función de BÚSQUEDA para verificar efectivamente cada carácter en el número de pieza. Uno pensaría que es posible que deba ingresar la fórmula como una fórmula de matriz (terminándola con Ctrl + Shift + Enter), pero curiosamente, no obtengo diferencias en los resultados cuando la uso como una fórmula regular frente a una fórmula de matriz.

Si necesita verificar un poco los patrones de números de pieza, es posible que desee considerar el uso de una macro para realizar la verificación. La siguiente es una función breve definida por el usuario que usa el operador Like para ver si se sigue el patrón.

Function CheckPattern(rCell As Range) As Boolean     Dim sPattern As String

sPattern = "##[A-Z][A-Z][A-Z][A-Z][A-Z]####[A-Z]#[A-Z]#"



CheckPattern = rCell.Value Like sPattern End Function

Tenga en cuenta el uso de la variable sPattern. Este es el patrón a seguir cuando el operador Like hace su comparación. Cada aparición del símbolo # significa que cualquier dígito puede estar en esta posición. Cada aparición de [A-Z] significa que la posición puede ser una letra en el rango de A a Z.

Puede encontrar más información sobre el significado de los caracteres que puede incluir en el patrón visitando esta página en uno de los sitios de Microsoft:

https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/like-operator

Este sitio es en realidad para Visual Basic, no para VBA, pero esta página de información en particular funcionará bien en VBA.

Para utilizar la función definida por el usuario de CheckPattern, puede colocar lo siguiente en cualquier celda de su hoja de trabajo:

=CheckPattern(A1)

Esto supone que el número de pieza está en la celda A1, al igual que todas las demás fórmulas presentadas en este consejo.

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (3391) se aplica a Microsoft Excel 2007, 2010, 2013 y 2016.