Mi lehet a gond a VBA geometriai átlag kódommal? (Nem kezel oszlopvektort)
A kódom az alábbi:
Function geometriai(a)
Dim s As Single
n = a.Count
s = 0
For i = 1 To n
s = s + Log(a(i))
Next i
f = Exp(s)
geometriai = f ^ (1 / n)
End Function
valamiért csak sorvektort tud lekezelni, oszlopvektort nem. Nekem pedig pont oszlopvektor geometriai átlaga kellene.
Kérdés, hogy mit csináljak vele, hogy kezeljen oszlopvektort is?
Programozásban nincs olyan hogy sor illetve oszlopvektor. Matematikában van, és ha transzponálod az oszlopvektort akkor sorvektor lesz belőle. Programozásban tömb van. Értékek sorozata. Ha a függvényed nem kezel egy máik struktúrát mint amire tervezték, akkor az nem a függvény hibája, hanem azé aki meghívta a függvényt rosszul strukturált adattal. Alakítsd előtte olyanná a vektorod amit kezel a függvényed. Ehhez írnod kell egy transzponáló függvényt.
Vagy írd le hogy mit kap paraméterül a függvényed és akkor többet tudunk segíteni. Egy multidimenziós tömböt azaz egy mátrixot? Akkor a legtisztább ha két egymásba ágyazott ciklussal végigmész az elemein, függetlenül attól hogy csak 1xn vagy nx1-es lehet.
Van 1000 darab részvény árfolyamom (S(t)) a B1:B1001, aztán ebből megcsináltam a napi loghozamokat (ln(S(t+1)/S(t)) a C1:C1001 tartományba. Ezeknek kellene a mértani átlaga, mondjuk a D1 cellába.
Hogyan módosítsam a fenti kódot, hogy azt csinálja az excel amit én szeretnék?
A beillesztett kód működik, ha például az A1:J1 tartományba beírom a számokat 1-től 10-ig, ezért gondoltam, hogy valamiért még sem tud oszlopvektorban gondolkodni.
Function geometriai(a)
m = a.Rows.Count
n = a.Columns.Count
s = a(1, 1)
For i = 1 To m
For j = 1 To n
s = s * a(i, j)
Next j
Next i
geometriai = s ^ (1 / (m * n))
End Function
ez a végleges kód. Most már csak egy kérdésem van, hogy miért nem tud kb. 150-nél több cellát lekezelni a függvényem?
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!