[elektro] VBA Sub Func

Nemeth Tibor nemeth.tibor798 at t-online.hu
Sat Sep 15 22:12:22 CEST 2012


Hali!

2012.09.15. 6:36 keltezéssel, Bánhidi István írta:
> F1 nekem már sokszor segített :)
> Kódrészlet, esetleg a munkafüzet?

Nos itt van:
----------------------------------------------------------
Function egyenget(xek As Range, yok As Range, ydiff As Range, resuplus 
As Range) As Double
Dim xs As Double, ys As Double, rr As Double, qq As Double, slop As 
Double, ii As Integer, nn As Integer
nn = xek.Count
If (nn > 1) And (nn = yok.Count) Then
xs = 0: ys = 0
For ii = 1 To nn: xs = xs + xek.Item(ii): ys = ys + yok.Item(ii): Next ii
qq = 0: slop = 0: xs = xs / nn: ys = ys / nn
For ii = 1 To nn
rr = xs - xek.Item(ii): slop = slop + rr * (ys - yok.Item(ii)): qq = qq 
+ rr * rr
Next ii
slop = slop / qq
qq = 0:
For ii = 1 To nn
rr = (xek.Item(ii) - xs) * slop - (yok.Item(ii) - ys): qq = qq + rr * rr
' ydiff.Item(ii)=rr ***No ez az ami nem megy
Next ii
qq = Sqr(qq / nn)
'resuplus.item(1)=slope:resuplus.item(2)=qq:resuplus.item(3)=xs:resuplus.item(4)=ys 
  ***Ez sajon nem megy
egyenget = slop 'csak ezt tudom visszaadni
Else
  MsgBox ("Nem megfelelő méretű operandusok")
End If
End Function
----------------------------------------------------------

Ezt szeretném de e két sor amiben van ***, ki van kommentezve mert nem 
hajtja végre. Ha megpróbálom #ÉRTÉK! jelenik meg a cellában ahol a 
függvényhívást tartalmazó  képlet van és persze a megkívánt egyéb 
helyekre sem ír.
A gond az írással van, a ydiff.item(1)-et olvasni tudja.
Írni nem tudok direktben sem tehát a cells(1,2)=3 is ugyanazt a hibát 
okozza.

Közben valamire jutottam. Sikerült tömbértéket visszaadó formában 
megírni, a fene se gondolta volna, hogy a függvény típusát ehhez üresen 
kell hagyni.

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Function egyenget_2(xek As Range, yok As Range, ydiff As Range)
Dim xs As Double, ys As Double, rr As Double, qq As Double, slop As 
Double, ii As Integer, nn As Integer
Dim resuplus(3) As Double

     itt mint fentebb

qq = Sqr(qq / nn)
resuplus(0) = slop: resuplus(1) = qq: resuplus(2) = xs: resuplus(3) = ys
egyenget_2 = resuplus
Else
  MsgBox ("Nem megfelelő méretű operandusok")
End If
End Function
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Eddig azt sem tudtam, hogy a tömbképlet csak vízszintesen működik, eddig 
oszlopban próbáltam sikertelenül. Ez most itt a forrásból nem látszik, 
de a munkalapon így már működik, a kijelölt négy szomszédos cellában 
megjelenik a négy kiszámított érték.
No, ma már jó napom van de sajnos a ydiff tartomány elérése még mindig 
megoldatlan.

Üdv.
               Németh Tibor



More information about the Elektro mailing list