title image


Smiley Matrixfunktion per VBA
Hallo,



ist es möglich, die Ergebnisse einer selbst geschriebenen Funktion als Matrixformel auszugeben? Die nachstehende Funktion ergibt im gewählten Ausgabebereich innerhalb einer Tabelle immer nur den Wert "0" (s.u.). Die Ergebnisse der Funktion habe ich überprüft; sie sind mathematisch richtig. Werden leider nur nicht ausgegeben.



Function TRENDI(Y_Werte As Range) As Variant

Dim i As Integer, j As Integer

Dim sum_x, sum_y, sum_xy, q_sum_x, n_sum_xy, p_sum_xy, sum_x_q, b, m

Dim anz_zeilen

Dim gesamtperioden, ret

Dim akt_datei, akt_blatt, akt_zelle, akt_zeile, akt_spalte

Dim mark_zeilen As Object



'Anzahl der markierten Y_Werte Matrix feststellen

anz_zeilen = Y_Werte.Rows.Count



ret = Y_Werte.Value



'Anzahl der markierten Zeilen feststellen

Set mark_zeilen = Selection.Rows

mark_zeilen_zahl = mark_zeilen.Rows.Count

'Name der aktiven Datei feststellen

akt_datei = ActiveWorkbook.Name

'Name des aktiven Arbeitsblatts feststellen

akt_blatt = ActiveSheet.Name

'Referenz der aktiven Zelle feststellen

akt_zelle = ActiveCell.Address

'Zeile der aktiven Zelle feststellen

akt_zeile = Range(akt_zelle).Row

'Spalte der aktiven Zelle feststellen

akt_spalte = Range(akt_zelle).Column

'Bereichnung der Steigung

'Formel: b=n*Summe(xy)- Summe(x)Summe(y)

'/ n*Summe(x^2)- Summe(x)^2

'y sind die Werte innerhalb des Array

'x sind die Perioden 1 bis ...

'n sind die Anzahl der Werte



'Summe xy

sum_x = 0

sum_y = 0

sum_xy = 0

q_sum_x = 0

For i = 1 To anz_zeilen

sum_x = sum_x + i

sum_y = Y_Werte(i).Value + sum_y

sum_xy = sum_xy + (Y_Werte(i).Value * i)

q_sum_x = q_sum_x + i ^ 2

Next i



'sum_xy * n

n_sum_xy = sum_xy * anz_zeilen

'sum_x*sum_y

p_sum_xy = sum_x * sum_y

'q_sum_x * n

q_sum_x = q_sum_x * anz_zeilen

'summe x zum Quadrat

sum_x_q = sum_x ^ 2

'Konstante m

m = (n_sum_xy - p_sum_xy) / (q_sum_x - sum_x_q)

'Steigung b

b = (sum_y - (m * sum_x)) / anz_zeilen

aus_zeile = akt_zeile

'Berechnung

'Verlängerung der Regression

ReDim ret(mark_zeilen_zahl)

For j = 1 To mark_zeilen_zahl

ret(j) = b + (m * j)

Next j



TRENDI = ret

End Function



Ergebnisse der Funktion (als Matrixformel eingegeben)

A B

1 B1GR {=TRENDI(A2:A16)}

2 1760,6 0,00

3 1799,7 0,00

4 1785,3 0,00

5 1832,7 0,00

6 1867,4 0,00

7 1886,0 0,00

8 1920,0 0,00

9 1959,0 0,00

10 1998,4 0,00

11 2062,5 0,00

12 2088,1 0,00

13 2089,3 0,00

14 2085,4 0,00

15 2119,4 0,00

16 2139,8 0,00

17 0,00

18 0,00

19 0,00

20 0,00

21 0,00



Für Eure Hilfe bin ich sehr dankbar!

Gruß

jowol

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: