Vishwajeet ha una serie di numeri di parte in una colonna. Questi numeri di parte devono seguire uno schema specifico (2 numeri, 5 lettere, 4 numeri, 1 lettera, 1 numero, 1 lettera e 1 numero). Si chiede se esista un modo per identificare facilmente quale delle celle nella colonna differisce da questo schema.

Esistono diversi modi per affrontare questa attività, a seconda della vera natura dei dati. Ad esempio, potresti usare una formula come questa in una colonna helper:

=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 formula (che è piuttosto lunga) restituisce Vero o Falso, a seconda che il modello sia corretto o meno. Tuttavia, c’è un problema con la formula. Non cattura i simboli usati al posto delle lettere (come il simbolo del dollaro o un asterisco) e non cattura alcuni simboli usati al posto dei numeri (come un punto o un segno di percentuale). Il motivo è che la funzione ISTEXT considera i simboli come testo e la funzione ISNUMBER analizza qualcosa come “1.23” come un numero.

Se vuoi cogliere questo uso improprio dei simboli, potresti usare la seguente formula:

=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"))))

Questo funziona perché utilizza la funzione RICERCA per controllare efficacemente ogni carattere nel numero di parte. Si potrebbe pensare che potrebbe essere necessario inserire la formula come formula di matrice (terminandola con Ctrl + Maiusc + Invio), ma abbastanza interessante, non ottengo alcuna differenza nei risultati quando la uso come formula normale rispetto a una formula di matrice.

Se è necessario controllare un po ‘i modelli del numero di parte, si potrebbe prendere in considerazione l’utilizzo di una macro per eseguire il controllo. Quella che segue è una breve funzione definita dall’utente che utilizza l’operatore Like per vedere se il modello viene seguito.

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

Notare l’uso della variabile sPattern. Questo è il modello da seguire quando l’operatore Like esegue il confronto. Ogni occorrenza del simbolo # significa che qualsiasi cifra può trovarsi in questa posizione. Ogni occorrenza di [A-Z] significa che la posizione può essere una lettera nell’intervallo dalla A alla Z.

Puoi trovare ulteriori informazioni sul significato dei caratteri che puoi includere nello schema visitando questa pagina su uno dei siti Microsoft:

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

Questo sito è in realtà per Visual Basic, non VBA, ma questa particolare pagina di informazioni funzionerà perfettamente in VBA.

Per utilizzare la funzione CheckPattern definita dall’utente, è possibile inserire quanto segue in qualsiasi cella del foglio di lavoro:

=CheckPattern(A1)

Ciò presuppone che il numero di parte si trovi nella cella A1, così come tutte le altre formule presentate in questo suggerimento.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (3391) si applica a Microsoft Excel 2007, 2010, 2013 e 2016.