Stránka 1 z 1

Korelace pole, VBA - Excel 2007

Napsal: 13 říj 2010 08:15
od vonv
Prosím o pomoc s tímto v Excel 2007, makro ve VBA:

Mám trojrozměrné pole z tabulek: data(x,y,z):
- x: akcie třeba 100 položek
- y: datum 5.000 řádků
- z: O,H,L,C ceny, volume atd. 7 sloupců

Potřebuji určit korelace průběhů Close cen (tedy vždy dat z jednoho sloupce) všech akcií vzájemně (každý s každým) a to pouze za požadované období, které se může měnit dle zadání.

Teď to pomocí VBA dělám tak, že ceny (vždy jen jednu cenu: Close) z pole vypíšu do listu a pak makrem vkládám do korelační tabulky vzorce, které mi pro vypsaná data spočítají korelace. To má nevýhodu v dlouhé době trvání výpisu vzorců na list.

Vzorec pro korelaci přímo jako funkci VBA jsem nenašel. Když jsem našel způsob jak použít funkci z listu v kódu VBA, tak mě nenapadá, jak do vzorce, kam se zadává oblast dat, zapsat požadovanou část pole.

Lze spočítat korelace přímo pomocí pole bez výpisu vzorců na list a pak vypsat jen výsledky také z (výsledkového) pole? Myslím, že by to mohlo být celkem rychlejší a ušetří mi to další list s jinak zbytečnými daty v sešitu.

Díky.

Re: Korelace pole, VBA - Excel 2007

Napsal: 13 říj 2010 09:35
od navstevnik
Konstrukce je nasledujici (priklad):

Kód: Vybrat vše

Dim SumBlk1 As Range, SumBlk2 As Range, SumBlk3 As Range
' aktivni list
Set SumBlk1 = ActiveSheet.Range("a1:a5")
' list3
Set SumBlk2 = Worksheets("list3").Range("b1:b5")
' sumblk je nazev (pojmenovana oblast) na nekterem listu - napr.: list3!C1:C5
Set SumBlk3 = Range("sumblk")
Debug.Print WorksheetFunction.Sum(SumBlk1, SumBlk2, SumBlk3)

Re: Korelace pole, VBA - Excel 2007

Napsal: 13 říj 2010 10:17
od vonv
Díky.
Zhruba takhle jsem uvažoval taky, respektive jsem už našel podobný kód.

Ještě doplňující otázka:
Jelikož popsaný kód pracuje s jednorozměrnými poli a já s trojrozměrným polem, lze to nějak vyřešit přímo s trojrozměrným polem abych nemusel plnit jenorozměrná pole?

To už je ale opravdu jenom vedlejší otázka, naplnit jednorozměrné pole nepředstavuje problém a chod kódu by to nemělo zdržovat.

Re: Korelace pole, VBA - Excel 2007

Napsal: 13 říj 2010 14:55
od navstevnik
To je trochu obecna otazka.
Jednotlive rozmery pole budes muset nacist ve smyckach, neco na tento zpusob:
Sub PrevodOblastiDo2DPole()
Dim Pole1()
Dim Pole2()
Dim m
Dim n
Pole1 = Selection
m = Selection.Rows.Count
n = Selection.Columns.Count
ReDim Pole2(1 To m, 1 To n)
For i = 1 To m
For j = 1 To n
Pole2(i, j) = Selection.Cells(i, j)
Next j
Next i
End Sub

Re: Korelace pole, VBA - Excel 2007

Napsal: 13 říj 2010 15:17
od vonv
... asi si nerozumíme :smile: ale i tak děkuju.

Ta poslední otázka byla o tom, že já mám třírozměrné pole plné dat a z těchto dat chci spočítat korelace pomocí WorksheetFunction.

... a jde mi to , jestli je nějaký způsob, kdy WorksheetFunction.Correl pracuje přímo s tím trojrozměrným polem. Prostě jsem jen zvědavý, jestli musím data nejprve přelít do jendorozměrných polí nebo jestli lze nějak pracovat pouze s tím trojrozměrným polem, kde už data jsou.

Podotýkám, že data jsou pouze v poli - kam jsem je načetl z internetového zdroje a nejsou tedy na listu.

Re: Korelace pole, VBA - Excel 2007

Napsal: 13 říj 2010 15:26
od navstevnik
Prechozi dotaz jsem prilis hluboce nezkoumal, pro ta odpoved.
Na dalsi dotaz odpovim otazkou, umi funkce listu Correl pracovat s vicerozmernym polem?

Re: Korelace pole, VBA - Excel 2007

Napsal: 13 říj 2010 15:37
od vonv
já vím, že neumí :smile:

ale jako ouplnej amatér se zajímám, jak zkrátit kód a případně jak to pořešit elegantně. Nevím, jestli není nějaký způsob jak v trojrozměrném poli definovat určenou množinu dat právě pro zmiňovanou funkci. :smile:

Re: Korelace pole, VBA - Excel 2007

Napsal: 13 říj 2010 17:09
od navstevnik
Doba, kdy bylo nutno z duvodu vykonu procesoru a kapacity pameti vymyslet usporna reseni jsou jiz minulosti.
Program by mel byt citelny a umoznovat pripadne pozdeji upravy, aniz by bylo nutno pracne lustit, jak program pracuje. A i autor po nejake dobe u slozitejsich konstrukci nevericne zira, co napsal.
Takze prehledne a logicky byt sloziteji, vyplati se to.
Mas-li zajem, precti si zde: http://www.excelvba.estranky.cz/clanky/ ... iky-navody - Úvaha nad úvahou a Úvaha - zápis programového kódu

Re: Korelace pole, VBA - Excel 2007  Vyřešeno

Napsal: 13 říj 2010 17:36
od vonv
Jo jo.. přehlednosti rozumím, proto jsem zvědavý jak to dělat elegantně, což zpravidla znamená i přehledně. :smile:

Zatím děkuju za pomoc.