Formula Excel: ricerca ultima revisione file -

Sommario

Formula generica

(=MAX(IF(ISERROR(SEARCH(H5&"*",files)),0,ROW(files)-ROW(INDEX(files,1,1))+1)))

Sommario

Per trovare la posizione (riga) dell'ultima revisione del file in una tabella, è possibile utilizzare una formula basata su diverse funzioni di Excel: MAX, SE, ISERROR, ROW e INDEX.

Nell'esempio mostrato, la formula nella cella H6 è:

(= MAX (IF (ISERROR (SEARCH (H5 & "*", files)), 0, ROW (files) -ROW (INDEX (files, 1,1)) + 1)))

dove "file" è l'intervallo denominato C4: C11.

Nota: questa è una formula di matrice e deve essere inserita con CTRL + MAIUSC + INVIO.

Contesto

In questo esempio, abbiamo un numero di versioni di file elencate in una tabella con una data e un nome utente. Notare che i nomi dei file vengono ripetuti, ad eccezione del codice aggiunto alla fine per rappresentare la versione ("CA", "CB", "CC", "CD", ecc.).

Per un dato file, vogliamo individuare la posizione (numero di riga) per l'ultima revisione. Questo è un problema complicato, perché i codici di versione alla fine dei nomi dei file rendono più difficile la corrispondenza del nome del file. Inoltre, per impostazione predefinita, le formule di corrispondenza di Excel restituiranno la prima corrispondenza, non l'ultima, quindi dobbiamo aggirare questa sfida con alcune tecniche complicate.

Spiegazione

Al centro di questa formula, creiamo un elenco di numeri di riga per un dato file. Quindi usiamo la funzione MAX per ottenere il numero di riga più grande, che corrisponde all'ultima revisione (ultima occorrenza) di quel file.

Per trovare tutte le occorrenze di un dato file, utilizziamo la funzione RICERCA, configurata con il carattere jolly asterisco (*) in modo che corrisponda al nome del file, ignorando i codici di versione. SEARCH genererà un errore VALUE quando il testo non viene trovato, quindi avvolgiamo la ricerca in ISERROR:

ISERROR(SEARCH(H5&"*",files))

Ciò si traduce in una matrice di valori VERO e FALSO come questo:

(FALSE; TRUE; FALSE; FALSE; TRUE; TRUE; FALSE; TRUE)

È fonte di confusione, ma TRUE rappresenta un errore (testo non trovato) e FALSE rappresenta una corrispondenza. Questo risultato della matrice viene inserito nella funzione IF come test logico. Per value se TRUE, usiamo zero, e per value se true, forniamo questo codice, che genera numeri di riga relativi per l'intervallo con cui stiamo lavorando:

ROW(files)-ROW(INDEX(files,1,1))+1)

La funzione IF restituisce quindi un array di valori come questo:

(1; 0; 3; 4; 0; 0; 7; 0)

Tutti i numeri tranne lo zero rappresentano le corrispondenze per "nomefile1" - cioè il numero di riga all'interno dell'intervallo denominato "file" dove appare "nomefile1".

Infine, utilizziamo la funzione MAX per ottenere il valore massimo in questo array, che è 7 in questo esempio.

Utilizzare INDICE con questo numero di riga per recuperare le informazioni relative all'ultima revisione (cioè nome completo del file, data, utente, ecc.).

Senza intervallo denominato

Gli intervalli denominati rendono facile e veloce impostare una formula più complessa, poiché non è necessario immettere manualmente gli indirizzi delle celle. Tuttavia, in questo caso, stiamo usando una funzione extra (INDICE) per ottenere la prima cella dell'intervallo denominato "file", il che complica un po 'le cose. Senza l'intervallo denominato, la formula è simile a questa:

(=MAX(IF(ISERROR(SEARCH(H5&"*",C4:C11)),0,ROW(C4:C11)-ROW(C4)+1)))

Articoli interessanti...