Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[Excel VBA] temperatuurjaargemiddelde per dag bepalen *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo allemaal,

Ik heb een Excel bestand, met daarin twee worksheets. Een database-sheet en een verwerkingssheet. In de database-sheet staan voor verschillende weerstations alle gemiddelde etmaaltemperaturen vanaf 1-1-2000 tot aan 31-10-2009. Zie het plaatje hieronder.
Afbeeldingslocatie: http://foto-uploaden.nl/img/0/scw07wy.jpg

De database-sheet wil ik niet aanpassen verder aangezien ik deze gegevens van het KMA download en importeer.
In de verwerkingssheet wil ik nu voor elke dag het gemiddelde bepalen dus bijvoorbeeld voor 1 januari het gemiddelde van die dag van de jaren 2000 t/m 2009.

Er zijn twee problemen:
1. Hoe doe ik dat op een dynamische manier (aangezien ik continu data toevoeg aan de database-sheet), en..
2. Hoe houd ik rekening met de "schrikkeldag" (de code moet dan zo worden gemaakt dat hij rekening houdt met kolom "maand" en "dag" in de database-sheet --> indien 2 en 29, dan schrikkeldag).

Wie o wie kan mij helpen?

  • Joop_Klepzeiker
  • Registratie: April 2006
  • Laatst online: 26-11 18:15
Verwijderd schreef op donderdag 19 november 2009 @ 13:11:
Hallo allemaal,

Ik heb een Excel bestand, met daarin twee worksheets. Een database-sheet en een verwerkingssheet. In de database-sheet staan voor verschillende weerstations alle gemiddelde etmaaltemperaturen vanaf 1-1-2000 tot aan 31-10-2009. Zie het plaatje hieronder.
[afbeelding]

De database-sheet wil ik niet aanpassen verder aangezien ik deze gegevens van het KMA download en importeer.
In de verwerkingssheet wil ik nu voor elke dag het gemiddelde bepalen dus bijvoorbeeld voor 1 januari het gemiddelde van die dag van de jaren 2000 t/m 2009.

Er zijn twee problemen:
1. Hoe doe ik dat op een dynamische manier (aangezien ik continu data toevoeg aan de database-sheet), en..
2. Hoe houd ik rekening met de "schrikkeldag" (de code moet dan zo worden gemaakt dat hij rekening houdt met kolom "maand" en "dag" in de database-sheet --> indien 2 en 29, dan schrikkeldag).

Wie o wie kan mij helpen?
Dit is eenvoudig te doen met de functies SOM.ALS en AANTAL.ALS, waarin je het criterium middels een AND functie specificeert. Je pakt daarmee ook meteen het schrikkeldag probleem op.

Arriving Somewhere but not here....


Verwijderd

Topicstarter
Hartstikke bedankt! Dit is zeker wat ik wil. Er is ook een AVERAGEIFS functie die ook meteen werkt. Helaas gaf Excel aan dat tijdens het converteren (onder Excel 2007 ogeslagen als .xls (2003) bestand) sommige formules niet werken / herkend worden.
Dit zal ik thuis nog ff uitpluizen, iig bedankt voor het snelle antwoord.

[ Voor 3% gewijzigd door Verwijderd op 19-11-2009 15:55 ]


Verwijderd

Topicstarter
Nou, ik ben er uit! Voor de geintresseerden, onderstaand de vbacode
------------------------------
Dim lastrow As Long
Dim kolomnummer As Integer

Public Sub Worksheet_Activate()

Application.ScreenUpdating = False
' Vind het nummer van de laatste rij dat data bevat
lastrow = Sheets("Database_Weer").Range("E65536").End(xlUp).Row

kolomnummer = 3
Cells(3, kolomnummer).Select

' Loop om gemiddelden te bepalen van de verschillende weerstations
Do While ActiveCell.Offset(-1, 0).Value <> ""
ActiveCell.FormulaR1C1 = _
"=AVERAGEIFS(Database_Weer!R5C" & (kolomnummer + 2) & ":R" & (lastrow) & "C" & (kolomnummer + 2) & ",Database_Weer!R5C3:R" & (lastrow) & "C3,RC1,Database_Weer!R5C4:R" & (lastrow) & "C4,RC2)"
Cells(3, kolomnummer).Select
Selection.AutoFill Destination:=Range(Cells(3, kolomnummer), Cells(368, kolomnummer)), Type:=xlFillDefault
Range(Cells(3, kolomnummer), Cells(368, kolomnummer)).Select
kolomnummer = kolomnummer + 1
Cells(3, kolomnummer).Select
Loop

Range("A1").Select
Application.ScreenUpdating = True

End Sub

  • Joop_Klepzeiker
  • Registratie: April 2006
  • Laatst online: 26-11 18:15
Toch nog een kleine opmerking, waarom doe je dit in VBA, je kunt toch toch als bereik de hele kolom opgeven in de AVERAGEIFS formule ipv eerst de laatste rij op te zoeken. Hierdoor hoef je niet telkens door die lus te lopen en dat scheelt tijd.

Arriving Somewhere but not here....


Verwijderd

Topicstarter
Je hebt weer gelijk. Ik was bang dat als je de hele kolom neemt, inclusief de lege cellen, dat excel deze dan meeneemt als 0-waarden en zo dus een veel te laag gemiddelde zou geven :? ! Bedankt voor alle hulp!

Topic closed wat mij betreft
Pagina: 1