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

Excel VBA worksheetfunction Averageifs on array

Status
Niet open voor verdere reacties.

dietrichDSC

Gebruiker
Lid geworden
3 apr 2015
Berichten
14
Hallo,

Om eenvoudig gemiddelde te maken uit temperatuur loggingen zou ik volgende code willen gebruiken.
logging excel.JPG

Kan iemand mij helpen hoe ik een range uit een 2d array haal?

Code:
Dim i, ii, j, jj As Integer
Dim datum As String

datum = Format(datum, "dd/mm/yy hh:00")

Set werkblad = ActiveSheet

ReDim a_invoeg(1, 1)


a_invoeg() = Range("a1:c11")



For j = LBound(a_invoeg, 1) To UBound(a_invoeg, 1)
    a_invoeg(j, 1) = Format(a_invoeg(j, 1), "dd/mm/yy hh:00")
    
Next


For j = LBound(a_invoeg, 1) To UBound(a_invoeg, 1)
    
    datum = a_invoeg(j, 1)
        
  [B]  a_invoeg(j, 3) = WorksheetFunction.AverageIfs(a_invoeg(1, 2), a_invoeg(1, 1), a_invoeg(j, 1))
 [/B]
Next


ActiveSheet.Range("f1").Resize((UBound(a_invoeg) - LBound(a_invoeg)) + 1, 2).Value = a_invoeg

End Sub
 
Laat graag aan de hand van een excelbestand zien welk resultaat je zoekt.
 
  • Averageifs wil een bereik, geen matrix
  • Daarnaast lijkt het alsof je steeds een gemiddelde per rij wilt
  • Jouw output in kolom D en E kan ik niet volgen....
 
Kolom D en E zijn de resultaten die ik wil hebben.
Hoe krijg ik dan uit een array matrix een bereik?
 
Leg die resultaten uit kolom D en E eens uit, waarom een 3 in E1? etc.
 
In kolom E (1 tot 4) is het gemiddelde van alle resultaten tussen 12/10/2016 15:00 en 12/10/2016 16:00.
E 5-9 is het gemiddelde van alle temperaturen tussen 12/10/2016 16:00 en 12/10/2016 17:00

Het is dus de bedoeling om aan de hand van log gegevens gemiddelden per uur te maken om die achteraf in grafieken weer te geven.

Ik zou dat graag willen automatiseren omdat ik zo tientallen files per week moet analyseren. en er kruipt veel tijd in de voorbereiding om iedere keer die gemiddelden te berekenen.

alvast bedankt.
 
De dubbele waarden uit kolom C verwijderen zal weinig gegevens overlaten. Waarom geen draaitabel? (het meest snelle en eenvoudige onderdeel voor data-analyse)
 

Bijlagen

  • arrays tijden afronden.xlsb
    27,7 KB · Weergaven: 27
Laatst bewerkt:
Bedankt, maar ik heb echt datum en tijd in een cel nodig voor de volgende bewerkingen.
 
Toch een draaitabel zou ik zeggen...
 

Bijlagen

  • arrays tijden afronden JKP.xlsx
    22,7 KB · Weergaven: 29
Je kan beter het uitleggen waarom je iets wilt ipv een oneliner met de tekst
maar ik heb echt datum en tijd in een cel nodig voor de volgende bewerkingen

Van array's heb je blijkbaar geen kaas gegeten. Hetzelfde heb ik met dictionary's;) Toch een poging

Code:
Sub VenA()
Dim j As Long, c00 As String, ar
  ar = Blad1.Cells(1).CurrentRegion
  With CreateObject("scripting.Dictionary")
    For j = 1 To UBound(ar)
      c00 = Int(ar(j, 1)) & "|" & Hour(ar(j, 1))
      If .Exists(c00) Then
        .Item(c00) = c00 & "|" & Split(.Item(c00), "|")(2) + ar(j, 2) & "|" & Split(.Item(c00), "|")(3) + 1
       Else
        .Item(c00) = c00 & "|" & ar(j, 2) & "|1"
      End If
    Next j
    For j = 1 To UBound(ar)
      c00 = Int(ar(j, 1)) & "|" & Hour(ar(j, 1))
      If Split(.Item(c00), "|")(0) = CDate(Int(ar(j, 1))) And Val(Split(.Item(c00), "|")(1)) = Hour(ar(j, 1)) Then ar(j, 2) = Split(.Item(c00), "|")(2) / Split(.Item(c00), "|")(3)
    Next j
  End With
  Blad1.Cells(1, 10).Resize(UBound(ar), 2) = ar
End Sub
 
Laatst bewerkt:
Mooie code @VenA,

Je hoeft in principe niet meer te controleren op date en hour.
Code:
    For j = 2 To UBound(ar)
       c00 = Int(ar(j, 1)) & "|" & Hour(ar(j, 1))
       ar(j, 2) = Split(.Item(c00), "|")(2) / Split(.Item(c00), "|")(3)
    Next j

Je controle is immers al '.item(c00)'.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan