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