Formula Excel: approssimativa bidirezionale corrisponde a più criteri -

Sommario

Sommario

Per eseguire una ricerca di corrispondenza approssimativa bidirezionale con più criteri, è possibile utilizzare una formula di matrice basata su INDICE e CONFRONTA, con l'aiuto della funzione SE per applicare i criteri. Nell'esempio mostrato, la formula in K8 è:

=INDEX(data,MATCH(K6,IF(material=K5,hardness),1),MATCH(K7,diameter,1))

dove i dati (D6: H16), il diametro (D5: H5), il materiale (B6: B16) e la durezza (C6: C16) sono intervalli denominati utilizzati solo per comodità.

Nota: questa è una formula di matrice e deve essere inserita con Control + Maiusc + Invio

Spiegazione

L'obiettivo è cercare una velocità di avanzamento basata su materiale, durezza e diametro della punta. I valori della velocità di avanzamento sono nei dati dell'intervallo denominato (D6: H16).

Questo può essere fatto con una formula INDICE e CONFRONTA a due vie. Una funzione MATCH calcola il numero di riga (materiale e durezza) e l'altra funzione MATCH trova il numero di colonna (diametro). La funzione INDICE restituisce il risultato finale.

Nell'esempio mostrato, la formula in K8 è:

=INDEX(data, MATCH(K6,IF(material=K5,hardness),1), // get row MATCH(K7,diameter,1)) // get column

(Interruzioni di riga aggiunte solo per la leggibilità).

La parte difficile è che il materiale e la durezza devono essere gestiti insieme. Dobbiamo limitare MATCH ai valori di durezza per un dato materiale (acciaio a basso tenore di carbonio nell'esempio mostrato).

Possiamo farlo con la funzione IF. Essenzialmente, usiamo IF per "buttare via" valori irrilevanti prima di cercare una corrispondenza.

Dettagli

La funzione INDICE riceve i dati dell'intervallo denominato (D6: H16) come per l'array. La prima funzione MATCH calcola il numero di riga:

MATCH(K6,IF(material=K5,hardness),1) // get row num

Per individuare la riga corretta, dobbiamo fare una corrispondenza esatta sul materiale e una corrispondenza approssimativa sulla durezza. Lo facciamo utilizzando la funzione IF per filtrare prima la durezza irrilevante:

IF(material=K5,hardness) // filter

Testiamo tutti i valori nel materiale (B6: B16) per vedere se corrispondono al valore in K5 ("acciaio a basso tenore di carbonio"). In tal caso, il valore di durezza viene trasmesso. In caso contrario, IF restituisce FALSE. Il risultato è un array come questo:

(FALSE;FALSE;FALSE;85;125;175;225;FALSE;FALSE;FALSE;FALSE)

Si noti che gli unici valori sopravvissuti sono quelli associati all'acciaio a basso tenore di carbonio. Gli altri valori ora sono FALSE. Questo array viene restituito direttamente alla funzione MATCH come lookup_array.

Il valore di ricerca per corrispondenza proviene da K6, che contiene la durezza data, 176. MATCH è configurato per una corrispondenza approssimativa impostando match_type su 1. Con queste impostazioni, MATCH ignora i valori FALSE e restituisce la posizione di una corrispondenza esatta o il valore più piccolo successivo .

Nota: i valori di durezza devono essere ordinati in ordine crescente per ogni materiale.

Con una durezza data come 176, CONFRONTA restituisce 6, consegnato direttamente a INDICE come numero di riga. Ora possiamo riscrivere la formula originale in questo modo:

=INDEX(data,6,MATCH(K7,diameter,1))

La seconda formula MATCH trova il numero di colonna corretto eseguendo una corrispondenza approssimativa sul diametro:

MATCH(K7,diameter,1) // get column num

Nota: i valori di diametro D5: H5 devono essere ordinati in ordine crescente.

Il valore di ricerca proviene da K7 (0,75) e lookup_array è il diametro dell'intervallo denominato (D5: H5).

Come prima, MATCH è impostato per approssimare la corrispondenza impostando match_type su 1.

Con il diametro fornito come 0,75, CONFRONTA restituisce 3, fornito direttamente alla funzione INDICE come numero di colonna. La formula originale ora si risolve in:

=INDEX(data,6,3) // returns 0.015

INDICE restituisce un risultato finale di 0,015, il valore da F11.

Articoli interessanti...