Psani funkci ve VBA Excel (vyřešeno)
Psani funkci ve VBA Excel (vyřešeno)
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
Re: Psani funkci ve VBA Excel
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!
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!
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???
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.
Napsal jsem to tak, že sečte čísla i v oblasti, kde jsou nějaké text.řetězce (viz příklad).
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).
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.
Napsal jsem to tak, že sečte čísla i v oblasti, kde jsou nějaké text.řetězce (viz příklad).
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!
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!
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!
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!
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
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!
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
-
- 3
- 1975
-
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
- 5586
-
od ITCrowd
Zobrazit poslední příspěvek
19 dub 2024 22:21
-
-
- 16
- 6329
-
od mirekol
Zobrazit poslední příspěvek
20 říj 2023 08:31
-
- 5
- 2580
-
od mmmartin
Zobrazit poslední příspěvek
13 črc 2023 18:44
-
- 3
- 2020
-
od Story-Long
Zobrazit poslední příspěvek
14 srp 2023 10:11
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 9 hostů