Avatar billede Towle Nybegynder
26. december 2014 - 08:50 Der er 23 kommentarer

Avanceret(?) LOPSLAG/VLOOKUP

Jeg har en Filemaker-database med 33.000 poster. Indholdet er klassiske CD'er. Mine ønsker kan sikkert "programmeres" i Filemaker, men der er jeg endnu mere uerfaren end jeg er i Excel, så jeg udtrækker de relevante felter og indlæser dem i Excel

Jeg har et felt med "Komponist" - altså med angivelse af komponist(er) på den pågældende CD. Jeg ønsker nu at tilføje en kolonne (faktisk en slags database) med alle de komponistnavne jeg kender.

For hver CD skal der nu checkes for om et af komponistnavnene i "databasen" forekommer i komponistfeltet i samtlige poster. Hvad der i givet så skal ske, er lidt uklart for mig p.t. Det kan jeg ikke lige overskue, da der er flere problemer involveret.

Jeg har leget lidt med Jan Kronsells artikel:
http://kronsell.net/lopslag.htm
Med den kan jeg komme et stykke af vejen, men der opstår hurtigt problemer.

Hvis min "database" (som blot kan være to kolonner på samme ark) bl.a. indeholder en stribe à la:

EFTERNAVN - FORNAVN - TEKST
Shostakovich - Dmitri - Her er en tekst om Shostakovich

- og at min CD indeholder f.eks. følgende poster:

VARENUMMER - KOMPONIST
CD001 - Beethoven
CD002 - Dessau
CD003 - Mozart

Opgaven består i at konstatere, at et af mig kendt komponistnavn findes i feltet "Komponist" for hver CD (= alle poster i databasen). Hvis der er match, skal "TEKST" skrives i et nyt felt til højre for "FORNAVN".

Problemet er at mit felt med "KOMPONIST" er en blandet landhandel. Der vil f.eks. kunne forekomme følgende:
Dessau
Dessau, Paul
DESSAU / SHOSTAKOVICH / BEETHOVEN

Jeg kan kun få det til at virke med de felter der kun indeholder "Shostakovich", men ikke hvor dette navn indgår som en del af en streng.

Se http://www.danacord.dk/vlookup.xlsx
Avatar billede lordnelson Seniormester
26. december 2014 - 09:40 #1
Ved ikke med lopslag
Men i VB kunne du skrive ala
Range("a1").Value Like "*" & Range("b1").Value & "*"

Altså Joker tegn for og bag  selve navnet du søger på
Avatar billede Towle Nybegynder
26. december 2014 - 11:17 #2
Æhhh, VB ... det er en makro, ikke? VB er helt sort for mig. Ved at bruge den indvendige side af hovedet kan jeg godt følge logikken i dit forslag, men hvordan implementerer og eksekverer jeg det?
Avatar billede lordnelson Seniormester
26. december 2014 - 12:24 #3
Hvad med det der  komponistnavn 
er det et du selv skriver i en celle ?
Avatar billede xl-Enthusiast Ekspert
26. december 2014 - 13:19 #4
Om jeg forstår dig ret, så prøv denne i B2:

=IF(ISERROR(FIND(" ";A2));VLOOKUP(A2;$G$2:$H$20;2;FALSE);VLOOKUP(MID(A2;1;FIND(" ";A2;1)-2)&"*";$G$2:$H$20;2;FALSE))

Kopier ned.

Hvis du bruger dansk Excel, så:

IF = HVIS
ISERROR =ER.FEJL ((mener jeg)
FIND = FIND
VLOOKUP = LOPSLAG
MID = MIDT
FALSE = FALSK
Avatar billede Towle Nybegynder
26. december 2014 - 15:29 #5
Nej, feltet er udfyldt i det databaseutræk som jeg gerne vil have noget tilføjet i og listen med kendte navne er også udfyldt.
Avatar billede Towle Nybegynder
26. december 2014 - 15:59 #6
xl-Enthusiast skrev:
> Om jeg forstår dig ret, så prøv denne i B2:
>
> =IF(ISERROR(FIND(" ";A2));VLOOKUP(A2;$G$2:$H$20;2;FALSE);VLOOKUP(MID(A2;1;
> FIND(" ";A2;1)-2)&"*";$G$2:$H$20;2;FALSE))
>
> Kopier ned.

Jo, men får den får et hit på "Mozart / Dessau" skriver den teksten for Mozart. Jeg glemte at fortælle hvad der skal ske, når den finder flere navne i et felt (f.eks. "Mozart / Dessau / Shostakovich / Nielsen"). Jeg skrev:

> Hvad der i givet så skal ske, er lidt uklart for mig p.t. Det kan
> jeg ikke lige overskue, da der er flere problemer involveret.

Du har jo faktisk løst opgaven og så skal du selvfølgelig også have point. Giv et pip så du kan få dem.

Nu ved jeg så ikke om jeg kan fortsætte i denne tråd og sætte nye point på spil, for jeg skal jo videre herfra?
Avatar billede xl-Enthusiast Ekspert
26. december 2014 - 16:22 #7
Men hvis der står "Mozart / Dessau" er det jo ikke let at vide, hvis det er essau der skalæ ledes efter, derfor var min formel indrettet efter at søge på det første navn.

Spørg løs, men vær meget konkret i opågaveformuleringen

Jeg er ligeglad med point.
Avatar billede Towle Nybegynder
26. december 2014 - 18:00 #8
Nu står der "Dessau" i kolonne B, men der kunne også stå "Dessau
Dessau, Paul", ligesom "Mozart" kunne have været "Mozart, W.A.".

Det skal bare ændres til at den søger efter om et givent navn overhovedet forekommer i B - ikke som det første med bare eet eller andet sted. jeg har kun behov for at vide om Ja eller Nej.

Et af mine problemer herefter er, at der i min "komponistdatabase" (kolonne G+H) godt kan være flere med samme efternavn, f.eks. Leopold Mozart og Wolfgang Amadeus Mozart. Det ved jeg ikke lige hvordan jeg skal håndtere.

Hvis jeg skriver f.eks. "Mozart-L" og Mozart-WA" i kolonne G, findes disse jo ikke i kolonne B. Medmindre, selvfølgelig, at man beder den om at ignorere eventuelle bindestreger og alt efterfølgende. Måske en mulighed, men jeg er lydhør over for smartere løsninger.
Avatar billede xl-Enthusiast Ekspert
26. december 2014 - 19:20 #9
Det ville være mere hjælpsomt hvis du ville uploade en fil med flere eksempler (til http://gratisupload.dk/) og så var noget mere klar i beskrivelsen, eksempelvis:

Hvor står det navn der skal søges efter (eksempelvis A2:A100)
Hvis det står i A2:A100 og hvis der står flere navne i en given celle, hvilket af navnene skal der søges efter, eller skal der søges efter alle navne.

Hvor mange skilletegn kan der forekomme (, /) osv.

Hvor står det der skal returneres (eksempelvis i H2:H100)

(Brug også gerne overskrifter der relaterer til emnet og ikke til noget fuldstændigt andet. Muligvis er det indlysende for dig selv , hvad der menes, men prøv at sætte dig i en andens sted).
Avatar billede Towle Nybegynder
27. december 2014 - 05:27 #10
Puha, det så overskueligt ud i det lille eksempel jeg lavede, men når jeg på, på opfordring, udbygger med rigtige data, vælter det op med problemer og jeg har forståelse for hvis du står af her.

Den nye fil ligger her:

Et par indledende og overordnede kommentarer:
1. Der er ca. 3000 tomme felter i kolonne B i databasen - altså hvor der ikke er angivet en komponist. Jeg har udelade 2.997 i min fil.
2. Det højeste antal navne i kolonne B er 15, adskilt med /
3. Jeg er p.t. i gang med at afluse databasen for fejl, f.eks. "Abelc.F." i stedet for "Abel, C.F.".
4. Jeg er også i gang med at indsætte de manglende kommaer som adskiller mellem efternavn og fornavn (en gammel uhensigtsmæssighed fra før min tid). Abstrahér venligst fra disse fejl, som vil blive rettet.

Måske er opgaven slet ikke egnet til Excel alligevel? Lad mig, så kort og præcist som det er mig muligt (jeg er højrehjernet), forsøge at beskrive hvad det overordnede formål er:

I tillæg til den eksisterende database med varer (CD'er) vil jeg oprette en komponistdatabase og forbinde disse relationelt i Filemaker. Denne komponistdatabase vil blive fodret med alle de lister jeg kan finde rundt om og vil givetvis indeholde en masse navne som vi slet ingen CD'er har med, men hellere for mange end for få.

Det endelige mål er at kunne slå op i komponistdatabasen og se hvilke CD'er vi har med musik af Mozart, hvis navn vil optræde som et link i varedatabasen, da han findes i komponistdatabasen. Det er altsammen Filemaker-teknik og derfor denne tråd uvedkommende.

Formålet med den øvelse jeg har gang i nu er at få identificeret sammenfaldene mellem de to databaser - altså hvilke CD-komponister der findes i komponistdatabasen (eller omvendt).

Det jeg gerne vil opnå er således at danne det materiale jeg skal bruge for at opbygge komponistdatabasen. At der er op til 15 navne i komponistfeltet i CD-databasen og der derfor vil blive dannet 15 nye felter i kolonnerne C-Q i denne Excel-række (databasepost), skal jeg nok finde ud af at håndtere. Eksempel:

Hvis der er 4 navne i et felt i CD-databasen og disse alle findes i komponistdatabasen, så skal der altså dannes 4 nye felter til højre for kolonne B med eet navn i hver.

Desværre viser det sig (i det nye live-eksempel), at der er langt flere forekomster af komponister med samme efternavn end jeg regnede med. Havde det være nogle få, kunne jeg have fixet det med knofedt, men med det store antal skal der nok findes en anden løsning og her er jeg helt blank.
Avatar billede Towle Nybegynder
27. december 2014 - 05:31 #11
Ups, jeg glemte linket til den nye fil: http://gupl.dk/717786/
Avatar billede ebea Ekspert
27. december 2014 - 09:34 #12
Jeg har prøvet også at lave en opstilling ud fra de kriterier som du forsøger at angive.
Men som xl-Enthusiast skriver, ville det være bedre (og nemmere) hvis du sendte en fil, hvor dit eget oplæg er angivet, og hvad det er du nøjagtigt ønsker.
Dette har du gjort nu på Gratisupload.dk, men har så indsat et password til at hente filen.

Så det ligger noget tungt med at prøve at hjælpe dig. Så enten skal du levere filen uden password, eller også angive password herinde. Det andet giver ikke rigtig mening.

Og så en lille detalje :-). Når du skriver herinde, så angiv dit indlæg som en kommentar, og ikke som et svar, med mindre da, at du vil lægge et svar på en løsning.
Avatar billede Towle Nybegynder
27. december 2014 - 10:20 #13
Øv, den var dum. Her et et link til filen uden adgangskode. Adgangskoden var i øvrigt "vlookup".

ebea skrev:
> og hvad det er du nøjagtigt ønsker.

Det er det jeg har forsøgt i indlæg nr. #10. Kommunikation er svært, da vi tænker så forskelligt.
Avatar billede Towle Nybegynder
27. december 2014 - 10:27 #14
Eiiii, her kommer linket ;-)

http://gupl.dk/717789/
Avatar billede ebea Ekspert
27. december 2014 - 11:28 #15
Towle! Din uploadede fil gav da, om ikke andet, så en oversigt over hvad det er du har af navne i din database, og hvordan data ser ud fra den.

Men det er stadig (for mig) lidt svært helt at danne sig et overblik over, hvordan du har tænkt dig et slutresultat.

I det uploadede eksempel, har du 2 sæt overskrifter som er ens (Navn og Tekst); men når jeg kigger på disse 2 sæt kolonner, så kan jeg ikke se sammenhængen i disse.
Kun i kolonne H og I ser jeg sammenhæng.

I den opstilling som jeg har lavet, søges der i et søgefelt efter et navn i kolonne B, og i alle de match som der matcher denne søgning, angives der så i en ny kolonne, på hvilken CD disse match findes.
Er dette ikke det overordnede mål med dit ønske ?

Navn og forklaringsfeltet i H og I kolonnen, er vel som sådan ikke nødvendige for søgningen, eller hvad ?
Og skal de overhovedet indgå i dette søgeresultat ?
Navn og forklaringen på disse har du jo i din Filemaker database, hvor du (formentlig) går tilbage med de fundne søgeresultater, og slår dem op.

Eller korriger venligst, hvis jeg helt har misforstået hvad det er du ønsker.
Avatar billede xl-Enthusiast Ekspert
27. december 2014 - 13:41 #16
Jeg må tilstå, at selv efter flere gennemlæsninger af #10, så står det mig ikke klart, hvad opgaven er, så jeg stopper her.
Avatar billede Towle Nybegynder
27. december 2014 - 15:42 #17
Jeg synes selv jeg har lagt en columbusæg. Se mit nye eksempel her: http://gupl.dk/717791/.

Der foretages et opslag i hvert felt i kolonne B for at checke om et eller flere af navnene findes i komponistdatabasen.

Komponistdatabasen, som endnu kun eksisterer som kolonne K-L har jeg nu forsynet personerne med et unikt ID-nummer.

B38 indeholder "Adam / Weber / Stankelbein / Chopin / Delibes / Tchaikovsky / Debussy / Berlioz". Hvis "Adam" findes, skrives hans ID-nummer i C38. Hvis "Weber" findes, skrives hans ID-nummer i C39. Nye kolonner oprettes on-the-fly efter behov. Som det ses findes "Stankelbein" ikke og derfor skrives der blot et nul.
Avatar billede Towle Nybegynder
27. december 2014 - 15:43 #18
> Hvis "Weber" findes, skrives hans ID-nummer i C39.

Det skulle selvfølgelig være B39 - ikke C39.
Avatar billede ebea Ekspert
27. december 2014 - 16:06 #19
Towle!  -  Hvori består Columbusægget.
Jeg ser ingen formler, som gør at du er kommet frem til den løsning du beskriver. Ej heller hvori du får returneret CD nummeret i kolonne A (som jo var et af dine kriterier).

Jeg kan ikke finde ud af, om det er dig som er forvirret nu, eller mig!

Det er stadig ganske uklart for mig, hvad du ønsker, og ud fra hvad.

Når nu du har dine rådata i Filemaker Pro, hvorfor udtrækker du så ikke disse i enten en CSV fil, eller som en Excel fil, som programmet også kan, og så sender dem i en fil på Gratisupload.dk
Så ville det være ganske meget nemmere, at se hvad der er af data, og hvordan de hænger sammen. Som du fremlægger dem i dine fil eksempler, er det ikke til at se.
Som beskrevet i et tidligere indlæg, kan jeg ikke se sammenhængen i dine kolonner (Navne og Komponister)

Men hvis du mener at du kan bruge din løsning nu (Columbusægget), så er det jo fint.
Avatar billede Towle Nybegynder
27. december 2014 - 16:21 #20
Øh, nej. jeg har lavet en principskitse. Det er jo netop hjælp til formlerne der er mit ærinde her.

ebea skrev:
> Men hvis du mener at du kan bruge din løsning nu
> (Columbusægget), så er det jo fint.

Joeh, men jeg mangler jo netop den formel der udfører opslagene og skriver data i de nye felter.

Hvordan skal formlen være der læser B38 og slår op i kolonne K for at se om der er bid. Hvis der er det, skrives ID-nummeret i et nyt felt ... her C38. Er der flere hits i B38, skrives i (nye om nødvendigt) felter (C38, D38 o.s.v.).

Lidt ærgerligt hvis det skal strande her, da jeg selv synes det er så simpelt og indlysende. Jeg kan bare ikke komme i tanker om andre måder at beskrive det på.
Avatar billede ebea Ekspert
27. december 2014 - 21:18 #21
Towle! - Jeg har ikke helt opgivet endnu (men tæt på). Men jeg har i mellemtiden, opdelt alle dine navne i din nye database, så de befinder sig som opdelte for, mellem, og efternavne, for at lette en søgning.

Og så prøver jeg at få lavet en sammenligning med dine databaser (som jeg tror er meningen med det hele), og så finde den bedste løsning for dette.
Disse 2 databaser er nu opdelt på 2 ark.
Og på det ene ark kommer resultaterne med navn og ID Nr.
Jeg har prøvet med formler, men det endte op med en MEGET langsom søgning; så det er ikke den vej det skal løses.

Så jeg søger en anden løsning i mellemtiden.
Avatar billede Towle Nybegynder
28. december 2014 - 06:10 #22
Sammenligning mellem "databaserne" er meningen, ja. Hvis en funktionsdygtig løsning er langsom, spiller det ingen rolle. Det skal jo kun bruges een eller ganske få gange i Excel, da de genererede data skal overføres til Filemaker.

Du har ikke uploadet endnu, så vidt jeg kan se. Fint nok, jeg venter gerne.
Avatar billede ebea Ekspert
31. december 2014 - 14:24 #23
Towle!  -  Jeg har noget løsning klar, som jeg tror er det som du har kigget efter.

Jeg kunne godt uploade den til gratisupload.dk, men jeg har en fornemmelse af, at du måske nok har 10 ekstra spørgsmål til løsningen, og ændringer på Regnearket.

Så for at gøre det lidt nemmere, kan du svare på min private email, så sender jeg Regnearket til dig.

post@ebe.dk
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester