# Dringend: Median unter VBA (Excel)



## ronnyk (15. Juni 2004)

Servus!

Bräuchte dringend den passenden VBA-Code für die Berechnung des Medians.
Hoffe Ihr könnt mir helfen.

Danke


----------



## VBFreak (15. Juni 2004)

Median verlangt 2 bis x Zahlen als Parameter.

Übrgib der Funktion einfach die Zahlen (mit Komma getrennt)  


Beispiel


```
Medianwert = Median( Zahl1, Zahl2, ...., ZahlX)
```
 was du dann mit dem Medianwert machen willst, hast du ja nicht gesagt.


----------



## ronnyk (15. Juni 2004)

Hab dies Versucht!
Kommt aber leider eine Fehlermeldung!
"Compile error: Sub or Function not defined"
Kann auch keine Zahlenbereiche oder Liste von Zahlen angeben!
Der Median-wert soll dann nur noch in die entsprechende Zeile eingelesen werden.


----------



## Ein_Freund (15. Juni 2004)

Warum eröffnest Du zweimal den gleichen Thread


----------



## ronnyk (16. Juni 2004)

Sorry war keine absicht!


----------



## Ein_Freund (16. Juni 2004)

Da Du mich drum gebeten hast, hier nun also mal die Berechnung des Medians:

n sei die Anzahl der Werte und Xi  der Wert mit dem jeweiligen Index

Ungerades n: MEDIAN = X(n + 1) / 2

Gerades n: MEDIAN = (X(n / 2) + X(n / 2 + 1)) / 2  Hier wird das arithmetische Mittel der beiden mittleren Werte gebildet.

Die Werte in der Liste _*müssen* _  der Grösse nach geordnet sein...


----------



## ronnyk (16. Juni 2004)

*feine Sache!*

Danke nochmal!
Weißt du auch zufällig wie ich die Werte des Median aus einer einzelnen Variablen entnehmen kann?
Die Variable enthält zahlreiche Werte die mit ", " getrennt sind.

```
Var = "76, 7887, 54, ....."
```
Weiß aber nicht wie viele Werte die Variable besitzt, da dies bei jedem Durschgangunterschiedlich ist.


----------



## Ein_Freund (16. Juni 2004)

Die Anzahl der Werte kannst Du ermitteln, indem Du die Kommata entfernst und dann die Länge des Strings ohne Kommata von der Länge des Strings mit Kommata abziehst.

Trennen kannst Du die Werte mit der Split() - Funktion:


```
Dim myArray() as String

myArray = Split(Var, ",", , vbTextCompare)
```


----------



## ronnyk (16. Juni 2004)

Cool!

Da wär nur noch ein Problem! Wie bekomme ich die Array-Variable in die Median()-Funktion integrierd? 
Die Funktion aAkzeptiert nur einzelne Argumente. Eine Array-Var sieht er als ein Argument.


```
med_value = Application.WorksheetFunction.Median(Arg1, Arg2, ....)
```


----------



## Ein_Freund (16. Juni 2004)

Keine Ahnung, aber Du kannst doch den Median selbst ermitteln. Du musst halt dein Array noch einem Sortier - Algorithmus unterziehen und dann entweder den Wert in der Mitte (bei ungerader Anzahl) oder den Mittelwert aus den beiden mittleren Werten (bei gerader Anzahl) errechnen.


----------



## thekorn (16. Juni 2004)

*array integrieren*

geht relativ einfach, du musst nur ein neues array im Integerdatentyp erzeugen und an die Funktion übergeben:
Zum Beispiel so:


```
Public Sub median_test()
Dim myArray() As String
Dim Zahlen() As Integer


Var = "1,2,3,4,5,6,6,9,78" 'zahlen MÜSSEN sortiert sein
myArray = Split(Var, ",", , vbTextCompare)
ReDim Preserve Zahlen(UBound(myArray()))

For i = 1 To UBound(myArray())
    ReDim Preserve Zahlen(i)
    Zahlen(i) = Val(myArray(i))
Next i

med_value = Application.WorksheetFunction.Median(Zahlen)
MsgBox (med_value)

End Sub
```

gruß
thekorn


----------



## ronnyk (17. Juni 2004)

Danke! Danke Danke!
Habt mir sehr geholfen!


----------

