|
Find filnavn fra sti ved hjælp af en formel.
I et regneark har jeg i en kolonne (her A) nogle sti- og filnavne, fx: Jeg vil nu gerne finde filnavnet. Som det fremgår af det viste lille eksempel, kan stierne være forskellige i længde, De har dog alle det til fælles at mapperne indbyrdes og filnavnet adskilles af det samme tegn, nemlig en '\' (backslash). Man kan naturligvis programmere en brugerdefineret funktion, der løses opgaven, men her løses den med en formel. Jeg viser først den samlede formel, og så forklarer jeg, hvad de enkelte dele gør. Er du ikke interesseret i forklaringen, kan du bare kopiere formlen og så ændre referencerne til de celler, du har brug for. =HØJRE(A1;LÆNGDE(A1)-FIND("#";UDSKIFT(A1;"\";"#";LÆNGDE(A1)-LÆNGDE(UDSKIFT(A1;"\";""))))) Først skal vi finde ud af, hvor mange '\', der er i strengen. Det gør vi med denne del af formlen. LÆNGDE(A1)-LÆNGDE(UDSKIFT(A1;"\";"")) Den vil i det første eksempel give 2 og i det andet 4. Hvad er det formlen gør? Først finder vi længden af den oprindelige streng (hhv. 14 i række 1 og 30 i række 2) med LÆNGDE(A1). Dernæst udskifter vi alle '\' ,med ingenting og finder længden af den nye streng med LÆNGDE(UDSKIFT(A1;"\";"")), som giver hhv. 12 og 26. Når vi så trækker de to tal fra hinanden, som vist i delformlen, får vi antallet af '\', og det er som nævnt 2 og 4 Nu skal vi så have fat i UDSKIFT en gang til, da vi skal udskifte '\' ,med '#'. I dette tilfælde skal vi dog ikke udskifte alle forekomster af '\',men kun den sidste, og det er her argumentet 'forekomst', kommer ind i billedet, og alene af den grund, at vi har lavet alle de indledende knæbøjninger, da den sidste forekomst jo altid vil være det samme som antallet af forekomster i alt. UDSKIFT(A1;"\";"#";LÆNGDE(A1)-LÆNGDE(UDSKIFT(A1;"\";"")) Nu ville resultatet se således ud, hvis det faktisk blev vist i cellen.
Nu skal vi så finde den finde den position, som det nye tegn '#' står på, og det gør vi med FIND("#";UDSKIFT(A1;"\";"#";LÆNGDE(A1)-LÆNGDE(UDSKIFT(A1;"\";"")))) som giver resultaterne hhv. 7 og 21. Nu skal vi så tage en del af strengen fra højre, men først skal vi lige finde ud af, hvor mange tegn, der skal med, og det gør vi med LÆNGDE(A1)-FIND("#";UDSKIFT(A1;"\";"#";LÆNGDE(A1)-LÆNGDE(UDSKIFT(A1;"\";"")))) som taget den samlede længde af den oprindelige streng og fratrækker det, vi lige har beregnet. Her er svarene 7 og 9 i de to eksempler. Vi skal altså bruge de henholdsvis 7 og 9 tegn, som står længst til højre i den oprindelige streng, og så er vi tilbage ved den samlede formel =HØJRE(A1;LÆNGDE(A1)-FIND("#";UDSKIFT(A1;"\";"#";LÆNGDE(A1)-LÆNGDE(UDSKIFT(A1;"\";""))))) som giver henholdsvis ole.jpg og ingen.jpg i de to eksempler. Jeg håber at dette var forståeligt, men ellers bare prøv at kopiere formlen og prøv selv med andre antal ' \' eller helt andre tegn. Det skal bare være det samme skilletegn overalt i strengen. Vil man gøre formlen mere fleksibel, så den kan bruges med andre tegn, kan man ændre den til fx =HØJRE(A1;LÆNGDE(A1)-FIND(B2;UDSKIFT(A1;$B$1;$B$2;LÆNGDE(A1)-LÆNGDE(UDSKIFT(A1;"\";""))))) hvor skilletegnet i strengen skrives i B1, og det tegn, der skal bruges midlertidigt skrives i B2. Vil man finde filnavnet med en brugerdefineret funktion, kunne den se således ud. Function filnavn(sti) As String |