AW: Median
08.08.2011 14:46:56
Harald
Hallo Stephan,
mit Tabellenfunktionen fällt mir dazu nichts ein. Mit VBA schon:
Eine Funktion (der Einfachheit halber Expand() genannt) expandiert die Matrix aus Anzahl und Wert in eine lineare Liste (Datenfeld), in der jeder Wert so oft enthalten ist, wie die Anzahl in der entsprechenden Spalte angibt. Dise Liste steckst Du in die Meddain() Funktion und bekommst das Ergebnis.
So kann die Funktion aussehen:
Function Expand(source As Range) As Variant
Dim tmp() As Long 'auf passenden Datentyp ändern, z.B. double etc, wie benötigt.
' Wenn Speicher keine Rolle spielt, dann universell mit Variant
Dim AnzahlZeilen As Long
Dim AnzahlFelder As Long
Dim zeile As Long
Dim i As Long
Dim k As Long
If source.Columns.Count 2 Then
Expand = "#falsche Spaltenzahl" 'sieht man nur, wenn Expand() direkt aufgerufen wird, sonst _
"#WERT"
Exit Function
End If
AnzahlZeilen = source.Rows.Count
AnzahlFelder = 0
For i = source.Row To source.Row + AnzahlZeilen - 1
AnzahlFelder = AnzahlFelder + Cells(i, source.Column).Value
Next
ReDim tmp(1 To AnzahlFelder)
k = 1
For zeile = source.Row To source.Row + AnzahlZeilen - 1
For i = 1 To Cells(zeile, source.Column).Value
tmp(k) = Cells(zeile, source.Column + 1).Value
k = k + 1
Next
Next
Expand = Array(tmp())
End Function
Aufruf im Tabellenblatt: =Median(Expand(Bereich))
Bereich z.B. F3:G7
Mit dieser Matrix
Anzahl Wert
1 1
2 2
2 3
4 4
1 5
Ist der Median 3,5, genau wie beim direkten Aufruf =Median (1,2,2,3,3,4,4,4,4,5)
Gruß
Harald