Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
952to956
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
952to956
952to956
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Mittelwert mit Variablen

Mittelwert mit Variablen
19.02.2008 09:32:06
Alexander
MOIN MOIN ich würde mich freuen wenn ihr mir helfen könntet.
Also ich habe eine Tabelle in derdie Zeiten in der ersten Spalte stehen und die zugehörigen Messwerte in der nächsten
Ziel ist es eine Tabelle zu erzeugen, in der Halbstundenmittelwerte stehen.
Jetzt möchte ich ein Makro schreiben, dass aus den Messwerten einer halben Stunde einen Mittelwert bildet. Und das ganze soll sich wiederholen. Also Mittelwert von 10:00 bis 10:30 dann Mittelwert von 10:30 bis 11:00 usw.. Ich habe nun das Problem, dass ich zwar die Zeit suchen kann, aber nicht weiß wie man dann den Wert aus der Nachbarzelle der gefundenen Zelle markieren kann und damit dann den Mittelwert bildet. Außerdem ist mir nicht klar wie ich das ganze wiederholen kann, so dass die gesamte Tabelle mit Messwerten bearbeitet wird.
Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt.
Als Makroanfänger Gruß Alex

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mittelwert mit Variablen
19.02.2008 09:58:00
Adi
Hallo Alex,

dass ich zwar die Zeit suchen kann


Wenn Du die Zelle mit der Zeit gefunden hast, kommst Du mit .Offset(0,1).Value weiter.
[Ansonsten poste mal Dein Code, wie Du Ihn jetzt hast.]
Gruß
Adi

AW: Mittelwert mit Variablen
19.02.2008 11:13:38
Alexander
Danke für die schnelle Hilfe.
Naja so Siehts bis jetzt aus... Wie du unschwer erkennen kannst bin ich noch ziemlich im Anfang von der ganzen Geschichte. Momentan ärgere ich mich damit rum eine Variable mit einer festen(&D$4)Zelle zu addieren....
Nachfolgend der entstandene Code mit den Ideen von mir wie ich mir das vorstelle.
Vielleicht gibt es ja noch einfachere Lösungen?!?
Danke für die Hilfe!
Gruß Alex
--------------------------------------------------------------

Sub Makro2()
Dim adrStart As String
Dim adrEnd As String
Dim Var1 As String
Dim Var2 As String
Dim Var3 As Date
Dim Var4 As Date
Dim Var5 As Date
Dim Bereich As Range
'Finden von Anfangs Uhrzeit
Var3 = Worksheets("Tabelle1").Range("B4").Value  'eingegebene Anfangsuhrzeit muss noch +i ( _
aus einem Loop) gerechnet werden damit eine neue Zeile mit neuem Ergebniss entsteht.
Sheets("SA2").Select
Cells.Find(What:=Var3, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Var4 = ActiveCell.Value
' Einsammeln des Ersten Wertes
ActiveCell.Offset(0, 1).Activate
Var1 = ActiveCell.Value
'Errechnen der Enduhrzeit
Sheets("Tabelle1").Select
Cells.Find(What:=Var3, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Var5 = ActiveCell.Value
ActiveCell.Offset(0, 1).Value = "=Var5+D4"
'Finden von End Uhrzeit
'Bereich zwischen den 2 Variablen Makieren und Mittelwert bilden
'Das ganze wiederholen(Loop)bis keine Daten mehr, Variable i+1 definieren..
End Sub


------------------------------------------------------------------------------------

Anzeige
AW: Mittelwert mit Variablen
19.02.2008 11:32:00
Renee
Hi Alexander,
Mal eine Frage, willst du da unbedingt mit VBA lösen ?
Dafür könnte frau/mann doch auch eine Formel entwickeln, wenn die genaue Struktur der Daten bekannt ist.
GreetZ Renée

AW: Mittelwert mit Variablen
19.02.2008 11:45:24
Alexander
Hey Renée,
Ich mache mir die Mühe mit VBA zum einen um es zu verstehen, damit ich es öfter nutzen kann und zum anderen ist es so, das ich ständig unterschiedlichste Datensätze (verschiedene Strukturen) bekomme die ich dann nur noch in diese Tabelle kopieren brauche, und direkt meine Ergebnisse habe.
Oder Das Makro einfach auf die Datensätze anwenden kann...
Aber Danke für den Vorschlag das ganze mit Formeln zu machen (wenn ich richtig verstehe wie du das meinst)
Gruß Alex

Anzeige
AW: Mittelwert mit Variablen
19.02.2008 11:55:00
Renee
Hi Alexander,
Meinst Du mit verschiedenen Strukturen den Aufbau des Datensatzes (dann hilft dir auch ein VBA Code nicht) oder den Inhalt und die Anzahl Datensätze, dann kann's mit einer (dynamischen) Formel easy gelöst werden.
GreetZ Renée

AW: Mittelwert mit Variablen
19.02.2008 11:35:00
Adi
Hallo Alex,
füge nach

Var4 = ActiveCell.Value


noch


Wert = ActiveCell.Offset(0,1).Value   'wenn der Wert eine Spalte rechts neben dem (jetzt markierten) Zeittreffer liegt


an.
Statt


Var3 = Worksheets("Tabelle1").Range("B4").Value  'eingegebene Anfangsuhrzeit muss noch +i ( _
aus einem Loop) gerechnet werden damit eine neue Zeile mit neuem Ergebniss entsteht.
Sheets("SA2").Select
Cells.Find(What:=Var3, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Var4 = ActiveCell.Value


sollte auch


Var3 = Worksheets("Tabelle1").Range("B4").Value  'eingegebene Anfangsuhrzeit muss noch +i ( _
aus einem Loop) gerechnet werden damit eine neue Zeile mit neuem Ergebniss entsteht.
Sheets("SA2").Select
Set Treffer=Cells.Find(What:=Var3, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False)     'ohne .Activate!
Var4=Treffer.Value     'brauchst Du eventuell gar nicht mehr
Wert=Treffer.Offset(0,1).Value

.
funktionieren. Will sagen, Du musst Var4 nicht unbedingt "select"-en (markieren/ anspringen) um den Wert zu verarbeiten. Das geht außerdem ungleich schneller.
Gruß
Adi

Anzeige
AW: Mittelwert mit Variablen
19.02.2008 12:18:13
Alexander
Hey Adi,
du bist eine große Hilfe!!!
Ich habe das jetzt mal so abgeändert wie du das vorgeschlagen hast und es funktioniert. (Freu)
Könntest du mir eventuell noch Tips für ein Paar offene Fragen geben?!!
1.
Ich Möchte ja als nächstes (wenn ich es denn schaffen sollte den "WERT2" zu makieren) Über diese beiden Werte den Mittelwert bilden ich hatte mir das so vorgestellt :
eine Zelle Wählen,
ActiveCell.FormulaR1C1 = "=AVERAGE(WERT1:WERT2)"
Ich habe aber schon ausprobiert mit Variablen einen Mittelwert zu Bilden nur Leider klappt das nicht.
2.
Es wäre schön wenn sich die "ganze Sache" dann auch noch wiederholt und dann und ein Zähler die Wiederholungen mitzählt, sodass bei jedem Halbstundenmittelwert Ergebniss auch eine Neue Zeile angesteuert werden kann..
Ich hoffe ich habe mich halbwegs verständlich ausgedrück und man kann die Problematik erkennen.
Danke für die Hilfe im Vorraus
GRUß Alex

Sub Makro2()
Dim adrStart As String
Dim adrEnd As String
Dim Var1 As String
Dim Var2 As String
Dim Var3 As Date
Dim Var5 As Date
Dim Var6 As String
Dim Bereich As Range
'Finden von Anfangs Uhrzeit
Var3 = Worksheets("Tabelle1").Range("B4").Value 'eingegebene Anfangsuhrzeit muss noch +i  _
gemacht werden!!!
Sheets("SA2").Select
Set Treffer = Cells.Find(What:=Var3, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False)
' Einsammeln des Ersten Wertes
Wert1 = Treffer.Offset(0, 1).Value
'Errechnen der Enduhrzeit
Sheets("Tabelle1").Select
Cells.Find(What:=Var3, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Var5 = ActiveCell.Value
Var6 = Worksheets("Tabelle1").Range("D4").Value
ActiveCell.Offset(0, 1).Value = Var6
'Finden von End Uhrzeit
'Bereich zwischen den 2 Variablen Makieren und Mittelwert bilden
'Das ganze wiederholen(Loop)bis keine Daten mehr, Variable i+1 definieren..
End Sub


Anzeige
AW: Mittelwert mit Variablen
19.02.2008 13:45:00
Adi
Hallo Alex,
prinzipiell hat Renee nicht ganz Unrecht. Aber Deinen Standpunkt kann ich ebenfalls nachvollziehen.
Auch ich habe mal so angefangen und kann noch viel lernen.
zu (1)
'wenn in der Spalte C der Mittelwert aus Wert in Spalte B(dieser Zeile) und Wert in Spalte B(vorher. Zeile) stehen soll UND Du das Ergebnis als Formel (weiterhin veränderlich von den Eingabedaten) brauchst:

ActiveCell.FormulaR1C1 = "=AVERAGE(R[-1]C[-1]:RC[-1])"


'wenn in der Spalte C der Mittelwert aus Wert in Spalte B(dieser Zeile) und Wert in Spalte B(vorher. Zeile) stehen soll UND Du das Ergebnis nicht als Formel (nicht weiterhin veränderlich von den Eingabedaten) brauchst:


ActiveCell.Value = 0,5*(ActiveCell.Offset(-1, -1).Value + ActiveCell.Offset(0, -1).Value)


oder


ActiveCell.Value = WorksheetFunction.Average(ActiveCell.Offset(-1, -1).Value, ActiveCell.Offset(0, -1).Value)


(Wenn es nicht immer 2 werte sind muss man eine Variable mit den Werten aufaddieren und durch die Anzahl teilen.)
zu (2)
poste bitte Deine Datei oder die Tabellenblätter und erklär mir bitte nochmal, was Deine Regeln für die Mittelwertbildung sind (gleitender Mittelwert aus immer 2 Zahlen, oder von einem Startzeitpunkt alle Messwerte der nächsten halben Stunde oder oder)
Gruß
Adi

Anzeige
AW: Mittelwert mit Variablen
19.02.2008 14:52:00
Alexander
Hallo Adi,
Ich Verzweifel, Jetzt wollte ich die Problemstellung übertragen und jetzt funktioniert gar nix mehr.... na ja vielleicht hilft ja die Tabelle...
https://www.herber.de/bbs/user/50021.xls
Gruß Alex

AW: Mittelwert mit Variablen
19.02.2008 17:15:00
Adi
Hallo Alex,
hat etwas gedauert - man hat ja sonst noch was zu tun ;-)
Hier meine Lösung:

Sub Makro()
Zeitintervall = Sheets("Tabelle1").Range("C3").Value
SA2Zeile_anf = 10   'Startzeile auf Blatt "SA2"
Tabelle1Zeile = 7   'Überschriftzeile auf Blatt "Tabelle1"
Do Until Sheets("SA2").Cells(SA2Zeile_anf + 1, 2).Value = Empty
Zeit_anf = Sheets("SA2").Cells(SA2Zeile_anf, 2).Value
Zeit_end = Zeit_anf + Zeitintervall
SA2Zeile_end = SA2Zeile_anf
Do While Sheets("SA2").Cells(SA2Zeile_end + 1, 2).Value  Empty Then DZähler = DZähler + 1
DruckSumme = DruckSumme + iDruck
Next iZeile
Druck_Mittelwert = DruckSumme / DZähler
TemperaturSumme = 0
For iZeile = SA2Zeile_anf To SA2Zeile_end
iTemperatur = Sheets("SA2").Cells(iZeile, 4).Value
If iTemperatur  Empty Then TZähler = TZähler + 1
TemperaturSumme = TemperaturSumme + iTemperatur
Next iZeile
Temperatur_Mittelwert = TemperaturSumme / TZähler
WertSumme = 0
For iZeile = SA2Zeile_anf To SA2Zeile_end
iWert = Sheets("SA2").Cells(iZeile, 5).Value
If iWert  Empty Then WZähler = WZähler + 1
WertSumme = WertSumme + iWert
Next iZeile
Wert_Mittelwert = WertSumme / WZähler
Tabelle1Zeile = Tabelle1Zeile + 1
Sheets("Tabelle1").Cells(Tabelle1Zeile, 4) = Druck_Mittelwert
Sheets("Tabelle1").Cells(Tabelle1Zeile, 5) = Temperatur_Mittelwert
Sheets("Tabelle1").Cells(Tabelle1Zeile, 6) = Wert_Mittelwert
'Wenn  Du nur die Werte brauchst #################################### End
'Wenn  Du unbedingt Formeln brauchst ################################ Anf
'                  "=AVERAGE(SA2!R  [2]                 C  [-1]     :R [4]               _
C[-1])"
DruckFormel = "=AVERAGE(SA2!R" + CStr(SA2Zeile_anf) + "C" + CStr(3) + ":R" + CStr( _
SA2Zeile_end) + "C" + CStr(3) + ")"
Sheets("Tabelle1").Cells(Tabelle1Zeile, 4).FormulaR1C1 = DruckFormel
TemperaturFormel = "=AVERAGE(SA2!R" + CStr(SA2Zeile_anf) + "C" + CStr(4) + ":R" +  _
CStr(SA2Zeile_end) + "C" + CStr(4) + ")"
Sheets("Tabelle1").Cells(Tabelle1Zeile, 5).FormulaR1C1 = TemperaturFormel
WertFormel = "=AVERAGE(SA2!R" + CStr(SA2Zeile_anf) + "C" + CStr(5) + ":R" + CStr( _
SA2Zeile_end) + "C" + CStr(5) + ")"
Sheets("Tabelle1").Cells(Tabelle1Zeile, 6).FormulaR1C1 = WertFormel
'Wenn  Du unbedingt Formeln brauchst ################################ End
'Endzeile +1 ist neue Anfangszeile:
SA2Zeile_anf = SA2Zeile_end + 1
Loop
End Sub


Klappt!!
Ein Block ("'Wenn Du nur die Werte brauchst" oder "Wenn Du unbedingt Formeln brauchst") gehört auskommentiert.
Meine Programmierung ist Quick 'n Dirty ohne Dimensionierung der Variablen (pfui!). Behalte Deinen Stil bitte bei und definiere erst die Variablen ....
Viel Erfolg
Adi

Anzeige
AW: Mittelwert mit Variablen
19.02.2008 17:15:27
Adi
Hallo Alex,
hat etwas gedauert - man hat ja sonst noch was zu tun ;-)
Hier meine Lösung:

Sub Makro()
Zeitintervall = Sheets("Tabelle1").Range("C3").Value
SA2Zeile_anf = 10   'Startzeile auf Blatt "SA2"
Tabelle1Zeile = 7   'Überschriftzeile auf Blatt "Tabelle1"
Do Until Sheets("SA2").Cells(SA2Zeile_anf + 1, 2).Value = Empty
Zeit_anf = Sheets("SA2").Cells(SA2Zeile_anf, 2).Value
Zeit_end = Zeit_anf + Zeitintervall
SA2Zeile_end = SA2Zeile_anf
Do While Sheets("SA2").Cells(SA2Zeile_end + 1, 2).Value  Empty Then DZähler = DZähler + 1
DruckSumme = DruckSumme + iDruck
Next iZeile
Druck_Mittelwert = DruckSumme / DZähler
TemperaturSumme = 0
For iZeile = SA2Zeile_anf To SA2Zeile_end
iTemperatur = Sheets("SA2").Cells(iZeile, 4).Value
If iTemperatur  Empty Then TZähler = TZähler + 1
TemperaturSumme = TemperaturSumme + iTemperatur
Next iZeile
Temperatur_Mittelwert = TemperaturSumme / TZähler
WertSumme = 0
For iZeile = SA2Zeile_anf To SA2Zeile_end
iWert = Sheets("SA2").Cells(iZeile, 5).Value
If iWert  Empty Then WZähler = WZähler + 1
WertSumme = WertSumme + iWert
Next iZeile
Wert_Mittelwert = WertSumme / WZähler
Tabelle1Zeile = Tabelle1Zeile + 1
Sheets("Tabelle1").Cells(Tabelle1Zeile, 4) = Druck_Mittelwert
Sheets("Tabelle1").Cells(Tabelle1Zeile, 5) = Temperatur_Mittelwert
Sheets("Tabelle1").Cells(Tabelle1Zeile, 6) = Wert_Mittelwert
'Wenn  Du nur die Werte brauchst #################################### End
'Wenn  Du unbedingt Formeln brauchst ################################ Anf
'                  "=AVERAGE(SA2!R  [2]                 C  [-1]     :R [4]               _
C[-1])"
DruckFormel = "=AVERAGE(SA2!R" + CStr(SA2Zeile_anf) + "C" + CStr(3) + ":R" + CStr( _
SA2Zeile_end) + "C" + CStr(3) + ")"
Sheets("Tabelle1").Cells(Tabelle1Zeile, 4).FormulaR1C1 = DruckFormel
TemperaturFormel = "=AVERAGE(SA2!R" + CStr(SA2Zeile_anf) + "C" + CStr(4) + ":R" +  _
CStr(SA2Zeile_end) + "C" + CStr(4) + ")"
Sheets("Tabelle1").Cells(Tabelle1Zeile, 5).FormulaR1C1 = TemperaturFormel
WertFormel = "=AVERAGE(SA2!R" + CStr(SA2Zeile_anf) + "C" + CStr(5) + ":R" + CStr( _
SA2Zeile_end) + "C" + CStr(5) + ")"
Sheets("Tabelle1").Cells(Tabelle1Zeile, 6).FormulaR1C1 = WertFormel
'Wenn  Du unbedingt Formeln brauchst ################################ End
'Endzeile +1 ist neue Anfangszeile:
SA2Zeile_anf = SA2Zeile_end + 1
Loop
End Sub


Klappt!!
Ein Block ("'Wenn Du nur die Werte brauchst" oder "Wenn Du unbedingt Formeln brauchst") gehört auskommentiert.
Meine Programmierung ist Quick 'n Dirty ohne Dimensionierung der Variablen (pfui!). Behalte Deinen Stil bitte bei und definiere erst die Variablen ....
Viel Erfolg
Adi

Anzeige
AW: Mittelwert mit Variablen
20.02.2008 09:46:24
Alexander
Hey Adi,
Das ist mal eine echt Hilfe!!!! Ich bin beeindruckt wie du das so prompt hingezaubert hast!!!!
jetzt bin ich noch ein wenig ratlos was in dem Code steht aber probiere schon fleißig rum um zu verstehen wie das funktioniert...
Danke nochmal!!!
Gruß Alex

AW: Mittelwert mit Variablen
20.02.2008 10:52:00
Adi
Hallo Alex,

wie du das so prompt hingezaubert hast


Nee, nee, hat schon ein wenig gedauert ... Aber mir wurde hier im Forum auch schon oft geholfen, wenn ich nicht mehr weiter wusste. Vielleicht kannst Du Dich mal bei einem anderen Hilfesuchenden im Forum revanchieren ...

Anzeige
AW: Mittelwert mit Variablen
20.02.2008 12:07:00
Alexander
Adi? Hallo, bist du noch da?
Ich glaube das war noch nicht ganz alles.... hoffentlich hast du nochmal Lust in den Code zu gucken. :-)
So richtig rund läuft das leider alles noch nicht.
Ich habe jetzt mal einige Werte mehr in die Tabelle kopiert. und ein "Beispiel" Sheet beigefügt um zu zeigen wie ich mir das vorstelle.
https://www.herber.de/bbs/user/50053.xls
Die Daten in dem Sa2 Sheet sind immer unterschiedlich. Nur der Aufbau ist immer gleich.. Also Zeit und eine varierende Anzahl von zugehörigen Werten. Die zeitliche Länge der Tabelle vareiert allerdings auch also von 2 Stunden bis zu 2-3 Tagen. Die Zeitabstände sind auch nicht imme gleich die Werte können wie hier im Minutentakt aufgnommen worden sein oder aber auch in anderen Rhytmen (z.B. 5 Werte pro Minute.)
Na ich hoffe ich ärgere dich jetzt nicht, aber es wäre echt toll wenn du mir ein bisschen helfen würdest.
DANKE Gruß Alex

Anzeige
AW: Mittelwert mit Variablen
20.02.2008 13:11:19
Alexander
Ich markiere das noch mal als offene Frage,
Gruß Alex

AW: Mittelwert mit Variablen
20.02.2008 21:16:18
Renee
Mazwara Alexander,
Wie schon mal erwähnt. Ich verstehe dich, wenn du VBA lernen willst. Trotzdem würde ich für deine Aufgabenstellung Formeln wählen, weil:
0. Was nützt dich der beste VBA Code, wenn du ihn nicht verstehst und nicht erweitern kannst ?
1. Der VBA unflexibel, starr und schwer erweiterbar wird.
2. Immer fehlerbehaftet ist. Adi hat sich sehr Mühe gegeben (Gratuliere!) und trotzdem sind schwer entdeckbare Fehler drin (z.B. da die gleichen Werte 2mal in Durchschnitte einbezogen werden, wenn sie genau auf eine Zeitgrenze [Bis-Zeit und anschliessende Von-Zeit] fallen.
3. Formeln, wenn sie mal stimmen, immer stimmen.
4. Formeln zig-mal schneller sind als fast jeder VBA Code.
etc...
Die Formeln im angehängten Beispiel sind beliebig nach unten, bzw nach rechts kopierbar. Die versteckte Kolonne D enthält die Formel, zur Bestimmung des Bereichshöhe für die Durchschnittsberechnung.
https://www.herber.de/bbs/user/50064.xls
GreetZ Renée

AW: Mittelwert mit Variablen
21.02.2008 08:27:36
Alexander
Wau,
Die Tabelle ist der Knaller, funktioniert einwandfrei!!! Danke!!!!
Du hast natürlich recht damit das der VBA Code scneller einen Fehler produziert vor allem bei so unerfahrenen tüftlern wie mir...Ich bin auf jeden Fall von der Meinung korriert, dass diese Problemstellung nur mit VBA gelöst werden kann. Deine Lösung gefällt mir fast schon besser..
Greets
Alex
PS.: ich musste natürlich erst mal nachgoogeln was Mazwara bedeutet ;-) und Siehe da der einzige verwetbare eintrag der das Wort erklärt stammt sogar von dir... :-)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige