• 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.

Als functie voor datums

Status
Niet open voor verdere reacties.

Revolutionary

Gebruiker
Lid geworden
1 apr 2009
Berichten
183
Goede middag helpers,

Ik ben momenteel bezig met een onderzoek en daarbij moet ik verschillende gegevens met elkaar vergelijken. Ik heb een macro opgesteld die elke dag dmv een druk op de knop de meest recente gegevens laadt. Aan alle gegevens is een datum gekoppeld, maar deze datums komen niet altijd overeen. Nu wil ik graag in excel een als-functie ontwikkelen waarbij de datums, en de daarbij horende gegevens, wel met elkaar overeen komen.

In de bijlage heb ik een simpel voorbeeldje gedaan (zonder de macro's). In het tabblad 'input' worden dagelijks de gegevens geladen. Het tabblad 'output' zou dmv een als-functie de datums en gegevens aan elkaar gelijk moeten zetten. In dat tabblad heb ik (hopelijk) duidelijk uitgelegd wat de voorwaarde van de als-functie moeten zijn.

In het derde tabblad genaamd 'voorbeeld' heb ik tot slot een voorbeeld gemaakt die nogmaals aangeeft hoe een en ander zou moeten werken.

Zou iemand mij kunnen helpen met het opstellen van deze Als functie voor datums?

Alvast bedankt!
 

Bijlagen

Bekijk eens of ik in de goede richting aan het VERT.ZOEKEN ben , bekijk ook Ctrl F3 voor de gedefineerde " zoek " / " zoekvervolg " en " zoekeind "
 

Bijlagen

Code:
Sub tst()
  sq = Sheets("Input").Cells(1, 1).CurrentRegion
  For j = 2 To UBound(sq)
    c1 = c1 & vbCr & sq(j, 1) & "|" & sq(j, 2)
    For jj = 2 To UBound(sq)
        If sq(j, 1) = sq(jj, 3) Then c1 = c1 & "|" & sq(jj, 4)
        If sq(j, 1) = sq(jj, 5) Then c1 = c1 & "|" & sq(jj, 6)
    Next
  Next
  With Sheets("Output").Cells(100, 1).Resize(UBound(sq) - 1)
    .Value = Application.WorksheetFunction.Transpose(Split(Mid(c1, 2), vbCr))
    .TextToColumns , 1, -4142, , False, False, False, False, True, "|"
  End With
End Sub
 
@ snb , ze staan diep ;) " Sheets("Output").Cells(100, 1) " , echter de datum komt op zijn Amerikaans :eek: , anders wel perfect :thumb:
 
Bedankt voor jullie reacties!

@ Trucker, ik ben nog niet zo bekend met verticaal zoeken, dus daar ga ik me nog even in verdiepen.. jouw oplossing zit in ieder geval wel in de goede richting, maar is nog niet helemaal wat ik zoek... ik ga er nog even aan zitten en als ik er niet uit kom laat ik het wel weten.

@ snb, hoe kan ik die code die je postte in excel zetten? Dat is toch SQL ofzo? Moet ik die code in elke cel zetten of hoef ik hem maar 1 keer in te voeren?

Nogmaals bedankt!

Groeten,
Tim
 
De suggestie van snb is VBA ( macro ) klik Alt F11 kom je in de VB editor , kijk daar eens . Heb voor U vlug de code ingebracht ( module 1 ) en een knopje gemaakt ;)

stuur ons bij waar het fout loopt , ik heb deze oplossing redelijk snel bedacht , er zijn nog andere wegen voor een oplossing , eens HSV , Superzeeuw , Danny147 , Popipipo enz aan hun scherm zitten ..............
 

Bijlagen

Laatst bewerkt:
Trucker bedankt!

Ook de suggestie van snb zit dicht bij de oplossing die ik zoek. Ik ga er morgen opnieuw naar kijken, want ik moet zo weg.

Als ik er morgen niet uit kom dan weet ik jullie te vinden;)

Groeten,
Tim
 
Goede middag helpers,

Ik heb vandaag weer even naar de suggesties van trucker en snb gekeken, ze zitten in de goede richting maar het is nog niet helemaal wat ik zoek.. eigenlijk zouden er namelijk geen lege velden of velden met #N/B mogen zijn. Ik heb daarom zelf ook nog wat lopen sleutelen, maar ik kwam er helaas niet uit.

In de bijlage heb ik weer een voorbeeldje gedaan, dit keer wat kleiner en overzichtelijker. Er zit oa een voorbeeld bij die laat zien hoe de ALS-functie zou moeten werken. In het voorbeeldje staan ook 2 ALS functies die ik zelf heb gemaakt, maar die ook niet werken zoals ik zou willen.

Ik hoop dat iemand mij kan helpen, als er nog zaken onduidelijk zijn hoor ik het graag.

Alvast bedankt!

Groeten,
Tim
 

Bijlagen

Bekijk kolom Q al eens , ik heb daar terug een formule geplaats , moet nu nog even weg , bekijk het deze avond verder ;)
 

Bijlagen

Hoi Trucker,

Ziet er goed uit, de formule werkt bijna helemaal goed, dus de juiste oplossing kan niet ver weg zijn lijkt mij. Ik heb me geprobeerd te verdiepen in verticaal zoeken, maar van de hulp functie in excel word ik niet veel wijzer haha... ik zie dan ook niet precies waar het fout gaat...

De formule werkt overigens wel helemaal correct voor de gegevens van Z.


Groeten,
Tim
 
Tim , het zou ook via vba te doen zijn :) ik worstel nog met het datum format in de code van snb .
Code:
Sub tst()
  sq = Sheets("Input").Cells(1, 1).CurrentRegion
  For j = 2 To UBound(sq)
    c1 = c1 & vbCr & sq(j, 1) & "|" & sq(j, 2)
    For jj = 2 To UBound(sq)
        If sq(j, 1) = sq(jj, 3) Then c1 = c1 & "|" & sq(jj, 4)
        If sq(j, 1) = sq(jj, 5) Then c1 = c1 & "|" & sq(jj, 6)
    Next
  Next
  With Sheets("Output").Cells(2, 8).Resize(UBound(sq) - 1)
    .Value = Application.WorksheetFunction.Transpose(Split(Mid(c1, 2), vbCr))
    .TextToColumns , 1, -4142, , False, False, False, False, True, "|"
    Selection.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
  End With
 
  Application.Goto [H32]
End Sub
in de bijlage kan je al eens kijken ik had ook nog verder gezocht , maar eens er een verschil is van meer dan 1 dag liep het ook fout . Deze formule had ik uitgewerkt voor je bestandje " voorbeeld5 "
=ALS(ISFOUT(VERT.ZOEKEN(A3;$C$3:$C$13;1;0)=A3);VERT.ZOEKEN(A3-1;$C$2:$D$11;2;1);VERT.ZOEKEN(A3;$C$2:$D$11;2;0))
A3-1 komt neer op 1 dag minder , maar er zijn soms 2 tot 3 dagen minder .
 

Bijlagen

Eerlijk gezegd heb ik ook niet zoveel verstand van VBA:P maar als het daarin eenvoudiger is om te een oplossing te komen ga ik me daar ook nog wel even in verdiepen.

Ja klopt, in het uiteindelijke bestand waar de ALS formule voor bedoelt is komt een rij van 180 dagen en dan kan het verschil nog veel meer worden dan 2 of 3 dagen.

Ik ga morgen weer een blik op je suggesties werpen.
In ieder geval al hartstikke bedankt voor de gedane moeite!:thumb:

Groeten,
Tim
 
Ik vermoed dat snb , rudi ( warme bakkertje ) of andere vba'ers :thumb: de code nog gaan bekijken en bijwerken :p.
 
Hoi Trucker,

Ik heb nog eens naar jouw suggesties gekeken en ik heb even overlegd op mijn werk en er is besloten dat we nu één van jouw formules gaan gebruiken in het bestand. De formule is weleenswaar niet 100% correct, maar de onjuistheid is dermate minimaal dat het voor mijn onderzoek niet uitmaakt. Meer tijd er in steken staat niet in verhouding met wat het nog zou kunnen opleveren.

Nogmaals heel erg bedankt!:thumb: Met deze formule kan ik aardig uit de voeten!

Ik zet deze post op opgelost.

Groeten,
Tim
 
@Daniël,

Code:
Sub tst()
  sq = Sheets("Input").Cells(1, 1).CurrentRegion
  For j = 2 To UBound(sq)
    c1 = c1 & vbCr & [COLOR="Red"]Format(sq(j, 1), "mm/dd/yyyy") [/COLOR]& "|" & sq(j, 2)
    For jj = 2 To UBound(sq)
        If sq(j, 1) = sq(jj, 3) Then c1 = c1 & "|" & sq(jj, 4)
        If sq(j, 1) = sq(jj, 5) Then c1 = c1 & "|" & sq(jj, 6)
    Next
  Next
  With Sheets("Output").Cells(100, 1).Resize(UBound(sq) - 1)
    .Value = Application.WorksheetFunction.Transpose(Split(Mid(c1, 2), vbCr))
    .TextToColumns , 1, -4142, , False, False, False, False, True, "|"
  End With
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan