Psani funkci ve VBA Excel (vyřešeno)

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

Moderátor: Mods_senior

cukista
Level 1
Level 1
Příspěvky: 51
Registrován: srpen 05
Pohlaví: Nespecifikováno
Stav:
Offline

Psani funkci ve VBA Excel (vyřešeno)

Příspěvekod cukista » 18 říj 2005 15:38

Pisu si funkci ve VBA pro Excel a chci, aby jejim vystupem byl typ Range, tj. aby vysledkem funkce byl seznam nejakych hodnot, kde prvni hodnota se vypise na miste funkce a dalsi se vypisou podle potreby dolu a doprava... Nemate nekdo nejakou myslenku, jak toho docilit

Reklama
miras
Tvůrce článků
Level 5
Level 5
Příspěvky: 2159
Registrován: červenec 04
Pohlaví: Nespecifikováno
Stav:
Offline

Příspěvekod miras » 18 říj 2005 20:41

Ty jo, asi by to chtělo bejt krapet konkrétnější. Vymyslet se nechá prakticky cokoliv, ale z tohohle popisu můžu snadno vytvořit něco diametrálně odlišnýho než co bys potřeboval :wink:
Ideální by byl konkrétní příklad :idea:

Uživatelský avatar
mikel
Level 5
Level 5
Příspěvky: 2298
Registrován: květen 05
Bydliště: Karviná
Pohlaví: Muž
Stav:
Offline

Re: Psani funkci ve VBA Excel

Příspěvekod mikel » 19 říj 2005 09:56

cukista píše:Pisu si funkci ve VBA pro Excel a chci, aby jejim vystupem byl typ Range, tj. aby vysledkem funkce byl seznam nejakych hodnot, ...

Už tady si odporuješ. Nejdříve chceš, aby vystupem funkce byla nějaká oblast a hned nato to má být nějaké pole čísel. Jen pro upřesnění, výstupem funkce nemůže být objekt (Range), ale nějaká hodnota/řetězec nebo pole hodnot/řetězců. Takže nejlepší bude, když napíšeš příklad čeho chceš touto funkcí docílit a pak můžeme poradit.
Znáte pravidla?
Tipy a triky ve Windows XP
Návody: HijackThis, MWAV, CCleaner (THX to mijaja)
Problémy, které chcete vyřešit pište sem do fóra. Neposílejte je emailem ani po ICQ!

cukista
Level 1
Level 1
Příspěvky: 51
Registrován: srpen 05
Pohlaví: Nespecifikováno
Stav:
Offline

Příspěvekod cukista » 19 říj 2005 13:39

no ja mam celkem jasno, co potrebuju (pripominka k tomu, ze bych si odporoval)... Chci, aby moje funkce vracela 3 hodnoty (at se to jmenuje pole nebo mne napadlo typ Range, je to v tomto pripade nepodstatne) a to tak, ze prvni hodnota bude v bunce, ktera obsahuje funkci a dalsi dve hodnoty budou v bunkach pod ni... Treba by to slo primym zapisem do bunek pod funkci, ale jaksi jsem neprisel na to, jak zjistit, ve ktere bunce se funkce nachazi (abych pak mohl psat primo do nasledujici bunky). Druha moznost mne napadla pomoci "Tabulky", kdy jsou funkce nejak spojene (pak se ukazuji ve slozenych zavorkach), ale to teda uz vubec nevim, jak to resit... Hlavne ta druha moznost mi prijde cistejsi a funkce, ktere vraceji vice hodnot uz jsem videl v provozu - ale jak to naprogramovat???

cukista
Level 1
Level 1
Příspěvky: 51
Registrován: srpen 05
Pohlaví: Nespecifikováno
Stav:
Offline

Příspěvekod cukista » 19 říj 2005 13:44

... jo a konkretni priklad... tak treba bude funkce, ktera scita 2 parametry a jako vystup budou ty dva parametry + soucet - v bunkach pod sebou...
(ja sice resim neco slozitejsiho, ale princip je naprosto totozny)

Uživatelský avatar
mikel
Level 5
Level 5
Příspěvky: 2298
Registrován: květen 05
Bydliště: Karviná
Pohlaví: Muž
Stav:
Offline

Příspěvekod mikel » 20 říj 2005 08:51

Nepochybuju, že máš jasno v tom, co chceš, ale je třeba to sdělit i ostatním, co možná nejpřesněji.
Problém funkce je ten, že dost dobře neumí pracovat s buňkou, takže pouze vypíše výsledek do buňky, kde zadáš vzorec. Tohle by dokázala vyřešit procedura, ale tu nemůžeš použít jako vzorec přímo v Excelu. Takže zbývá jediné řešení, a to použít funkci ve formátu maticového vzorce - vybereš buňky, ve kterých má být výsledek funkce, napíšeš vzorec (aniž bys zrušil označenou oblast), jenže neukončíš zadání Enterem, ale Ctrl+Shift+Enter. Tak vznikne zápis funkce ve složených závorkách, jak ses zmínil, a výsledek se zapíše do všech označených buněk. Má to ovšem malý nedostatek - všechny vzorce jsou části matice, takže nemůžeš vymazat jenom část z nich, ale pouze všechny najednou. Mělo by to platit snad pro všechny standardní funkce, tak si to můžeš zkusit např. s =SUMA(x:y).
A teď k tvému konkrétnímu příkladu. Tady je zápis funkce na součet libovolného počtu čísel ve vybrané oblasti.
Obrázek
Napsal jsem to tak, že sečte čísla i v oblasti, kde jsou nějaké text.řetězce (viz příklad).
Obrázek
Jak můžeš vidět, výsledkem funkce je pole čísel, kde první hodnota je suma a další jsou sčítané položky. Když ji napíšeš do samostatné buňky, vypíše pouze sumu. Když ji zadáš jako maticový vzorec, vypíše sumu a položky podle toho, jak velkou oblast zápisu vybereš (všechny tvary funkce v příkladu jsou stejné, liší se jen velikostí vybrané oblasti pro zápis funkce).
Znáte pravidla?
Tipy a triky ve Windows XP
Návody: HijackThis, MWAV, CCleaner (THX to mijaja)
Problémy, které chcete vyřešit pište sem do fóra. Neposílejte je emailem ani po ICQ!

cukista
Level 1
Level 1
Příspěvky: 51
Registrován: srpen 05
Pohlaví: Nespecifikováno
Stav:
Offline

Příspěvekod cukista » 20 říj 2005 09:21

Je to super, dik moc... Ja jsem teda jak jsem zvykly prosmejdil help i predtim, kdyz jsem poradne nevedel co hledat a i ted, abych se dozvedel neco o Application.Transpose, ale nenasel jsem vubec nic...
R.

Uživatelský avatar
mikel
Level 5
Level 5
Příspěvky: 2298
Registrován: květen 05
Bydliště: Karviná
Pohlaví: Muž
Stav:
Offline

Příspěvekod mikel » 20 říj 2005 09:27

Pokud je výstupem funkce pole, tak standardní výpis je na řádek. Pokud chceš výstup do sloupce, musíš ho transponovat = Application.Transpose
Znáte pravidla?
Tipy a triky ve Windows XP
Návody: HijackThis, MWAV, CCleaner (THX to mijaja)
Problémy, které chcete vyřešit pište sem do fóra. Neposílejte je emailem ani po ICQ!

cukista
Level 1
Level 1
Příspěvky: 51
Registrován: srpen 05
Pohlaví: Nespecifikováno
Stav:
Offline

Příspěvekod cukista » 20 říj 2005 10:06

Aha, tak pak ta myslenka, ktera by mne asi nikdy nenapadla je, ze i kdyz nenadefinujes typ vystupu funkce v hlavicce, muzes presto hodnotu priradit a dokonce to muze byt i pole.... No zas jsem o neco chytrejsi... Dik jeste jednou.

Uživatelský avatar
mikel
Level 5
Level 5
Příspěvky: 2298
Registrován: květen 05
Bydliště: Karviná
Pohlaví: Muž
Stav:
Offline

Příspěvekod mikel » 20 říj 2005 12:41

To souvisí s defaultním nastavením pro funkci a to je datový typ Variant.
Když má být výstupem pole musí to být Variant, to znamená že to je úplně stejné, jako kdybych napsal:

Function FUNKCE(Oblast As Range) As Variant
Znáte pravidla?
Tipy a triky ve Windows XP
Návody: HijackThis, MWAV, CCleaner (THX to mijaja)
Problémy, které chcete vyřešit pište sem do fóra. Neposílejte je emailem ani po ICQ!


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Kopírování řádků s funkcí když Příloha(y)
    od Martyn20 » 20 črc 2023 16:50 » v Kancelářské balíky
    3
    1974
    od Melvidor Zobrazit poslední příspěvek
    21 črc 2023 08:41
  • Wi-Fi router pro dům s možností funkcí Mesh Příloha(y)
    od P1X3L » 05 bře 2024 20:12 » v Sítě - hardware
    42
    5554
    od ITCrowd Zobrazit poslední příspěvek
    19 dub 2024 22:21
  • Excel a OneDrive
    od sginfo » 11 zář 2023 15:28 » v Kancelářské balíky
    16
    6327
    od mirekol Zobrazit poslední příspěvek
    20 říj 2023 08:31
  • Excel - funkce když
    od Martyn20 » 13 črc 2023 11:56 » v Kancelářské balíky
    5
    2578
    od mmmartin Zobrazit poslední příspěvek
    13 črc 2023 18:44
  • Excel - vlastní formát Příloha(y)
    od Story-Long » 11 srp 2023 14:50 » v Kancelářské balíky
    3
    2018
    od Story-Long Zobrazit poslední příspěvek
    14 srp 2023 10:11

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

Kdo je online

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