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

DateValue en DateDiff

Status
Niet open voor verdere reacties.
De datedif functie kent geen argument met 4 Y's. Je moet er maar 1 gebruiken (óók dát staat in F1 Help ;))

[EDIT] O wacht ff.... Je bedoelt die van cel E8... Een jaartal is geen datum. Daar valt dus weinig verschil tussen uit te rekenen. Je zou er dan 1-1-1951 van kunnen maken. Maar of dát terecht is???
 
Laatst bewerkt:
@Harry, whoops... Waarschijnlijk nét 1 tandje teveel naar onderen gescrolled toen ik gisteren keek. Dank voor het rechtzetten van deze blunder.

@jansm, dat had je dus NIET kunnen zien in de Help van VBa... :eek: (mea culpa ;))
 
Ok, geen andere oplossiing dan dit dus?
Bekijk bijlage 292375

Bijvoorbeeld!
Ik moet wel zeggen dat het een rommelige dataset is wat je gebruikt. Lege regels, spaties voor de datum (of niet), alleen een jaartal... Als de bron waarmee je werkt goed is, hoef je daar niet zo omheen te programmeren. Kan je de basis dus niet beter aanpassen?
En wat wil je precies bereiken? Nu bereken je het aantal dagen dat iemand geleefd heeft. Ik weet niet hoe het met jou zit, maar de uitkomst van cel G11 met 32338... Kan jij dan aangeven hoe oud iemand is geworden?
 
Ginger, jouw opmerkingen zijn terecht ware het niet dat de tabel die ik bewerk geëxporteerde data is. Er zitten idd lege regels tussen, spaties wel/niet vóór datum, alleen jaartal. Ik kan die niet met de hand corrigeren vandaar de bochten waarin ik me moet wringen.
Uit kolom E en F wil ik uiteindelijk de leeftijd berekenen. Dat zie je aan het begin van dit draadje (correspondentie met Harry). Zoals je ziet heb ik problemen gehad met het toepassen van functie DateDiff.
Het resultaat wat ik beoog is een presentatie van de leeftijd:
0-31 dagen in dagen (d)
0-1 jaar in maanden (m)
1- jaar in jaren (j)
Dat gaat dus een regel worden met meerdere functies. Dat ben ik nu aan het proberen. Kom daar nog niet goed uit maar ga nog ff stug door. Het wordt zoiets als
Code:
 If DateDiff("yyyy", DateValue(arr(jjj, 11)), DateValue(arr(jjj, 47))) < 0.084932 Then
                 arr2(n, 8) = DateDiff("d", DateValue(arr(jjj, 11)), DateValue(arr(jjj, 47)))
                    ElseIf DateDiff("yyyy", DateValue(arr(jjj, 47)), DateValue(arr(jjj, 11))) < 1 Then
                  arr2(n, 8) = DateDiff("m", DateValue(arr(jjj, 11)), DateValue(arr(jjj, 47)))

De tabel die jij hebt gezien is voor mij een oefentabelletje om de basis goed te krijgen en is idd een rommeltje maar kijk er maar ff doorheen. Mochten jullie ideeën hebben? Voel je uitgedaagd!
 
Laatst bewerkt:
Plaats het bestandje als je wil Jan.
Niet dat ik een oplossing heb, maar je werkt nu in een array zo te zien.
 
Jij heb voor mij dat array-gedoe opgezet en ik gebruik het nu ook op een andere tabel, weliswaar aangepast. Het bestand is 3 mb groot (heb zo veel aan elkaar geknoopt en het werkt! maar is nooit af) en bevat data dat ik hier niet kwijt wil. Zal proberen om een aftrekseltje te maken en dat zal ik hier plaatsen.
 
Obv van het bestandje #22. Als er alleen een jaar staat dan wordt er uitgegaan van 1 januari van dat jaar.

Code:
Sub VenA()
Dim j As Long, ar, d As Long, m As Long, y As Long
  With Range("E3:G" & Cells(Rows.Count, 5).End(xlUp).Row)
    ar = .Value
    For j = 2 To UBound(ar)
      If Trim(ar(j, 1)) <> "" Then
        If Len(ar(j, 1)) = 4 Then ar(j, 1) = "01-01-" & ar(j, 1): ar(j, 3) = "!± "
        If Len(ar(j, 2)) = 4 Then ar(j, 2) = "01-01-" & ar(j, 2): ar(j, 3) = "!± "
        ar(j, 1) = CDate(Trim(ar(j, 1)))
        ar(j, 2) = CDate(Trim(ar(j, 2)))
        d = DateDiff("d", DateValue(ar(j, 2)), DateValue(ar(j, 1)))
        m = DateDiff("m", DateValue(ar(j, 2)), DateValue(ar(j, 1)))
        y = DateDiff("yyyy", DateValue(ar(j, 2)), DateValue(ar(j, 1)))
        Select Case m
          Case 0
            ar(j, 3) = ar(j, 3) & d & " dag" & IIf(d > 1, "en", "")
          Case Is < 13
            ar(j, 3) = ar(j, 3) & m & " maand" & IIf(m > 1, "en", "")
          Case Else
            ar(j, 3) = ar(j, 3) & y & " jaar en " & m Mod 12 & " maand" & IIf(m Mod 12 > 1, "en", "")
        End Select
      End If
    Next j
    .NumberFormat = "General"
    .Value = ar
  End With
End Sub
 

Bijlagen

  • leeftijd5.xlsb
    24,8 KB · Weergaven: 23
dank VenA, ga er vanavond naar kijken.
Op verzoek van HSV het bestand (code) die ik gebruik, weliswaar voor wat betreft de data in de brontabel (ExpPers) sterk uitgekleed. Hij is volgens mij door HSV en Wher geschreven.
Bekijk bijlage LT_TEST_1.xlsb
 
En daar kom je 30 post verder mee aan! succes ermee.
 
Dag VenA,
ik probeer eerst zelf iets te bereiken. Zoals ik zo vaak hier heb gedaan leg ik datgene waar ik op vast loop aan jullie voor en dat was eerst de functie Datediff. Ik meen me te herinneren dat één van jullie regels is "probeer het eerst zelf en geef dan aan waar je op vast loop"! . Als HSV niet had gevraagd om mijn bestand dan had ik dat hier vanmiddag niet geplaatst maar was ik weer met het probleem aan het worstelen geweest. Trouwens dat ben ik nu ook.Vind het jammer dat je zo reageert maar ergens kan ik het nog wel begrijpen. Sorry.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan