Robin ha chiesto se esiste un modo per eseguire un CERCA.VERT con distinzione tra maiuscole e minuscole.

La sua tabella / intervallo di ricerca ha voci simili (AbC e aBC) con l’unica differenza nel caso delle lettere. Non può modificare i valori (renderli tutti maiuscoli o minuscoli) poiché i valori univoci sono vitali.

La funzione CERCA.VERT non ha un modo per controllare il caso delle informazioni; non fa distinzione tra maiuscole e minuscole. Tuttavia, esistono diversi modi per aggirare questo difetto. Un modo è utilizzare la funzione CODICE per creare una colonna intermedia che può essere ricercata da CERCA.VERT. Supponendo che i tuoi dati originali siano nella colonna B, potresti inserire la seguente formula nella cella A1 e copiarla nella colonna:

=CODE(LEFT(B1,1))&"."&CODE(MID(B1,2,1))&"."&CODE(RIGHT(B1,1))

Questa formula esamina i primi tre caratteri di qualunque cosa si trovi nella cella B1 e converte quei caratteri in codici di caratteri decimali separati da punti. Pertanto, se A1 contenesse “ABC”, B1 conterrebbe “65.66.67”.

Supponendo che il valore che si desidera individuare sia nella cella C1, è possibile utilizzare quanto segue come formula CERCA.VERT:

=VLOOKUP(CODE(LEFT(C1,1))&"."&CODE(MID(C1,2,1))&"."& CODE(MID(C1,3,1)), A:B,2,)

Un altro approccio consiste nell’usare la funzione ESATTO per determinare la posizione di ciò che stai cercando. Questo approccio non utilizza affatto CERCA.VERT, ma si basa sulla funzione INDICE. La formula presuppone che le celle che vuoi confrontare siano nella colonna A e quello che vuoi restituire sia la cella corrispondente nella colonna B.

=IF(MIN(IF(EXACT(C1,$A$1:$A$100),ROW($A$1:$A$100)))=0,NA(), INDEX($B$1:$B$100,MIN(IF(EXACT(C1,$A$1:$A$100),ROW($A$1:$A$100)))))

Questa formula deve essere inserita come formula di matrice (Maiusc + Ctrl + Invio). La prima parte della formula (la prima istanza di EXACT) confronta C1 (cosa stai cercando) con ogni valore nell’intervallo A1: A100. Poiché si tratta di una formula di matrice, in questo caso si ottengono 100 valori Vero / Falso a seconda che esista o meno una corrispondenza esatta. In caso di corrispondenza, la prima funzione RIGA restituisce la riga della corrispondenza e la funzione INDICE viene utilizzata per acquisire il valore dalla colonna B in quella riga.

In alcuni casi potresti voler creare la tua funzione definita dall’utente che eseguirà la ricerca per te. Quello che segue è un esempio di tale macro:

Function CaseVLook(compare_value, table_array As Range, _   Optional col_index As Integer = 1)

Dim c As Range     Dim rngColumn1 As Range

Application.Volatile

Set rngColumn1 = table_array.Columns(1)

CaseVLook = "Not Found"



'Loop first column     For Each c In rngColumn1.Cells         If c.Value = compare_value Then             CaseVLook = c.Offset(0, col_index - 1).Value             Exit For         End If     Next c End Function

Per utilizzare la macro, chiama semplicemente la funzione con il valore che desideri trovare (ad esempio cella C1), l’intervallo di cui cercare la prima colonna (come A: B) e, facoltativamente, l’offset della colonna all’interno di tale intervallo, qui:

=CaseVLook(C1,A:B,2)

Alcuni approcci aggiuntivi possono essere trovati nel seguente articolo della Knowledge Base:

http://support.microsoft.com/kb/214264

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

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

Questo suggerimento (6833) si applica a Microsoft Excel 97, 2000, 2002 e 2003. Puoi trovare una versione di questo suggerimento per l’interfaccia a nastro di Excel (Excel 2007 e versioni successive) qui: