Anzeige
Archiv - Navigation
1760to1764
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
Inhaltsverzeichnis

Medianbildung mit Bedingungen

Medianbildung mit Bedingungen
30.05.2020 20:54:22
Wolfgang
Hallo,
ich sollte von Werten die in einer Spalte stehen, den Median, der ersten 6 Werte, die kleiner als 10000 sind, bilden.
In der Spalte sind eine unterschiedliche Anzahl von Werten.
Ich habe eine Beispieltabelle beigefügt.
Vielleicht kann mir jemand helfen. Danke
https://www.herber.de/bbs/user/137899.xlsx

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Medianbildung mit Bedingungen
30.05.2020 21:37:01
Martin
Hallo Wolfgang,
ich kennzeichne deine Frage als unbeantwortet, weil ich dir keine Formellösung anbieten kann, sondern nur eine VBA-Lösung und dein Level als "Basiskenntnisse in Excel" angegeben ist.
Sub Aufruf()
MsgBox MyMedian(Range("A1:A20"), 9999, 6)
End Sub
Function MyMedian(rngSource As Range, lngMaxValue As Long, iAmountValues As Integer) As Double
Dim arrNumbers() As Integer
Dim rngValue As Range
Dim lngCount As Long, lngSum As Long
Dim i As Integer
ReDim arrNumbers(rngSource.Cells.Count)
For Each rngValue In rngSource.Cells
If rngValue.Value 
Wenn du die Tastkombination Alt+F11 betätigst und im VBA-Editor im Menü auf Einfügen und Modul gehst, kannst du den obenstehenden Code hineinkopieren.
Anschließend könntest du den Code als UDF (Benutzerdefinierte Funktion) ganz normal über eine _ Formel anwenden:

=MyMedian(A1:A20;9999;6)
Das erste Argument ist der Zellbereich, das zweite Argument stellt den zu berücksichtigen Maximalwert dar und das dritte Argument die Anzahl der Höchstwerte zur Ermittlung des Medians.
Viele Grüße
Martin
Anzeige
Sind die 6 kleinsten oder 6 größten Werte gemeint?
30.05.2020 23:59:31
Martin
Hallo Wolfgang,
es kann sein, dass ich deine Aufgabenstellung falsch verstanden habe. Wenn die 6 kleinsten Werte statt der 6 größten Werte unter 10.000 gesucht sind, dann muss der VBA-Code so aussehen:
Sub Aufruf()
MsgBox MyMedian(Range("A1:A20"), 9999, 6)
End Sub
Function MyMedian(rngSource As Range, lngMaxValue As Long, iAmountValues As Integer) As Double
Dim arrNumbers() As Integer
Dim rngValue As Range
Dim lngCount As Long, lngSum As Long
Dim i As Integer
ReDim arrNumbers(rngSource.Cells.Count)
For Each rngValue In rngSource.Cells
If rngValue.Value ReDim Preserve arrNumbers(lngCount - 1)
For i = 1 To iAmountValues
Debug.Print
lngSum = lngSum + WorksheetFunction.Small(arrNumbers, i)
Next
MyMedian = lngSum / iAmountValues
End Function
Die Excel-Formel zum Aufruf der Funktion bleibt unverändert:

=MyMedian(A1:A20;9999;6)
Viele Grüße
Martin
Anzeige
AW: Sind die 6 kleinsten oder 6 größten Werte gemeint?
31.05.2020 00:31:53
Martin
Hallo Wolfgang,
entschuldige bitte, dass ich deinen Beitrag so "vollmülle". Ich hatte versehentlich den Mittelwert statt des Medians berechnet. Hier nun die Korrektur(en).
Wenn die kleinsten Werte berücksichtigt werden sollen:
Function MyMedian(rngSource As Range, lngMaxValue As Long, iAmountValues As Integer) As Double
Dim arrNumbers() As Integer
Dim arrMedian() As Integer
Dim rngValue As Range
Dim lngCount As Long, lngSum As Long
Dim i As Integer
ReDim arrNumbers(rngSource.Cells.Count)
ReDim arrMedian(1 To 6)
For Each rngValue In rngSource.Cells
If rngValue.Value 
Wenn die größten Werte berücksichtigt werden sollen:
Function MyMedian(rngSource As Range, lngMaxValue As Long, iAmountValues As Integer) As Double
Dim arrNumbers() As Integer
Dim arrMedian() As Integer
Dim rngValue As Range
Dim lngCount As Long, lngSum As Long
Dim i As Integer
ReDim arrNumbers(rngSource.Cells.Count)
ReDim arrMedian(1 To 6)
For Each rngValue In rngSource.Cells
If rngValue.Value 
Aufruf per Makro mit:
Sub Aufruf()
MsgBox MyMedian(Range("A1:A20"), 9999, 6)
End Sub
Aufruf per Formel mit:
=MyMedian(A1:A20;9999;6)
So, jetzt ist für mich Schlafenszeit. Gute Nacht!
Viele Grüße
Martin
Anzeige
...doch noch ein Minifehler:
31.05.2020 00:52:40
Martin
...damit die Anzahl der zu berücksichtigenden Werte nicht statisch bei 6 liegt und variabel geändert werden kann, müsste noch folgende Zeile geändert werden:
Bitte die Zeile:

ReDim arrMedian(1 To 6)
abändern in:

ReDim arrMedian(1 To iAmountValues)
VG Martin
{=MEDIAN(KKLEINSTE(A1:A20;ZEILE(X1:X6)))}
30.05.2020 23:40:46
WF
Arrayformel
Unterschiedliche Ergebnisse
31.05.2020 00:13:30
Martin
Hallo WF,
bei unseren Ergebnissen kommt es zu einer minimalen Abweichung. Während mit VBA 27,83 berechnet wird, errechnet die Arrayformel exakt 27,5. Kannst du dir erklären wie das kommt?
Viele Grüße
Martin
Anzeige
Fehler gefunden...
31.05.2020 00:21:37
Martin
...ich habe den Mittelwert statt des Medians berechnet.
VG Martin
AW: Medianbildung mit Bedingungen
31.05.2020 00:38:39
Wolfgang
Hallo,
ich meinte den Median aus den ersten 6 Werten die kleiner 10000 sind.
Gruß Wolfgang
falsche Werte ausgewählt...
31.05.2020 00:55:22
Martin
Hallo Wolfgang,
du meintest sicher folgende Werte:

=MEDIAN(A2;A3;A5;A9;A16;A19)
Viele Grüße
Martin
AW: falsche Werte ausgewählt...
31.05.2020 01:17:15
Martin
Hallo Wolfgang,
jetzt ist der Groschen ist gefallen:
Function MyMedian(rngSource As Range, lngMaxValue As Long, iAmountValues As Integer) As Double
Dim arrNumbers() As Integer
Dim rngValue As Range
Dim lngCount As Long
ReDim arrNumbers(iAmountValues - 1)
For Each rngValue In rngSource.Cells
If rngValue.Value 
Aufruf per Makro:
Sub Aufruf()
MsgBox MyMedian(Range("A1:A20"), 9999, 6)
End Sub
Aufruf per Formel:
=MyMedian(A1:A20;9999;6)
Ergebnis: 39
Viele Grüße
Martin
Anzeige
Median der ersten 6 kleiner-gleich 1000
31.05.2020 08:14:02
WF
Hi,
folgende Arrayformel:
{=MEDIAN(KKLEINSTE(A1:INDEX(A:A;KKLEINSTE(WENN(A1:A20<=1000;ZEILE(X1:X20));6));ZEILE(X1:X6)))}
WF
AW: mit Hilfe von AGGREGAT() und INDEX() ...
31.05.2020 08:33:59
AGGREGAT()
Hallo Wolfgang,
... einfach so:
=MEDIAN(INDEX(AGGREGAT(15;6;A1:INDEX(A:A;AGGREGAT(15;6;ZEILE(A1:A99)/(A1:A99&lt1000);6));ZEILE(A1:A6));))
Gruß Werner
.. , - ...
AW: da die Vorgabe : < 10000 lautete ...
31.05.2020 09:09:55
neopa
Hallo,
... fehlte in meiner Formel noch eine 0, was jedoch für die Beispieldaten keine Ergebnisänderung ergibt. Aber gemäß Vorgabe muss die Formel natürlich korrekt so lauten:
=MEDIAN(INDEX(AGGREGAT(15;6;A1:INDEX(A:A;AGGREGAT(15;6;ZEILE(A1:A99)/(A1:A99&lt10000);6)); ZEILE(A1:A6));))
Gruß Werner
.. , - ...
Anzeige
AW: Medianbildung mit Bedingungen
31.05.2020 12:39:15
Wolfgang
Hallo zusammen,
vielen Dank für die Hilfe. Es zeigt sich wieder einmal, dass es mehrere Wege gibt um ans Ziel zu kommen.
Danke, Danke
Schöne Pfingsten
Gruß Wolfgang
AW: Medianbildung mit Bedingungen
31.05.2020 14:10:21
Günther
Moin,
ein weiterer Weg ohne eine einzige Zeile Code, ohne eine einzige Formel aber mit einigen Mausklicks: Der Weg übewr Daten | Abrufen und transformieren aka Power Query. Auch Ergebnis 39. ;-)
 
Gruß
Günther  |  mein Excel-Blog
das PQ zum Sonntag
31.05.2020 15:32:22
WF
Was soll das eigentlich ?
Man liest immer von wenigen Mausklicks und wie einfach das ist.
Man sieht aber nie einen Lösungsweg mit Ergebnis.
WF
Anzeige
Lösungsweg-Ergebnis=39
31.05.2020 16:51:02
Helmut

let
Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Spalte1", Int64.Type}}),
#"Gefilterte Zeilen" = Table.SelectRows(#"Geänderter Typ", each [Spalte1] 
Helmut
AW: das PQ zum Sonntag
31.05.2020 18:42:16
Günther
@WF: Ausnahmsweise antworte ich dir einmal (sonst "überlese" ich alle Beiträge von dir)…
"Was soll das eigentlich ?"
Was das soll? Ganz klar ausgedrückt: Ich antworte in erster Linie dem Fragesteller. Und den will ich animieren, sich mit einer Lösung auseinander zu setzen. Ich sehe mich nicht als kostenlosen Dienstleister mit Komplettlösungen für einen Fragesteller; wenn Interesse besteht kann sich jeder in die Thematik einarbeiten und wenn ein gewisses Maß an Eigenleistung erbracht worden ist bin ich aber auch gerne bereit, in gewissem/angemessenen Rahmen gezielt zu helfen. Und ja, auch hier setze ich Grenzen. Denn mein Wissen und die Fähigkeit dieses lernfähig weiter zu geben ist ein Wert, der auch pekuniär zu meinem Leben beiträgt.
"Man liest immer von wenigen Mausklicks und wie einfach das ist."
Dass "man" durchaus in der Lage ist, den "Anschubser" zu verstehen und auch inhaltlich nachzuvollziehen, das zeigt doch der Folgebeitrag von Helmut. Warum anonymisierst du also derartig und schreibst nicht, dass DU (also "ich lese…") dich daran störst? - Die Wortwahl "WENIGE" Mausklicks wirst du von mir selten lesen, meist schreibe ich (wie auch in diesem Fall) "einige"… (was ich als einen deutlichen Unterschied sehe). - Und dass "alles ganz einfach ist" hast du von mir noch nie gelesen. Ich weiß, dass in einem anderen Forum jemand diese These vertritt; ich verurteile solch eine Aussage, denn ich erinnere mich noch sehr gut daran, wie sehr ich zu Beginn (und manchmal auch noch jetzt) geschwitzt habe, um die Logik des PQ zu verstehen und den Lösungsweg nachvollziehen zu können. Schließlich finde ich "ellenlange" Formeln auch nicht einfach (auch wenn ich diese mit etwas Mühe analysieren kann). Durch fast 30-jährige Erfahrung als Schulungsleiter weiß ich, dass es für meine Gegenüber NIE leicht ist, neue Wege zu beschreiten. Ich kann aber versuchen, den Weg zu ebnen.
"Man sieht aber nie einen Lösungsweg mit Ergebnis."
Wie oben schon gesagt: Ich bin nicht das Sozialamt für lernunwillige oder lernunfähige Excel-User. Ein Forum sollte Hilfe zur Selbsthilfe erbringen, mehr nicht. Die aber erbringe ich freiwillig, gerne und natürlich gratis. Und wer die Komplettlösung als "Fertigmenü" haben will der möge sich den Kopf jedes Threads ansehen, wo Hans seine Hilfe (selbstverständlich gegen Bezahlung) anbietet. - Und ach ja, die Lösung hatte ich genannt: 39! Nur den Lösungsweg darf sich jeder Interessierte zumindest ansatzweise erarbeiten. Die ersten Schritte erwarte ich einfach von einem Fragesteller. Wenn es dann hakt, dann helfe ich auch (was ich auch schon vielfach bewiesen habe). Und das "nie" stimmt auch in keiner Weise, ich habe schon oft genug beim ersten oder zweiten Anlauf die komplette Lösung geliefert, soweit es PQ-Basics betraf. Manchmal auch tiefer gehend. Und mein Name im Footer ist sogar der direkte Weg zu mir. ;-) - Auch hier gehört der TE zu den non- oder less-Respondern, ich habe keinerlei Interessenbekundung an einer PQ-Lösung von deiner Seite gesehen. Warum sollte ich also die Mühe auf mich nehmen und jemandem, der nicht wirklich an einer noch unbekannten Lösung interessiert ist, kostenlose, werthaltige Hilfe anbieten, die mir dann doch nicht gedankt wird?
Und ja, auch wenn es dich stört: Ich werde diesen Weg konsequent und stringent weiter verfolgen. Auch in anderen Foren. Ich stecke meine noch verbleibende Zeit auf dieser meist schönen Welt lieber in die Beiträge meines Blogs. Und ich weiß auch durch Feedbacks, dass eine ganze Menge der Foren-User dort ihr Grundwissen schöpfen und so einen soliden Einstieg in Power Query finden. Und wem diese Einstellung nicht passt, der kann meine Beiträger ja "überlesen"/ignorieren bzw. mich in anderen Foren auf die I++ Liste setzen. Denn eines sollte JEDEM Helfer bewusst sein: ICH (wie fast jeder Helfer) bin derjenige, der etwas Werthaliges gibt! Der Fragesteller oder auch Mitleser kann das Angebot annehmen oder nicht, die Bedingungen aber bestimme ich. Und das ist gut so.
Ich weiß, dass ich mit diesem "Wort zu Pfingsten" den Unmut oder auch Widerstand einiger Mitleser hervorrufe. Ich respektiere andere Meinungen (sofern sie nicht anonymisiert auf die Gemeinschaft übertragen werden), aber ich akzeptiere sie gewiss nur dann, wenn mich die Argumente überzeugen. - Ich werde aber zu diesem Beitrag in keinem Fall eine Replik schreiben, egal wer was wie dazu schreibt. Punkt.
So oder so: Bleibt alle gesund!
 
Gruß
Günther  |  mein Excel-Blog
Anzeige
eine konkrete Frage wird gestellt
31.05.2020 19:42:04
WF
Von Dir kommt dann aber keine Formel oder ein VBA-Code, sondern
"Lies ein Buch"
Halleluja

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige