Avatar billede oyejo Nybegynder
28. januar 2005 - 10:36 Der er 5 kommentarer og
1 løsning

VBA - Generere tallene for den første og siste dag i en måned

Hej

Finnes det en enkel metode for å finne tallet som representerer den første og den siste dag i en bestemt måned?

som eksempel:  April 2005
1. April = 38443
i april er det 30 dager, den 30. april = 38472
Avatar billede sjap Praktikant
28. januar 2005 - 11:58 #1
Måned = "April 2005"
StartDag = DateValue("1 " & Måned)
SlutDag = DateAdd("m", 1, StartDag) - 1
Avatar billede kjulius Novice
29. januar 2005 - 01:38 #2
Her en lille funktion, som kan hjælpe dig med at beregne start- og slutdato:

Function Månedsafgrænsning(datoind As Variant, Månedsstart As Date, Månedsslut As Date, Optional Fejl As Variant) As Long
    On Error GoTo MdError
    Dim tmpDatoInd As Date
    If IsDate(datoind) Then
        tmpDatoInd = datoind
    Else
        If VarType(datoind) = vbString Then
            'Hvis input er en streng, så fjern alle forekomster af .
            ' og forsøg konvertering til en dato...
            tmpDatoInd = CDate(Replace(datoind, ".", " "))
        Else
            'Forsøg bare en konvertering til dato
            tmpDatoInd = CDate(datoind)
        End If
    End If
    ' Beregn startdato...
    If Day(tmpDatoInd) = 1 Then
        Månedsstart = tmpDatoInd
    Else
        Månedsstart = DateAdd("d", -(Day(tmpDatoInd) - 1), tmpDatoInd)
    End If
    ' Beregn slutdato...
    Månedsslut = DateAdd("m", 1, tmpDatoInd)
    Månedsslut = DateAdd("d", -Day(Månedsslut), Månedsslut)
    Exit Function
   
MdError:
    Månedsafgrænsning = Err
    If Not IsMissing(Fejl) Then
        Fejl = Error$
    Else
        MsgBox Error$, vbExclamation, "Fejl i datobehandling"
    End If
End Function

Hvis du ønsker at test den har du her en lille subrutine jeg har brugt under testen:

Sub testmda(datoind As Variant)
Dim x As Long, mdstart As Date, mdslut As Date, f As String
x = Månedsafgrænsning(datoind, mdstart, mdslut, f)
If x = 0 Then
    Debug.Print "Måneden starter d. "; mdstart; "og slutter d. "; mdslut
Else
    Debug.Print "Den angivne indgangsparameter var ikke en dato" & vbCrLf & _
                "og resulterede i fejlmeldingen: " & f
End If
End Sub

Du kan nu test funktionen ved at overgive forskellige datoværdier, f.eks.

testmda "dec 98"
Måneden starter d. 01-12-1998 og slutter d. 31-12-1998

testmda "April 2005"
Måneden starter d. 01-04-2005 og slutter d. 30-04-2005

testmda "10.2.98"
Måneden starter d. 01-02-1998 og slutter d. 28-02-1998

testmda "10. aprl 2004"
Den angivne indgangsparameter var ikke en dato
og resulterede i fejlmeldingen: Type mismatch

Håber det er til hjælp... :-)
Avatar billede sjap Praktikant
29. januar 2005 - 10:10 #3
kjulius > Flot arbejde! Men overså du ikke lige et lille ord i spørgmålet? (det fjerde ord i linien, der starter med "Finnes") ;0)
Avatar billede jkrons Professor
29. januar 2005 - 14:27 #4
Du kan lave det med to formler, idet jeg antager at måneden står i A1, indtastet som fx April 2005.

Startdato kan da beregnes ved: =DATO(ÅR(A1);MÅNED(A1);1)
Slutdato kan beregnes ved: =DATO(ÅR(A1);MÅNED(A1)+1;1)-1

Husk at formatere cellerne som tal.
Avatar billede kjulius Novice
29. januar 2005 - 15:42 #5
--> sjap: Tak, og jo.. sådan kan det naturligvis tolkes. Og måske skulle jeg også bare have lagt det som en kommentar, for rutinen er jo egentlig bare en variation over dit svar. Men man håber jo altid på, at der kunne falde et par point af i svinget :-) Such is the nature of man!

--> jkrons: Du har helt ret, det kan naturligvis også gøres vha. Excels normale funktioner, men spørgeren spurgte specifikt efter en VBA løsning.
Avatar billede oyejo Nybegynder
01. februar 2005 - 09:11 #6
Jeg kunne benytte svaret fra sjap og han var først ute, så han fortjener 30p.
men... det gjør sannelig kjulius også, for en fantastisk jobb.
takker så mye,

kjulius.. du finner dine point her:
http://www.eksperten.dk/spm/586733

glemte å si at svaret skal brukes til å sette minimum.-  og maksimum.- verdier på skalen i et chart.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester