Excel-formel: Oppslag siste filrevisjon -

Innholdsfortegnelse

Generisk formel

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

Sammendrag

For å finne posisjonen (raden) til den siste filrevisjonen i en tabell, kan du bruke en formel basert på flere Excel-funksjoner: MAX, IF, ISERROR, ROW og INDEX.

I eksemplet vist er formelen i celle H6:

(= MAKS (HVIS (FEIL (SØK (H5 & "*", filer)), 0, RAD (filer) -ROW (INDEKS (filer, 1,1)) + 1)))

der "filer" er det navngitte området C4: C11.

Merk: dette er en matriseformel og må angis med kontroll + skift + enter.

Kontekst

I dette eksemplet har vi en rekke filversjoner oppført i en tabell med dato og brukernavn. Merk at filnavn gjentas, bortsett fra koden som er lagt til på slutten for å representere versjonen ("CA", "CB", "CC", "CD", etc.).

For en gitt fil ønsker vi å finne posisjonen (radnummer) for siste revisjon. Dette er et vanskelig problem, fordi versjonskodene på slutten av filnavnene gjør det vanskeligere å matche på filnavnet. Som standard vil Excel-matchformler returnere den første kampen, ikke den siste kampen, så vi må omgå den utfordringen med noen vanskelige teknikker.

Forklaring

Kjernen i denne formelen bygger vi en liste over radnumre for en gitt fil. Deretter bruker vi MAX-funksjonen for å få det største radnummeret, som tilsvarer den siste revisjonen (siste forekomst) av den filen.

For å finne alle forekomster av en gitt fil, bruker vi SØK-funksjonen, konfigurert med stjerne (*) jokertegn for å matche filnavnet, og ignorerer versjonskodene. SØK vil kaste en VALUE feil når teksten ikke blir funnet, så vi pakker inn søket i FEIL:

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

Dette resulterer i en rekke SANNE og FALSE verdier som dette:

(FALSK; SANN; FALSK; FALSK; SANT; SANN; FALSK; SANN)

Det er forvirrende, men SANT representerer en feil (tekst ikke funnet), og FALSE representerer en kamp. Dette matriseresultatet mates inn i IF-funksjonen som den logiske testen. For verdi hvis SANN bruker vi null, og for verdi hvis sant, leverer vi denne koden, som genererer relative radnumre for området vi jobber med:

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

IF-funksjonen returnerer deretter en rekke verdier som dette:

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

Alle tall unntatt null representerer treff for "filnavn1" - dvs. radnummeret i det valgte området "filer" der "filnavn1" vises.

Til slutt bruker vi MAX-funksjonen for å få maksimal verdi i denne matrisen, som er 7 i dette eksemplet.

Bruk INDEX med dette radnummeret for å hente informasjon relatert til den siste revisjonen (dvs. fullt filnavn, dato, bruker osv.).

Uten navngitt rekkevidde

Navngitte områder gjør det raskt og enkelt å sette opp en mer kompleks formel, siden du ikke trenger å oppgi celleadresser for hånd. I dette tilfellet bruker vi imidlertid en ekstra funksjon (INDEX) for å få den første cellen i de valgte filene, som kompliserer ting litt. Uten det nevnte området ser formelen slik ut:

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

Interessante artikler...