25. april 2006 - 09:01Der er
13 kommentarer og 1 løsning
Funktion der tester data i en kolonne
I min tabel har jeg en kolonne med en lang række enhedsnavne, som jeg skal køre en datavalidering på. Der kan eksempelvis stå
5 5. 5. kt 5kt
Jeg søger en mulighed for validere data, så der kommer til at stå det rigtige enhedsnavn i en kolonne for sig. Da der der mange enheder og tastemulighederne er mange tror jeg ikke at en almindelig hvis funktion er praktisk.
Jeg har overvejet en særlig funktion for arket i stil med
function enhed(a) if a= "5" or "5." or then enhed="kontor" end if end function
Det virker bare ikke!Jeg ved ikke om det er min brug af or der er forkert. Kan man iøvrigt kombinere med trunkering og or?
Jeg er ikke helt med på hvormange måder inddata kan optræde på. Udfra dit forslag til funktion, ser det ikke ud til at du forventer andre valide input end "5. kontor" men du skriver at der er mange enheder og formodentligt er det heller ikke interressant at "validere" alle input hvis du ved at der skal stå 5. kontor.
Jeg vil anbefale en opdeling af hver række inddata i to kolonner: En med værdi og en med enhed. - værdi er f.eks. VENSTRE(A4;1) - enhed er f.eks. HØJRE(A2;LÆNGDE(A2)-1) Baseret på en række forudsætninger. Men da du skriver at det er enhedsnavnene du vil validere får du dem på denne måde ud i en streng for sig, som du kan teste for punktum og mellemrum og fjerne det eller hvad du nu vil.
Excelents forslag er det der ligger nærmest på det jeg søger.
Grunden til at jeg vil bruge en VBA-funktion er at kontoret ikke i alle tilfælde hedder noget med 5. Det kunne også være "Regnskab".
Jeg kan ikke få funktionen til at fungere med mere end to muligheder, jf. dit forslag. JEg får "Værdi!" Jeg kom til at tænke på om man måske kunne bruge range til at checke om enhedsbetegnelserne er der. Så behøver jeg måske ikke taste så meget.
Uanset om du laver det som VBA eller formler i regnearket så skal du kunne lave en fuldstændig liste (eller algoritme) for at afgøre hvordan det indtastede skal tolkes herunder hvornår det ikke kan tolkes. Kan du det, så post den her, der er jo flere her der så kan implementere det.
Alternativt skal du gå det igennem manuelt og for hver observation angive hvilken af de 16 mulige udfald der er (15 enheder + invalid)
Et bud: Dine data med forskellige enhedsnavne står i A kolonnen. I D1 til R1 (15 kolonner) indtastes dine afdelinger (5. Kontor, 6. Kontor m.v.) I D2:D20 indtastes de forskellige forkortelser vedr. 5. Kontor, E2:E20 vedr. 6. Kontor m.v. Herefter er så opbygget en matrix i området D1:R20 med alle tænkelige forskellige indtastninger, men de skal jo kun opbygges en gang. I Kolonne B indsættes så denne formel som returnerer overskrifterne ud fra de forskellige værdier =INDEKS($A:$R;1;SUM(HVIS($D$1:$R$20=A2;KOLONNE($D:$R)))). Når du har kopieret formlen ind trykker du ctrl+shift+enter så der kommer {} omkring. Herefter Kopierer formlen ned igennem B kolonnen. Hver gang du får en fejl, skal værdien i kol.A tilføjes til din matrix i D1:R20 og efterhånden vil du så have alle de forskellige forkortelser
Glimrende forslag. Det virker og giver et overblik over variationerne. Jeg går ud fra at man kan forskyde ift a. Jeg har testet med enhedsnavne i en anden kolonne, men det kunne jeg ikke få til at virke, men det gør ikke noget. Har du et svar.
Du kan godt indtaste enhedsnavne i en anden kolonne man det kræver så bare at du regulerer kolonnerne i formlen med samme forhold. Hvis du f.eks har området B i stedet skal formlen se sådan ud: {=INDEKS($B:$R;1;SUM(HVIS($D$1:$R$20=A2;KOLONNE($D:$R)-1)))}
Ved nærmere eftertanke er denne nok bedre. {=INDEKS($D:$R;1;SUM(HVIS($D$1:$R$20=A2;KOLONNE($D:$R)-3)))}
Så kan du placere enhedsnavne i hvilken A,B eller C. Hvis du vælger at flytte matrixen D:R, skal du bare tilsvarende formindske eller forøge -3 i formlen. Således at tallet angiver antallet af kolonner fra A til Starten af matrixen (Kol. D)
Du kan placere formlen lige hvor du har lyst (bare ikke inde i selve matrixen :O).)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.