Supportnet / Forum / Tabellenkalkulation
Berechnungen mit unterschiedlich langen Datensätzen
Frage
Hallo,
ich habe folgendes Problem ich habe eine Tabelle in Excel (2003) mit ca. 40000 Zeilen und etwa 400 Datensätzen.
Die Folgendermaßen aufgebaut sind:
.....
82 | __
1 | Wert1
2 | Wert2
...
82 | Wert82
....
74| __
1 | Wert1
...
74 | Wert 74 usw.
Von den jeweiligen Werten muss ich nun Standardabweichung und Mittelwert berechnen, das wäre alles nicht so tragisch wenn die anzahl der Werte nicht verschieden wäre also mit Formeln runterziehen ist nicht.
Ich bräuchte nun etwas hilfe mit einem einfachen Makro dass mir die Arbeit etwas erleichtert oder eine Möglichkeit die Datensätze zügig horizontal anzuordnen.
Den Anfang eines Datensatzes würde man recht einfach erkennen es ist ein Wert über 70 und eine Zelle darunter immer eine 1.
Vielen Dank schonmal
Gruß
nik
Antwort 1 von Saarbauer
Hallo,
ist aus meiner Sicht nur mit VBA lösbar.
https://supportnet.de/threads/1360448
etwas einfacher Lösungsansatz, aber die Richtung.
werde mir für eine Erweiterung der Lösung heute Abend mal paar Gedanken machen
Gruß
Helmut
ist aus meiner Sicht nur mit VBA lösbar.
https://supportnet.de/threads/1360448
etwas einfacher Lösungsansatz, aber die Richtung.
werde mir für eine Erweiterung der Lösung heute Abend mal paar Gedanken machen
Gruß
Helmut
Antwort 2 von JoeKe
Hallo nik,
ich hoffe ich habe deinen Tabellenaufbau richtig verstanden.
Erst kommt eine Zahl die die Länge des Datensatzes angibt (84, 74 usw.)?
Dann folgen die laufenden Nummern des Datensatzes und in der Spalte daneben die jeweiligen Werte?
Wenn du beide Fragen mit "Ja" beantwortest, sollte es so gehen:
In Spalte A steht die Nummerierung.
In Spalte B die Werte
In C1 für den Mittelwert:
=WENN(UND(A2=1;A1>=70);SUMME(B2:INDIREKT("B"&(A1)+ZEILE(A1)))/A1;"")
In D1 für die Standartabweichung:
=WENN(UND(A2=1;A1>=70);STABW(B2:INDIREKT("B"&(A1)+ZEILE(A1)));"")
Beide Formeln dann soweit wie nötig nach unten kopieren.
Ich hoffe das entspricht in etwa deinen Vorgaben.
MfG
JöKe
PS: Die Ergebnisse stehen dann neben den Zahlen für die Datensatzlänge.
ich hoffe ich habe deinen Tabellenaufbau richtig verstanden.
Erst kommt eine Zahl die die Länge des Datensatzes angibt (84, 74 usw.)?
Dann folgen die laufenden Nummern des Datensatzes und in der Spalte daneben die jeweiligen Werte?
Wenn du beide Fragen mit "Ja" beantwortest, sollte es so gehen:
In Spalte A steht die Nummerierung.
In Spalte B die Werte
In C1 für den Mittelwert:
=WENN(UND(A2=1;A1>=70);SUMME(B2:INDIREKT("B"&(A1)+ZEILE(A1)))/A1;"")
In D1 für die Standartabweichung:
=WENN(UND(A2=1;A1>=70);STABW(B2:INDIREKT("B"&(A1)+ZEILE(A1)));"")
Beide Formeln dann soweit wie nötig nach unten kopieren.
Ich hoffe das entspricht in etwa deinen Vorgaben.
MfG
JöKe
PS: Die Ergebnisse stehen dann neben den Zahlen für die Datensatzlänge.
Antwort 3 von CaroS
Hallo Nik,
ich schließe mich verspätet JöKes Wunsch an, dass man von fortlaufender Nummerierung in Spalte A und Leerzeilen zwischen den "Blöcken" ausgehen kann, und schlage eine ähnliche Formellösung vor, jeweils in eine Zelle der Zeile 1 einzutragen und dann runterzukopieren:
Mittelwert:
=WENN(UND(A1 <> ""; A2 = ""); SUMME(INDIREKT("B" & (ZEILE() - A1 + 1) & ":B" & ZEILE())) / A1; "")
Standardabweichung:
=WENN(UND(A1 <> ""; A2 = ""); STABW(INDIREKT("B" & (ZEILE() - A1 + 1) & ":B" & ZEILE())); "")
Hier stehen die Ergebnisse in der letzten Zeile des "Blocks", ansonsten sind die Ähnlichkeiten ja nicht zu übersehen.
Gruß,
CaroS
ich schließe mich verspätet JöKes Wunsch an, dass man von fortlaufender Nummerierung in Spalte A und Leerzeilen zwischen den "Blöcken" ausgehen kann, und schlage eine ähnliche Formellösung vor, jeweils in eine Zelle der Zeile 1 einzutragen und dann runterzukopieren:
Mittelwert:
=WENN(UND(A1 <> ""; A2 = ""); SUMME(INDIREKT("B" & (ZEILE() - A1 + 1) & ":B" & ZEILE())) / A1; "")
Standardabweichung:
=WENN(UND(A1 <> ""; A2 = ""); STABW(INDIREKT("B" & (ZEILE() - A1 + 1) & ":B" & ZEILE())); "")
Hier stehen die Ergebnisse in der letzten Zeile des "Blocks", ansonsten sind die Ähnlichkeiten ja nicht zu übersehen.
Gruß,
CaroS
Antwort 4 von CaroS
Hallo,
eine Möglichkeit zu einer kleinen Vereinfachung der Formeln hatte ich noch übersehen, aber beim Anblick von JöKes Formeln bin ich drauf gekommen.
Mittelwert:
=WENN(UND(A1 <> ""; A2 = ""); SUMME(INDIREKT("B" & (ZEILE() - A1 + 1)):B1) / A1; "")
Standardabweichung:
=WENN(UND(A1 <> ""; A2 = ""); STABW(INDIREKT("B" & (ZEILE() - A1 + 1)):B1); "")
Gruß,
CaroS
eine Möglichkeit zu einer kleinen Vereinfachung der Formeln hatte ich noch übersehen, aber beim Anblick von JöKes Formeln bin ich drauf gekommen.
Mittelwert:
=WENN(UND(A1 <> ""; A2 = ""); SUMME(INDIREKT("B" & (ZEILE() - A1 + 1)):B1) / A1; "")
Standardabweichung:
=WENN(UND(A1 <> ""; A2 = ""); STABW(INDIREKT("B" & (ZEILE() - A1 + 1)):B1); "")
Gruß,
CaroS
Antwort 5 von Saarbauer
Hallo,
wird nach @CaroS lösingvorschlag noch eine Lösung gebraucht?
Gehe mal davon aus, dass keine gebraucht wird, da keine Rückmeldung von @nik815
Gruß
Helmut
wird nach @CaroS lösingvorschlag noch eine Lösung gebraucht?
Gehe mal davon aus, dass keine gebraucht wird, da keine Rückmeldung von @nik815
Gruß
Helmut
Antwort 6 von nik815
Danke für die schnellen Antworten,
JöKes Formel hat funktioniert allerdings kam noch die Bedingung dazu dass die Tabelle noch Transponiert werden sollte.
Also die Werte nebeneinander und Datensätze nach wie vor untereinander.
Ich habe das nach trial und error mit Makro aufzeichnen gelöst:
So sieht das ganze dann aus. Musste nurnoch eine For Schleife per Hand eingeben.
Gruß
Nik
JöKes Formel hat funktioniert allerdings kam noch die Bedingung dazu dass die Tabelle noch Transponiert werden sollte.
Also die Werte nebeneinander und Datensätze nach wie vor untereinander.
Ich habe das nach trial und error mit Makro aufzeichnen gelöst:
´
Selection.End(xlDown).Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Windows("Mappe1").Activate
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Selection.End(xlDown).Select
For i = 1 To 500
Windows("Arbeitskopie von DBA30_AlleWerte_Sortiert.xls").Activate
Selection.End(xlDown).Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
Selection.Copy
Windows("Mappe1").Activate
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Selection.End(xlDown).Select
Next
End SubSo sieht das ganze dann aus. Musste nurnoch eine For Schleife per Hand eingeben.
Gruß
Nik
Antwort 7 von JoeKe
Hallo Nik,
erstmal vielen Dank für die Rückinfo.
Bist du sicher, dass dein Makro das von dir gewünschte Ergebnis liefert?
Deine For-Schleife ist z.B. ohne Funktion, da zwischen
und
die Variable i nicht mehr verwendet wird.
Gruß
JöKe
erstmal vielen Dank für die Rückinfo.
Bist du sicher, dass dein Makro das von dir gewünschte Ergebnis liefert?
Deine For-Schleife ist z.B. ohne Funktion, da zwischen
For i = 1 To 500 und
Nextdie Variable i nicht mehr verwendet wird.
Gruß
JöKe
Antwort 8 von nik815
Hmm ich weiß der Programmierstil ist unter aller Kanone, aber die For - Next Schleife funktioniert auch ohne i = i+1, da die Schleife die Zählvariable selbst inkrementiert.
Gruß
Nik
Gruß
Nik

