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

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

Uživatelský avatar
vonv
Level 1
Level 1
Příspěvky: 93
Registrován: leden 08
Pohlaví: Nespecifikováno
Stav:
Offline

Korelace pole, VBA - Excel 2007

Příspěvekod vonv » 13 říj 2010 08:15

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.
diky všem za rady

Reklama
navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: srpen 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Korelace pole, VBA - Excel 2007

Příspěvekod navstevnik » 13 říj 2010 09:35

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)

Uživatelský avatar
vonv
Level 1
Level 1
Příspěvky: 93
Registrován: leden 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Korelace pole, VBA - Excel 2007

Příspěvekod vonv » 13 říj 2010 10:17

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.
diky všem za rady

navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: srpen 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Korelace pole, VBA - Excel 2007

Příspěvekod navstevnik » 13 říj 2010 14:55

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

Uživatelský avatar
vonv
Level 1
Level 1
Příspěvky: 93
Registrován: leden 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Korelace pole, VBA - Excel 2007

Příspěvekod vonv » 13 říj 2010 15:17

... 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.
diky všem za rady

navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: srpen 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Korelace pole, VBA - Excel 2007

Příspěvekod navstevnik » 13 říj 2010 15:26

Prechozi dotaz jsem prilis hluboce nezkoumal, pro ta odpoved.
Na dalsi dotaz odpovim otazkou, umi funkce listu Correl pracovat s vicerozmernym polem?

Uživatelský avatar
vonv
Level 1
Level 1
Příspěvky: 93
Registrován: leden 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Korelace pole, VBA - Excel 2007

Příspěvekod vonv » 13 říj 2010 15:37

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:
diky všem za rady

navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: srpen 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Korelace pole, VBA - Excel 2007

Příspěvekod navstevnik » 13 říj 2010 17:09

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

Uživatelský avatar
vonv
Level 1
Level 1
Příspěvky: 93
Registrován: leden 08
Pohlaví: Nespecifikováno
Stav:
Offline

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

Příspěvekod vonv » 13 říj 2010 17:36

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.
diky všem za rady


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Word 2007: Jak zrušit prázdné řádky na každé stránce mezi čarou a poznámkami?
    od Jirka0508 » 29 pro 2023 00:30 » v Windows 11, 10, 8...
    1
    854
    od mmmartin Zobrazit poslední příspěvek
    29 pro 2023 13:00
  • Excel a OneDrive
    od sginfo » 11 zář 2023 15:28 » v Kancelářské balíky
    16
    6538
    od mirekol Zobrazit poslední příspěvek
    20 říj 2023 08:31
  • Excel komparacedvou soborů Příloha(y)
    od teichmann.ondrej » 15 dub 2024 17:26 » v Kancelářské balíky
    11
    3416
    od teichmann.ondrej Zobrazit poslední příspěvek
    22 dub 2024 15:45
  • excel-posun makra
    od actionboy » 12 bře 2024 18:59 » v Kancelářské balíky
    1
    531
    od Grimm Zobrazit poslední příspěvek
    12 bře 2024 21:43
  • Excel - funkce když
    od Martyn20 » 13 črc 2023 11:56 » v Kancelářské balíky
    5
    2669
    od mmmartin Zobrazit poslední příspěvek
    13 črc 2023 18:44

Zpět na “Kancelářské balíky”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 24 hostů