Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Standardabweichung VBA | Herbers Excel-Forum


Betrifft: Standardabweichung VBA von: mctapt
Geschrieben am: 26.11.2009 16:43:25

Liebe VBA-Freunde,

ich habe ein Makro programmiert, welches die Standardabweichung ausrechnen soll.

Meine Code für die Standardabweichung in VBA lautet:

stabwsumme(j,i)= worksheetfunction.stdev(summe(0,0),summe(j,i))

Wenn ich die VBA-Werte mit meinen Excel Werten (Formel stabw) vergleiche, kommen unterschiedliche Werte raus. Habt Ihr eine Ahnung wieso das so ist?

Für eine kurze Rückmeldung wäre ich dankbar.

Gruß

mctapt

  

Betrifft: AW: Standardabweichung VBA von: Erich G.
Geschrieben am: 26.11.2009 17:06:15

Hi Vorname, ( zu Vornamen und Nicknames schau bitte mal in die Forums-FAQ )

Zitat:

NickNames sind nicht erwünscht.
Diese Frager werden bei der Beantwortung nicht gerade bevorzugt behandelt.
Nenne Deinen Vornamen, damit man Dich ansprechen kann.
So eine Ahnung, woran das liegt, habe ich schon.
Die Ursache vermute ich nicht in der Fkt. STABW() oder dem Aufruf mit WorksheetFunction.StDev().

Kann es sein, dass du die Fkt. in VBA mit anderen Argumenten aufrufst als in Excel?
Wenn du schreibst: "worksheetfunction.stdev(summe(0,0),summe(j,i))",
dann werden der Fkt. nur zwei Argumente - zwei Zahlen - übergeben. Ist das so gewollt?

Wie lautet deine entsprechende Excelformel?

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort


  

Betrifft: AW: Standardabweichung VBA von: mctapt
Geschrieben am: 26.11.2009 17:33:19

Hallo Erik,

sry wegen den Vornamen. Mein Name ist Thomas.
Nein, gewollt war, dass es über mehrere Abschnitte (z.b. i=50) geht. zu erst wollte ich

worksheetfunction.stdev(summe(j,i))

schreiben. da kommt aber eine fehlermeldung, dass die stdev eigenschaft der worksheet function nicht zugeordnet werden kann. der versuch mit worksheetfunction.stdev(summe(0,0),summe(j,i)) war nur eine idee dem entgegenzukommen. ich weiß, dass so ein kleiner statistischer fehler auftritt, der geht aber gegen Null wenn man i sehr groß macht. Es tritt auch eine Different auf, wenn ich in Excel den Wert summe(0,0) einbezieht (außer bei i=1) dort wird der richtige wert ausgegeben. meine excelformel lautet z.b. stabw(b10:b60), wenn ich die summe(0,0) miteinbeziehe ist es analog stabw(b9:b60)

Gruß aus Frankfurt

Thomas


  

Betrifft: AW: Standardabweichung VBA von: IngGi
Geschrieben am: 26.11.2009 18:20:53

Hallo Thomas,

wie Erich schon sagte, mit deiner Syntax werden nur die beiden Werte für Summe(0, 0) und Summe(j, i) berücksichtigt (also je nachdem, welchen Wert i und j gerade haben). Die anderen Werte deines Arrays bleiben unberücksichtigt. Um die WorksheetFunction nutzen zu können, müsstest du die Werte in einen Zellbereich schreiben, auf den du dich in der Funktion dann beziehst. Ansonsten müsstest du auf die WorksheetFunction verzichten und die Berechnung der Standardabweichung selbst programmieren.

Gruß Ingolf


  

Betrifft: Standardabweichung (Excel=VBA) von: Erich G.
Geschrieben am: 26.11.2009 23:50:44

Hi Thomas,
ist dir inzwischen klar, warum "worksheetfunction.stdev(summe(j,i))" einen Fehler liefern muss?
summe(j,i) vermutlich eine Zahl, nehmen wir als Beispiel 4711.
STABW(4711) gibt einen Fehler, denn STABW braucht (sinnvollerweise!) mindestens zwei Argumente.
(Hast du mal in die Excelhilfe zu STABW geschaut?)

Du willst auch nicht wirklich stdev(summe(0,0),summe(j,i)) (also über zwei Zahlen) berechnet haben,
sondern die Standardabweichung über einer größere Anzahl von Zahlen,
z. B. alle Zahlen im Bereich B10:B60.

Probier das mal aus:

Sub tst()
                                          ' STABW bekommt 51 Argumente
   MsgBox WorksheetFunction.StDev(Range("B10:B60"))
   MsgBox WorksheetFunction.StDev(Cells(10, 2).Resize(51))
   MsgBox WorksheetFunction.StDev(Range(Cells(10, 2), Cells(60, 2)))

                                          ' STABW bekommt 52 Argumente
   MsgBox WorksheetFunction.StDev(Range("B9:B60"))
   MsgBox WorksheetFunction.StDev(Cells(9, 2).Resize(52))
   MsgBox WorksheetFunction.StDev(Range(Cells(9, 2), Cells(60, 2)))
End Sub
Noch eins: Es hat eine Weile gedauert, bis ich meinte, auf diese Weise antworten zu können/sollen -
wegen der Levels, die du angegeben hast. Ob "Excel gut" und auch "VBA gut" wirklich zutreffen?...

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort