• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Formule om vorige waarde te zoeken en waarde in te vullen

Status
Niet open voor verdere reacties.

Killerclown

Gebruiker
Lid geworden
30 dec 2007
Berichten
181
Goeieavond,

Bekijk bijlage Sjabloon importfile.xlsx

Wie kan mijn probleem oplossen?

In bijlage zit een exceltabel.

Kolom D met SeqNo bevat de getallen 10, 20, 30, 40....
Kolom C bevat de formule
Kolom B is in dit voorbeeld niet belangrijk.
Kolom A vul ik in met een getal 1 tot 5

Nu wat is de bedoeling.

Als je in kolom A het cijfer 1 invult, dan verandert de cel in kolom C in een ?
Als je in kolom A het cijfer 2 invult, dan neemt hij de waarde over van de cel in kolom C van een rij hoger.
Als je in kolom A het cijfer 3 invult, dan neemt hij de waarde over van de cel in kolom C van een rij hoger.
enz

Wat is nu mijn probleem:

Als je in kolom A het cijfer 2 invult na een vorig cijfer 2, dan moet hij de waarde van de cel in kolom C idem nemen als de vorige celwaarde waarbij het niveau een 2 was.
Zie rij 25, 28 en 34.
De waarde in kolom C van rij 28 moet dezelfde waarde hebben als het vorige niveau 2. In dit geval rij 25.
Dus in kolom C van rij 28 moet de waarde 230 staan.

Iemand een idee hoe ik mijn probleem oplos? Ik zou moeten zoeken naar de vorige waarde uit kolom C die bij het vorige zelfde niveau 2 (of 3 of 4 of..) staat.

Hopelijk is mijn uitleg wat duidelijk. Ik heb de cellen in geel aangeduid zodat het wat duidelijk is.
Kan iemand mij helpen want ik zit volledig vast?

Met dank!
 
Het was even puzzelen, maar probeer deze eens voor C2 en verder:
Code:
=ALS(A2=1;"?";ALS(A2>1;ALS(ALS.FOUT(ZOEKEN(A2;A$1:A1)=A2;0);ZOEKEN(2;1/(A$1:A1=A2);C$1:C1);D1);ALS(EN(A1="";A2="");C1;D1)))
 
YEEEEEESSSSSS!!!!
Dit lijkt te doen wat ik wou.
Uren heb ik daar al op gezwoegd.

DANK DANK DANK!!!!
 
Toch nog iets ontdekt dat niet goed loopt.

Bekijk bijlage Sjabloon importfile2.xlsx

Als je kijkt naar lijn 26 en 28 in de nieuwe file dan zie je bij waarde 2 het getal 10 staan in kolom C
Hier zou ik eigenlijk getal 240 verwachten.
Ik denk dat het probleem te maken heeft met dat hij naar het vorige getal 2 gaat zoeken. Alhoewel niveau 1 er tussen staat, zou hij naar niet naar het vorige getal 2 mogen zoeken maar de waarde van niveau 1 (kolom D) overnemen.

Het is de bedoeling dat je niet over een hoger niveau gaat zoeken. (2 kan niet over 1, 3 kan niet over 2 enz)

Kan iemand nog eens naar de formule kijken of dit op te lossen is?

Alvast dank
 
Misschien dat deze formule in C2 je verder helpt:
Code:
=ALS(A2=1;"?";ALS(A2="";ALS(A1="";C1;D1);INDEX(D$1:D1;SOMPRODUCT(GROOTSTE((A$1:A1=A2-1)*(RIJ(A$1:A1));1)))))
 
@sylvester-ponte: mooie oplossing maar op lijn 11 zou bij niveau 2 in kolom C het getal 10 moeten staan ipv 60. Als er na een niveau 3 opnieuw een niveau 2 staat, moet hij naar het vorige niveau 2 gaan zoeken.

@rebmog: deze formule lijkt op het eerste zicht te werken. Ik test ze uit en zal nog feedback geven.
 
@rebmog

Ik heb toch nog een foutje gevonden.
Als bijvoorbeeld niveau 2 de rij net onder niveau 1 staat, dan loopt de nummering goed.
Als er een rij tussenzit, dan loopt de nummering verkeerd.

Bekijk bijlage Sjabloon importfile3.xlsx

Voorbeeld in bijlage:
niveau 2 op rij 15 heeft in kolom C de waarde 120 ipv 130
Niveau 3 op rij 21 heeft in kolom C de waarde 170 ipv 190
 
Bijna :-s

Als er tussen niveau 1 en niveau 2 in kolom A een lege cel staat, dan neemt de rij met niveau 2 in kolom C de waarde over van de cel erboven in plaats van de cel erboven in kolom D
Voorbeeld hieronder, zou niveau 2 de waarde 300 moeten krijgen ipv 290.
Zelfde probleem bij niveau 3.


1...?........290
.....290....300
2...290....310
.....290....320
 
als hij voldoet , dan is hier de nettere versie: jouw bewoordingen gebuikt in de function en iets geoptimaliseerd
Code:
Function ParentSeqNo(Tabel As Range, Niveau As Range) 'Niveau is een Range object. deze wandelt tijdens de loop om hoog in de tabel
    If Niveau = 1 Then ParentSeqNo = "?": Exit Function
    startNiveau = Niveau
    ParentSeqNo = Niveau.Offset(-1, 3) 'deze waarde alvast op verdacht opslaan (Rij erboven kolom er naast)
    Do Until Niveau.Row = Tabel.Row
        Set Niveau = Niveau.Offset(-1) 'Niveau staat nu een rij hoger
        If Niveau <> "" Then
            If startNiveau = "" Then ParentSeqNo = Niveau.Offset(, 3): Exit Do 'kolom er naast
            If startNiveau = Niveau Then ParentSeqNo = Niveau.Offset(, 2): Exit Do 'gelijke waarde gevonden (waarde uit gelijke kolom toekennen
            If startNiveau > Niveau Then Exit Do 'kleinere waarde gevonden deze waarde is in de programmaRegel 4 al toegekend
            'niveau is hoger dan startniveau dus verder zoeken
        End If
    Loop
End Function
 

Bijlagen

  • Sjabloon importfile_svp 4c.xlsm
    15,9 KB · Weergaven: 17
Laatst bewerkt:
Thanks!
Op het eerste zicht lijkt het te werken en te doen wat het moet doen.
Ik test het nog wat verder uit maar het ziet er ok uit.

Heel veel dank!!!!!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan