Avatar billede Nielsen15 Nybegynder
06. april 2010 - 13:28 Der er 8 kommentarer og
1 løsning

dags- og månedsgennemsnit

Hej.
Håber der er nogen der har tid og lyst til den her (efter flere forsøg har jeg selv måttet give op...)
Jeg har et excel ark med flere daglige målinger af temperatur der løber over 5 år. Jeg har brug for et dagligt gennemsnit og et månedligt gennemsnit.
Data er opbygget således:

Dato (dd-mm-yyyy) i kolonne A
Tid i kolonne B
Målinger i kolonne C

Jeg har brug for at få daglige gennemsnitsværdier i kolonne E, ud for den sidste daglige måling (lige før datoskift).
Desuden skal jeg have månedsgennemsnit i kolonne F, ud for den sidste dag i måneden (lige før månedsskift)

Har selv tænkt i baner af at undersøge skift i Day for kolonne A, derefter aktivere cellen før skiftet, offsette den de nødvendige pladser mod højre, og derefter foretage beregningen.
Håber nogen har mod på at kigge på problemet!!
Avatar billede supertekst Ekspert
06. april 2010 - 13:54 #1
Med hjælp af lidt VBA (Visual Basic for Application) så skulle det nok kunne lykkes -du er velkommen til at sende et lille uddrag af filen. @-adresse under min profil.
Avatar billede supertekst Ekspert
06. april 2010 - 17:43 #2
Er modtaget - afprøver VBA-koden - får mail retur, når jeg sender til dig
Avatar billede supertekst Ekspert
06. april 2010 - 18:01 #3
Følgende kode er indsat under Sheet1:

Dim dD As Date, dM As Byte, dY As Integer
Dim gSnitDag As Variant, gsnitMd As Variant
Dim antalMålDag As Long, antalMålMd As Long
Dim målDage As Variant, målMåned As Variant

Dim iDag As Date, iMåned As Byte, iÅr As Integer
Dim sidsteRække As Long, ræk As Long
Dim fejlMelding As String
Public Sub beregnGennemsnit()
    dD = 0
    dM = 0
    dY = 0
   
On Error GoTo fejl
   
    antalMålDag = 0
    antalMålMd = 0
    gSnitDag = 0
    gsnitMd = 0
    målDage = 0
    målMåned = 0
 
    sidsteRække = ActiveCell.SpecialCells(xlLastCell).Row
   
    For ræk = 2 To sidsteRække
        iDag = Range("A" & CStr(ræk))
        iMåned = Month(iDag)
        iÅr = Year(iDag)
       
        If dD = 0 And dM = 0 And dY = 0 Then
            dD = iDag
            dM = iMåned
            dY = iÅr
        End If
       
        If dD <> iDag Then
            dagsBrud
            dD = iDag
        End If
           
           
        If dY <> iÅr Or dM <> iMåned Then
            månedsBrud
            dM = iMåned
            dY = iÅr
        End If
           
        opTælling
    Next ræk
   
    dagsBrud
    månedsBrud
   
    If fejlMelding <> "" Then
        fejlMelding = "Følgende række indeholder ikke numerisk måletal " + fejlMelding
        MsgBox (fejlMelding)
    End If
   
    Exit Sub
   
fejl:
    Stop
    Resume Next
End Sub
Private Sub opTælling()
    If IsNumeric(Cells(ræk, 3)) = True Then
        målDage = målDage + Cells(ræk, 3)
        antalMålDag = antalMålDag + 1
        målMåned = målMåned + Cells(ræk, 3)
        antalMålMd = antalMålMd + 1
    Else
        fejlMelding = fejlMelding + CStr(ræk) & ", "
    End If
End Sub
Private Sub dagsBrud()
    Cells(ræk - 1, 5) = målDage / antalMålDag
    målDage = 0
    antalMålDag = 0
End Sub
Private Sub månedsBrud()
    Cells(ræk - 1, 6) = målMåned / antalMålMd
    målMåned = 0
    antalMålMd = 0
End Sub
Avatar billede Nielsen15 Nybegynder
07. april 2010 - 14:57 #4
Hej supertekst.
Fantastisk - det virker. Jeg måtte lige ændre målMåned fra Variant til Long for ikke at få "overflow"-fejl. Derefter kører det bare.
Hvis du giver mig mulighed for at godkende dit svar kan jeg sende nogle point afsted! Mange tak for hjælpen!
Avatar billede supertekst Ekspert
07. april 2010 - 15:03 #5
Du får et svar - godt det lykkedes & selv tak...
Avatar billede Nielsen15 Nybegynder
08. april 2010 - 16:35 #6
Jeg har brugt VBA-koden i et andet excel-ark med temperaturer. I det får jeg nogle meget høje middelværdier (fx. 205 grader). Noget i beregningen går galt. Kan det være fordi jeg har negative værdier (minusgrader) eller fordi der er felter uden værdier (hvor dataloggeren har været nede)? Arbejder videre med din kode og ser om jeg ikke kan finde løsningen, men det kunne være du havde et tip?
Avatar billede Nielsen15 Nybegynder
08. april 2010 - 16:39 #7
Ah, det er IsNumeric der tjekker om der er en valid værdi i cellen. Gad vide hvad det så er?
En anden ting: hvis jeg vil ændre koden til at summere i stedet for at finde middelværdi, er det da opTælling() jeg skal ændre i?
Hmm... sjovt men svært
Avatar billede Nielsen15 Nybegynder
08. april 2010 - 16:58 #8
De høje middelværdier (#6) var pga en amerikansk punktum-adskillelse fremfor komma.
Avatar billede supertekst Ekspert
08. april 2010 - 17:06 #9
Ok - der var en forklaring.

#7
Private Sub dagsBrud()
  Cells(ræk - 1, 5) = målDage  '/ antalMålDag NU ER DET KUN SUM
  målDage = 0                  ' -----> kommentar
  antalMålDag = 0
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

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