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

VBA functie

Status
Niet open voor verdere reacties.

Greenwagon

Nieuwe gebruiker
Lid geworden
5 jan 2008
Berichten
4
Ik wil een functie maken die een nieuwe datum geeft door een aantal dagen bij een bestaande datum op te tellen. Indien de uitkomst een zaterdag of zondag is moet de nieuwe datum de vrijdag daarvoor zijn. De volgende functie werkt echter niet. Kan iemand mij vertellen wat ik fout doe?

Code:
Function NieuweDatum(ByVal Datum As Date, ByVal AantalDagen As Integer) As Date

Dim d As Date
Dim Nummer As Integer

Nummer = Weekday(Datum, vbSunday)

If Nummer = 1 Then
    Datum = DateAdd("d", AantalDagen - 2, Datum)
ElseIf Nummer = 7 Then
    Datum = DateAdd("d", AantalDagen - 1, Datum)
Else
    Datum = DateAdd("d", AantalDagen, Datum)
End If

d = Datum

NieuweDatum = d

End Function
 
Laatst bewerkt door een moderator:
Misschien zo:

Code:
Function NieuweDatum(ByVal Datum As Date, ByVal AantalDagen As Integer) As Date
    Dim d As Date
    Dim Nummer As Integer

    Nummer = Weekday(Datum + AantalDagen, vbMonday)
    If Nummer = 7 Then
        Datum = DateAdd("d", AantalDagen - 2, Datum)
    ElseIf Nummer = 6 Then
        Datum = DateAdd("d", AantalDagen - 1, Datum)
    Else
        Datum = DateAdd("d", AantalDagen, Datum)
    End If
    NieuweDatum = Datum
End Function

Zie je trouwens hoe overzichtelijk de code eruit ziet als hij tussen tags geplaatst wordt?
 
Laatst bewerkt:
Hier mijn oplossing: :)

Code:
Function NieuweDatum(ByVal Datum As Date, ByVal AantalDagen As Integer) As Date
Dim d As Date
Dim Nummer As Integer
 Nummer = Weekday(Datum, vbMonday)
  If Nummer + AantalDagen = 6 Then Datum = Datum + AantalDagen - 1
   If Nummer + AantalDagen = 7 Then Datum = Datum + AantalDagen - 2
NieuweDatum = Datum
End Function
 
En hier die van mij :)
Code:
Function NieuweDatum(ByVal Datum As Date, ByVal AantalDagen As Integer) As Date
    Select Case Weekday(Datum + AantalDagen, vbSunday)
        Case 1: AantalDagen = AantalDagen - 2
        Case 7: AantalDagen = AantalDagen - 1
    End Select
    NieuweDatum = Datum + AantalDagen
End Function
 
Omdat er niets te doen is.
Code:
Function NieuweDatum(ByVal Datum As Date, ByVal AantalDagen As Integer) As Date
 Dim Nummer As Integer
     Nummer = Weekday(Datum + AantalDagen, vbMonday)
   NieuweDatum = IIf(Nummer = 7, Datum + AantalDagen - 2, IIf(Nummer = 6, Datum + AantalDagen - 1, Datum + AantalDagen))
End Function
 
Weinig te doen inderdaad, dus nog maar eentje ;)
Code:
Function NieuweDatum(ByVal Datum As Date, ByVal AantalDagen As Integer) As Date
    NieuweDatum = Datum + (AantalDagen - Choose(Weekday(Datum + AantalDagen, vbSunday), 2, 0, 0, 0, 0, 0, 1))
End Function
 
Waarom eigenlijk geen gewone functie? Sneller en betrouwbaarder(even Edmoor's idee gebruikt :-) ):

=CHOOSE(WEEKDAY(A1+B1);-2;0;0;0;0;0;-1)+A1+B1

@HSV: IIF is inefficient omdat alle argumenten van de functie altijd worden berekend, dus ook het "else" geval, ook als de test waar oplevert.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan