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

functie probleem

Status
Niet open voor verdere reacties.

thomassske

Gebruiker
Lid geworden
23 apr 2008
Berichten
97
Hallo,

Ik moet het volgend schrikkeljaar vinden

wat is er fout aan volgende functie?
bij bv 1897 zou hij 1904 als schrikkeljaar moeten geven maar dit gebeurt niet.

[JS]Function volgendschrikkeljaar(jaar As Double) As Integer
Dim i As Integer
Dim schrikkeljaar As Variant

For i = 1 To 4
volgendjaar = jaar + i

If volgendjaar Mod 4 = 0 Then
schrikkeljaar = jaar + i
If volgendjaar Mod 100 = 0 Then
If volgendjaar Mod 400 = 0 Then
schrikkeljaar = jaar + i
End If
End If
End If

Next i
volgendschrikkeljaar = schrikkeljaar
End Function[/JS]
 
Laatst bewerkt:
Is dit een excelvraag?

Maar ok. Jaar = 1897: gaat de eerste loop in. Bij i=4, oftewel bij het jaar 1901 stopt de loop en eindigt de berekening lijkt mij.
 
Precies. zet je loop: i = 1 To 8
en dan kom je wel op het juiste antwoord.


<edit>
Nee, te vroeg gejuichd.
Je komt dan in de war in 1898. Dan maakt de formule al 1908 van.
 
Laatst bewerkt:
komt omdat 1900 niet deelbaar is door 400 dus is de uitkomst 1900


Niels
 
Laatst bewerkt:
Je zou deze formule eens moeten proberen:

Code:
 Function volgendschrikkeljaar2(jaar As Double) As Integer
Dim i As Integer
Dim schrikkeljaar As Variant
 
For i = 1 To 4
    volgendjaar = jaar + i
    
    If volgendjaar Mod 4 = 0 Then
    schrikkeljaar = jaar + i
        If volgendjaar Mod 100 = 0 Then
            If [COLOR="#FF0000"]Not [/COLOR]volgendjaar Mod 400 = 0 Then
            schrikkeljaar = jaar + i [COLOR="#FF0000"]+ 4[/COLOR]
        End If
        End If
    End If
   
Next i
volgendschrikkeljaar2 = schrikkeljaar
End Function


Lambert
 
ik kwam tot dit:

Code:
Function volgendschrikkeljaar(jaar As Double) As Integer
Dim i As Integer
Dim schrikkeljaar As Variant
 
For i = 1 To 4
    volgendjaar = jaar + i
    
    If volgendjaar Mod 4 = 0 Then
    schrikkeljaar = jaar + i
        If volgendjaar Mod 100 = 0 Then
        schrikkeljaar = jaar + i + 4
            If volgendjaar Mod 400 = 0 Then
            schrikkeljaar = jaar + i
        End If
        End If
    End If
   
Next i
volgendschrikkeljaar = schrikkeljaar
End Function

Niels
 
Mijn variant:

Code:
Sub tst()
    Dim Jaar As Integer

    Jaar = 1897
    For Jaar = Jaar To Jaar + 8
        If IsSchrikkelJaar(Jaar) Then
            MsgBox Jaar
            Exit Sub
        End If
    Next Jaar
End Sub

Function IsSchrikkelJaar(ByRef intYear As Integer) As Boolean
    If intYear Mod 400 = 0 Then
        IsSchrikkelJaar = True
    ElseIf intYear Mod 4 = 0 And intYear Mod 100 <> 0 Then
        IsSchrikkelJaar = True
    End If
End Function
 
Laatst bewerkt:
deze telt de dagen in februari
Code:
Function Ldag(FebMaand)
schrikkeljaar = DateSerial(FebMaand, 2, 2)
  For i = 1 To 10
    Laatstedag = DateSerial(Year(schrikkeljaar), Month(schrikkeljaar) + 1, 0)
     If Day(Laatstedag) > 28 Then Exit For
      schrikkeljaar = DateSerial(Year(Laatstedag) + 1, Month(Laatstedag), Day(Laatstedag))
  Next
 Ldag = Year(schrikkeljaar)
End Function
 
Laatst bewerkt:
Status update: lam201 het wordt toch jou tip!
De andere zat een levertijd van (max) 42 dagen op en zoveel tijd heb ik niet.
Nogmaals bedankt voor de tip.

Grtz
 
@Boomen

Het is niet echt netjes en tegen de Forumregels om iemand anders zijn vraag te kapen voor je eigen vragen.
Je heb al een topic gestart over dit onderwerp ga dan ook daar in verder.

Niels
 
Het idee achter funkties is om alle berekeningen daarin te laten plaatsvinden.

Code:
Sub M_snb()
    msgbox F_snb(1897)
    MsgBox F_snb(1997)
End Sub

Function F_snb(y)
    F_snb = (y \ 4 + 1) * 4 + IIf((y \ 4 + 1) * 4 Mod 100 = 0 And (y \ 4 + 1) * 4 Mod 400 <> 0, 4, 0)
End Function

Je kunt de funktie ook schrijven als:
Code:
Function F_snb(y)
    y1 = 4 * (y \ 4 + 1)
    F_snb = y1 + 4 * Abs(y1 Mod 100 = 0 And y1 Mod 400 <> 0)
End Function
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan