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

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

Moderátor: Mods_senior

Odpovědět
cukista
Level 1
Level 1
Příspěvky: 51
Registrován: 26 srp 2005 15:40

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

Příspěvek od cukista »

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
miras
Tvůrce článků
Příspěvky: 2159
Registrován: 13 črc 2004 11:45

Příspěvek od miras »

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: 03 kvě 2005 17:25
Bydliště: Karviná

Re: Psani funkci ve VBA Excel

Příspěvek od mikel »

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: 26 srp 2005 15:40

Příspěvek od cukista »

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: 26 srp 2005 15:40

Příspěvek od cukista »

... 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: 03 kvě 2005 17:25
Bydliště: Karviná

Příspěvek od mikel »

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: 26 srp 2005 15:40

Příspěvek od cukista »

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: 03 kvě 2005 17:25
Bydliště: Karviná

Příspěvek od mikel »

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: 26 srp 2005 15:40

Příspěvek od cukista »

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: 03 kvě 2005 17:25
Bydliště: Karviná

Příspěvek od mikel »

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!
Odpovědět
  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Přechod z Excel 21 na Excel 24
    od Snekment » » v Kancelářské balíky
    2 Odpovědi
    14436 Zobrazení
    Poslední příspěvek od Snekment
  • Pohoda a excel
    od brownwld » » v Kancelářské balíky
    1 Odpovědi
    7365 Zobrazení
    Poslední příspěvek od atari
  • Excel 2016 - vzorec kombinace podmínek
    od MK_Vs » » v Kancelářské balíky
    5 Odpovědi
    6161 Zobrazení
    Poslední příspěvek od lubo.
  • Tisk sloupců vedle sebe na A4 - Excel
    od atari » » v Kancelářské balíky
    5 Odpovědi
    5932 Zobrazení
    Poslední příspěvek od atari

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