Supportnet Computer
Planet of Tech

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

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.

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

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

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

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:


´
    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 Sub


So 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

 For i = 1 To 500 


und

Next


die 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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: