Registriert seit: 25.02.2018
Version(en): 2016
Hallo zusammen,
ich habe in eine Spalte (B) unendlich viele Messwerte über mehrere Arbeitsblätter stehen.
In Spalte (A) läuft eine Zeitachse mit.
Jetzt möchte ich immer, wenn 0.5 Sekunden vorbei sind die Werte Zusammenfassen
und daraus den Mittelwert bilden.
Wie setzte ich so etwas am besten um?
VG
Registriert seit: 02.08.2014
Version(en): 2016
Hallo,
da ich mit VBA besser kann, als mit Formeln, würde ich das ungefähr so lösen:
Code:
Sub machMittelwerte()
Dim data As Variant, lZeile As Long, lWS As Long
Dim lHalfSec As Long
Dim dSum As Double, lAnz As Long
Dim dMW(1 To 1000000, 1 To 2) As Double, lMW As Long
' es gibt keine Überschriften!
lHalfSec = Fix(ThisWorkbook.Worksheets(1).Cells(1, 1).Value / 0.5) ' Schleife initialisieren
For lWS = 1 To ThisWorkbook.Worksheets.Count ' Schleife über alle Tabellenblätter
data = ThisWorkbook.Worksheets(lWS).UsedRange.Value ' Werte aus Tabellenblatt
For lZeile = 1 To UBound(data) ' Schleife über alle Werte
If lHalfSec = Fix(data(lZeile, 1) / 0.5) Then
lAnz = lAnz + 1
dSum = dSum + data(lZeile, 2)
Else
lMW = lMW + 1 ' Anzahl der Mittelwerte
dMW(lMW, 1) = data(lZeile, 1) 'lhalfsec*0.5 'lmw*0.5 ' Zeit
dMW(lMW, 2) = dSum / lAnz ' Mittelwert
dSum = 0 ' für nächsten Schleifendurchlauf
lAnz = 0
lHalfSec = Fix(data(lZeile, 1) / 0.5)
End If
Next
Next
'Ergebnis in neues Tabellenblatt
With ThisWorkbook
.Worksheets.Add(after:=.Worksheets(.Worksheets.Count)).Cells(1, 1).Resize(lMW, 2).Value = dMW
End With
End Sub
Ein solches Downsampling würde ich eigentlich eher vor dem Einlesen der Daten nach Excel vornehmen (falls das bei dir überhaupt gemacht wird). Wenn es darum geht, Mittelwerte für immer die selbe Anzahl an Zeilen zu berechnen, würde ich den Code dementsprechend ändern.
Grüße, Ulrich
Folgende(r) 1 Nutzer sagt Danke an losgehts für diesen Beitrag:1 Nutzer sagt Danke an losgehts für diesen Beitrag 28
• Arious87
Registriert seit: 25.02.2018
Version(en): 2016
Das war genau das was ich gesucht habe.
Danke es hat funktioniert.
Registriert seit: 21.12.2017
Version(en): MS 365 Family (6 User x 5 Geräte für jeden) Insider-Beta
C1: =MITTELWERT(INDEX(B:B;VERGLEICH((ZEILE()-1)/86400/2;A:A)+1):INDEX(B:B;VERGLEICH((ZEILE()-0)/86400/2;A:A)+0))
D1: =MITTELWERT(INDEX(B:B;(ZEILE()-1)*10+1):INDEX(B:B;(ZEILE()-1)*10+10))
c1) für variabel lange Intervalle in 0,5-Sek.-Schritten und
d1) für eine feste Anzahl von jeweils 10 Beobachtungen (bei Messwertabständen von 1/20 Sekunden)
Werte ab Zeile 1 ohne Überschrift