27. november 2000 - 10:39Der er
8 kommentarer og 1 løsning
Problemer med VLOOKUP (VOPSLAG)
Jeg sidder og roder med et regneark, hvor jeg skal matche et linienummer med en kundekode. Det ville være let nok, hvis der var tale om en til en relationer, hvor en linie kun kan have en kunde. Sådan er det desværre ikke. En linie kan i princippet have op til 6 forskellige kundekoder.
Jeg bruger VLOOKUP til at matche min TDK faktura (i Excel-format) op mod mit database udtræk. Problemet som ovenfor beskrevet udmønter sig i, at VLOOKUP kun returnerer den første kundekode per linie den støder på. Det skal retfærdigivis nævnes, at der på TDK fakturaen optræder det samme linienummer flere gange, som derved indikerer, at der er mere end en kundekode per linie.
Findes der nogen mulighed for at tvinge VOPSLAG til at returnere alle de forskellige kundekoder?
A24 = linienummer B kolonnen indeholder tilsvarende linienummer C & D kolonnen indeholder henholdsvis kunde og regnskabskode.
Hvis VLOOKUP ikke finder linienummeret, så returneres værdien FALSE.
Jeg håber der er et geni, der kan hjælpe mig, så jeg fortsat kan behandle det hele i Excel. Jeg ved godt at Access er bedre egnet, men så skal jeg konvertere format til vores regnskabssystem, hvilket jeg ikke lige kan overskue rent tidsmæssigt.
Forudsætning for svar: Der tale om en, \"en-til-mange\"-relation, og ikke en \"mange-til-mange\" relation
Hvis du vender udtrykket om, så kan du finde en linie til hver kundekode. Når du har fundet det, så kan du f.eks. via en pivottabel se hvilke kundekoder der hører til hvilke linier.
Jammen jeg kan sagtens finde 1 linie til hver kundekode, men jeg kan ikke få VLOOKUP til at returnere værdien, og det skyldes, at VLOOKUP øjensynligt kun kan finde ud af at returnere den første værdi den støder på i et sorteret tabel matrix.
Jeg vil lige kigge på pivottabel, men jeg har ikke gode erfaringer dermed, desuden bliver data importeret fra en anden Excel-fil, som jeg ikke har lyst til at hælde ind i den fil jeg arbejder med, så kommer den op over 2mb, hvilket gør Excel ekstremt langsommeligt at arbejde med.
Hvis dine opslagsværdier er sorterede kan du bruge =match(opslagværdi;opslagsarray;matchtype) hvis matchtype =0 findes nummer på 1. position i opslagsArray. Hvis opslagsArray=1 findes sidste.
Med disse 2 værdier kan du konstruere en reference vha =indirect(referenceText):
Det er måske mere elegant at bruge =offset(ref;række;kolonne;højde;bredde) funktionen der angiver en reference i forhold til et område: =offset(b41;match(a24;$B$42:$D$777;0);1;match(a24;$B$42:$D$777;1)-match(a24;$B$42:$D$777;0)+1)
Hvis du indtaster formelen som matrixformel kan du se værdierne hvis der er flere svar.
Desværre får jeg svaret #N/A når jeg laver det første step: =MATCH(A24;TDK_q.xls!$B$2:$D$777;0) =MATCH(A24;TDK_q.xls!$B$2:$D$777;1)
Jeg er lige lidt meget blank her! Jeg fatter ikke lige, hvorfor Excel returnerer #N/A, fordi den opslåede værdi forefindes i opslagsarray i 1 kolonne ($B$) - er jeg bare almindelig fatsvag?
Jeg har sorteret, så alle 3 kolonner er sorteret stigende.
Matrixformel - jeg har prøvet at følge anvisningerne i hjælpefunktionen på Excel, men jeg er bange for, at også her er jeg spejlblank.
Så fik jeg MATCH til at returnere start og slutværdien, nu skal jeg \"bare\" have returneret alle værdierne fra mit array, i stedet for ROW indentifikationen.
Jeg kan fortsat ikke fatte hvad du gør ovenfor i hverken INDIRECT eller OFFSET...så hvis du overhovedet orker, så må du meget gerne gøre mig mærkbart klogere.
Du skal have lavet en reference til det område der indeholder de returværdier du ønsker. =offset(ref;række;kolonne;rækker;kolonner) laver en cellerefernce i forhold til cellen ref. Eksempel: =offset(A1;2;1;2;1)giver referencen b3:b4. (2 rækker nedenfor a1,1 kolonne til højre,2 rækker,1 kolonne). Du har med match startrækken og slutrækken for dine ønskede rækker i forhold til startcellen i dit matchområde. Når du skal have en formel indtastet som matriks laver du først formlen almindeligt. Når den virker trykker du F2 for at editere. For at indtaste som matriks taster du på en gang SHIFT CTRL ENTER. Hvis du vil fylde et område mærker du området op med formelcellen som den aktive og trykker samme tastkombination. En anden måde at komme til andre end den første matriksværdi, er at bruge =index funktionen
Tak for det! For det ikke skal være løgn, så skifter vi til en EDI-løsning i stedet :-)
Mvh Peter
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.