[Excel] Vlookup met twee zoekargumenten*

Pagina: 1
Acties:
  • 1.839 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • M_V
  • Registratie: Maart 2001
  • Laatst online: 24-05 21:25
Ik het volgede probleem: ik heb een grote tabel. Ik wil een nieuwe tabel bouwen met daarin gegevens uit de oude tabel.... beetje vaag verhaal. Misschien maakt een voorbeeldje het duidelijker. Dit is mijn tabel:

Persoon --- Jaar ---- Waarde
Klaas ---- 1991 ---- 3.12
Klaas ---- 1992 ---- 4.31
Piet ---- 1991 ----- 13
Piet ---- 1992 ----- 3.4

Nu wil ik dit ombouwen tot:
Persoon --- Waarde 1991 --- Waarde 1992
Klaas --- 3.12 ----- 4.31
Piet ---- 13 --- 3.4

Normaal doe ik dit altijd met vlookup, maar daar kan je maar 1 argument in meegeven. Is er een methode om dit handig te doen met 2 argumenten of meer?

Acties:
  • 0 Henk 'm!

  • Rob_G
  • Registratie: September 2004
  • Laatst online: 12-02-2023
Je zou een extra column kunnen maken met de tekst.samenvoegen functie (ik geloof dat het zo heet; ik heb de engelse versie, daar is het CONCATENATE)
Dan krijg je dit:
Persoon --- Jaar ---- Waarde
Klaas ---- 1991 ---- 3.12 ----- Klaas1991
Klaas ---- 1992 ---- 4.31----- Klaas1992
Piet ---- 1991 ----- 13 ----- Piet1991
Piet ---- 1992 ----- 3.4 ----- Piet1992

Dan kan je weer je vlookup functie gebruiken :)

edit: die rij moet dan natuurlijk wel links van de waardes |:(

[ Voor 7% gewijzigd door Rob_G op 27-08-2006 01:00 ]


Acties:
  • 0 Henk 'm!

  • M_V
  • Registratie: Maart 2001
  • Laatst online: 24-05 21:25
Rob_G schreef op zondag 27 augustus 2006 @ 00:59:
Je zou een extra column kunnen maken met de tekst.samenvoegen functie (ik geloof dat het zo heet; ik heb de engelse versie, daar is het CONCATENATE)
Dan krijg je dit:
Persoon --- Jaar ---- Waarde
Klaas ---- 1991 ---- 3.12 ----- Klaas1991
Klaas ---- 1992 ---- 4.31----- Klaas1992
Piet ---- 1991 ----- 13 ----- Piet1991
Piet ---- 1992 ----- 3.4 ----- Piet1992

Dan kan je weer je vlookup functie gebruiken :)

edit: die rij moet dan natuurlijk wel links van de waardes |:(
Op zich een goed idee! Het probleem is echter dat ik 15 jaren en 15 mensen heb, dus in de uiteindelijke tabel moet dan eerst een lijst met 15 kolommen vlookup strings komen te staan.

Je kan namelijk niet concatenaten binnen de vlookup, je moet naar een andere cel verwijzen. Zou daar nog iets voor te fixen zijn?

Acties:
  • 0 Henk 'm!

  • Rob_G
  • Registratie: September 2004
  • Laatst online: 12-02-2023
Ok, stel je begint met dit in sheet 1:
a b c d
klaas1991 klaas 1991 x
klaas1992 klaas 1992 x
klaas1993 klaas 1993 x
klaas1994 klaas 1994 x
klaas1995 klaas 1995 x
piet1991 piet 1991 x
piet1992 piet 1992 x
piet1993 piet 1993 x
piet1994 piet 1994 x
piet1995 piet 1995 x


Dan krijg je in de nieuwe worksheet:
a b c d e f
1991 1992 1993 1994 1995
klaas x x x x x
piet x x x x x

Correct?

Ervan uitgaand dat de waarde voor klaas in 1991 in cel b2 staat, kan je dan gewoon =VLOOKUP(CONCATENATE($A2;B1);Sheet1!$A$2:$D$226;4) invullen in b2, en die gewoon uittrekken naar alle andere cellen (dan ga ik ervan uit dat alle data die gevonden moet worden in sheet 1 cel a2 tot d226 staan, wat misschien niet zo is.

Ik heb het zelf even in excel getest, en het werkt uitstekend. Kan je de file wel mailen als je wilt.

[ Voor 5% gewijzigd door Rob_G op 27-08-2006 02:33 ]


Acties:
  • 0 Henk 'm!

  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 04-06 21:34
^^
=VLOOKUP(CONCATENATE($A2;B$1);Sheet1!$A$2:$D$226;4)
Waarschijnlijk.


Mochten de rijen in de goede volgorde staan (15x klaas, dan 15 x piet etc.), dan is er een andere methode.
In het nieuwe sheet maak je een extra kolom aan, waarin je mbv. de functie "match" de zoekstring opbouwd voor het zoeken naar een jaar voor die persoon, dus (als org. sheet "Data" heet en in kol. A: naam, kol. B: jaar en kol C: data) voor je eerste naam de string "Data!B2:C16".
bijvoorbeeld:
="Data!B"&MATCH(A2,Data!A:A,0)&":C"&MATCH(A2,Data!A:A,0)+14
(A2=naam, Data!A:A bevat de lijst met namen, Match met als derde argument 0 geeft de eerste vermelding van die naam)
Vervolgens gebruik je een functie als:
=VLOOKUP(B$1,INDIRECT($Q2),2,0)
(B1 is het jaar, Q2 bevat in mijn voorbeeld de zoekstring) om je data op te plukken.

Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Zonder hulpkolom gaat het ook met een beetje creatief gebruik van vergelijken en het gebruik van matrixformules:

in het voorbeeld:
bron: A-kolom namen, B-kolom jaren, C-kolom: gezochte waarden, in totaal 225 rijen
doel: Q-kolom naam, R1 jaartal1, S1 jaartal 2, etc


In cel R2:

code:
1
{=index($C$1:$C$225,MATCH(1,($Q2=$A$1:$A$225)*(R$1=$B$1:$B$225),0),1)}


Intikken zonder {}, bevestigen met ctrl-shift-enter want matrixformule en klikken en slepen.

Hoe het werkt:

1: ($Q2=$A$1:$A$225)*(R$1=$B$1:$B$225)
Bouw mbv een simpele vergelijking een matrix op van van nullen en enen waarbij een '1'aangeeft dat beide waarde overeenkomen: resultaat is bv {0/1/0/0/0}

2: MATCH(1,{0/1/0/0/0},0)
Zoek naar de positie van de eerste 1, in dit voorbeeld 2

3: index($C$1:$C$225,2,1)
Lees de waarde uit op die regel in kolom C

ik kan me voorstellen dat bij grote tabellen een hulpkolom wat beter presteert, maar dat zou je uit moeten proberen.

offtopic:
We zijn hier allemaal gevorderen ;) dus je titel zegt niet zoveel. Ik pas hem even aan :)

[ Voor 4% gewijzigd door Lustucru op 27-08-2006 11:21 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Acties:
  • 0 Henk 'm!

Anoniem: 9449

Afbeeldingslocatie: http://tweakers.net/ext/f/19710a819975253093b99973ecee1b4c/full.jpg

Is wat makkelijker dan de oplossing van Nielsje.

Let op de $-tekens, op deze manier kan je de fromule willekeurig doortrekken.

Acties:
  • 0 Henk 'm!

  • M_V
  • Registratie: Maart 2001
  • Laatst online: 24-05 21:25
Dankjewel jongens! Ik heb het voor elkaar :).

Ik zet jullie in het dankwoord van mijn scriptie :P

Dat het oorspronkelijk bij mij niet werkte was omdat ik geen concatenate had gebruikt, maar gewoon &. Maar dat werkt kennelijk niet in die lookup functies
Pagina: 1