Dobrý večer,
tvořím si excelovský sešit na automotické zpracování dat a nemohu se pohnout, protože neovládám makra.
Sešit, který je ke stáhnutí zde http://leteckaposta.cz/412336316 obsahuje list KIN, na kterém jsem zabarvil 3 důležité sloupečky o které mi jde. Hodnoty ve žlutých sloupcích potřebuji pomocí makra nakopírovat na list Kinetic do zažlucených spoupců. Problém je, že ty hodnoty potřebuju rozdělit podle čísla, které je uvedeno v zeleném sloupci.
Tzn. všechny hodnoty ze žlutých sloupců na listě KIN kterým přísluší hodnota "0" (zelený sloupec) potřebuji nakopírovat na list Kinetic do žlutých sloupců C a E. Dále "jedničky " nakopírovat do žlutých slopuců AM a AO a tak dále. To samé udělat pro zbývající hodnoty (v tomto případě až do 12). Toto je jen příklad souborů kterých mám spoustu a nemusí končit u čísla 12, ale třeba 20 - maximum ale nedokážu odhadnout. Nicméně struktura listu KIN je vždy stejná - vždy se ale různí počet řádků.
Moc Vám děkuji za konkrétní makro.
Hezký večer.
Excel - Makro ke zkopírování daných dodnot z listu na list
-
- Level 3
- Příspěvky: 452
- Registrován: leden 12
- Bydliště: Země, bohužel...
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: Excel - Makro ke zkopírování daných dodnot z listu na li
Zdravím,
makrem by to šlo taky, ale můžu nabídnout už hotovou jednoduchou funkci (vzorec) který najde ty správné hodnoty.
Funkci nakopírujte do klasického modulu jako makro a do buněk kam potřebujete hodnoty zapište vzorec.
příklad vzorce pro vzorový sešit a buňku:
do C38: =NajdiVice(0;KIN!$A$97:$AL$2762;10;1;B38)
do E38: =NajdiVice(0;KIN!$A$97:$AL$2762;10;36;B38)
Pro bližší info si stačí označit buňku se vzorcem a kliknout na tlačítko fx v "Řádku vzorců".
makrem by to šlo taky, ale můžu nabídnout už hotovou jednoduchou funkci (vzorec) který najde ty správné hodnoty.
Kód: Vybrat vše
Function NajdiVice(Hledat As Variant, Oblast As Range, prohledat_sloupek As Integer, vzit_sloupek As Integer, poradi As Integer) As Variant
'funkce na vyhledání položky v zadaném sloupci a v zadaném pořadí
Dim a As Long, x As Integer
x = 1
With Oblast
For a = 1 To .Rows.Count
If .Cells(a, prohledat_sloupek) = Hledat Then
If x = poradi Then
NajdiVice = .Cells(a, vzit_sloupek)
Exit Function
Else
x = x + 1
End If
End If
Next
End With
NajdiVice = CVErr(xlErrNA)
End Function
Funkci nakopírujte do klasického modulu jako makro a do buněk kam potřebujete hodnoty zapište vzorec.
příklad vzorce pro vzorový sešit a buňku:
do C38: =NajdiVice(0;KIN!$A$97:$AL$2762;10;1;B38)
do E38: =NajdiVice(0;KIN!$A$97:$AL$2762;10;36;B38)
Pro bližší info si stačí označit buňku se vzorcem a kliknout na tlačítko fx v "Řádku vzorců".
Naposledy upravil(a) Azuzula dne 25 úno 2014 22:45, celkem upraveno 1 x.
Pokud je to vše.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.
Re: Excel - Makro ke zkopírování daných dodnot z listu na li
Dobrý večer, děkuji moc za reakci.
Zatím si myslím, že je to perfektní - jen nedá se to udělat tak, aby na tom listě Kinetic místo těch nulových hodnot na konci (které vlastně nesplňují zadanou podmínku) bylo třeba =NEDEF()?
Vím, že se to dá udělat pomocí funkce KDYŽ - ale těch hodnot bude v sešitě spousta, tak chci raději ty vzorce co nejvíce zefektivnit. Tím se chci teda optat, jestli to NEDEF() nelze zaimplementovat do toho modulu (?).
Moc děkuji a omlouvám se za svůj amaterismus.
Zatím si myslím, že je to perfektní - jen nedá se to udělat tak, aby na tom listě Kinetic místo těch nulových hodnot na konci (které vlastně nesplňují zadanou podmínku) bylo třeba =NEDEF()?
Vím, že se to dá udělat pomocí funkce KDYŽ - ale těch hodnot bude v sešitě spousta, tak chci raději ty vzorce co nejvíce zefektivnit. Tím se chci teda optat, jestli to NEDEF() nelze zaimplementovat do toho modulu (?).
Moc děkuji a omlouvám se za svůj amaterismus.
-
- Level 3
- Příspěvky: 452
- Registrován: leden 12
- Bydliště: Země, bohužel...
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: Excel - Makro ke zkopírování daných dodnot z listu na li
Ano, jde to. Na možné chyby a jejich zobrazení jsem zapoměla.
Na konec funkce přidejte řádek s:
Doplněno i v předchozím příspěvku.
Na konec funkce přidejte řádek s:
Kód: Vybrat vše
NajdiVice = CVErr(xlErrNA)
Doplněno i v předchozím příspěvku.
Pokud je to vše.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.
Re: Excel - Makro ke zkopírování daných dodnot z listu na li
Výborné - moc Vám děkuji!
PS: A proč se ty "chyby" zobrazují u všech čísel tak jak mají, ale pro nulu to nefunguje?
PS: A proč se ty "chyby" zobrazují u všech čísel tak jak mají, ale pro nulu to nefunguje?
-
- Level 3
- Příspěvky: 452
- Registrován: leden 12
- Bydliště: Země, bohužel...
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: Excel - Makro ke zkopírování daných dodnot z listu na li
Teď nevím jaké nuly myslíte. Nuly ve zdroji kde se hledá, nebo ty co funkce vracela na konci sloupečku když nenašla shodu podle zadání?
Pokud je to vše.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.
Re: Excel - Makro ke zkopírování daných dodnot z listu na li
Mám namysli nulu ve zdroji kde se hledá:
=NajdiVice(0;KIN!$A$97:$AL$2762;10;1;B38)
stále se tam na konci sloupečku objevují nulové hodnoty když se nenalezne shoda (viz obrázek).
Od jedničky už to funguje:
=NajdiVice(1;KIN!$A$97:$AL$2762;10;1;B38)
=NajdiVice(2;KIN!$A$97:$AL$2762;10;1;B38)
=NajdiVice(3;KIN!$A$97:$AL$2762;10;1;B38)
...
Děkuji za Váš čas
=NajdiVice(0;KIN!$A$97:$AL$2762;10;1;B38)
stále se tam na konci sloupečku objevují nulové hodnoty když se nenalezne shoda (viz obrázek).
Od jedničky už to funguje:
=NajdiVice(1;KIN!$A$97:$AL$2762;10;1;B38)
=NajdiVice(2;KIN!$A$97:$AL$2762;10;1;B38)
=NajdiVice(3;KIN!$A$97:$AL$2762;10;1;B38)
...
Děkuji za Váš čas
-
- Level 3
- Příspěvky: 452
- Registrován: leden 12
- Bydliště: Země, bohužel...
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: Excel - Makro ke zkopírování daných dodnot z listu na li
Testováno v Excelu 2007 a 2010. Nikoho s verzí 2013 neznám abych to otestovala, takže netuším v čem je problém.
Jedině někdo s vaší verzí excelu kdo by se na to podíval. Tady už asi víc nezmůžu.
Jedině někdo s vaší verzí excelu kdo by se na to podíval. Tady už asi víc nezmůžu.
Pokud je to vše.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.
Re: Excel - Makro ke zkopírování daných dodnot z listu na li
Já už vím - zkuste si číslo 2762 změnit na na nějaké vyšší, třeba 10000 (viz dole). Jak jsem totiž psal, počet řádků může být (silně) odlišný v každém záznamu - tak jsem si to do budoucna pojistil takto vysokou hodnotou
=NajdiVice(;KIN!$A$97:$AL$2762;10;1;B38)
==>
=NajdiVice(;KIN!$A$97:$AL$10000;10;1;B38)
=NajdiVice(;KIN!$A$97:$AL$2762;10;1;B38)
==>
=NajdiVice(;KIN!$A$97:$AL$10000;10;1;B38)
-
- Level 3
- Příspěvky: 452
- Registrován: leden 12
- Bydliště: Země, bohužel...
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: Excel - Makro ke zkopírování daných dodnot z listu na li
Aha, už to chápu, nula je stejná jako prázdná buňka proto po zvětšení oblasti to vyhazovalo nuly. Jasné.
Spíš než zvětšování oblasti na tvrdo, bych použila následující vzorce pro dynamický výpočet řádků oblasti dat. Rychlostně to bude možná pomalejší než původně pevně definovaná oblast KIN!$A$97:$AL$2762, ale takhle se bude zvětšovat a zmenšovat podle množství řádků vstupu a zároveň bude rychlejší než prohledávání všech 10tis řádků.
buňka C38: =NajdiVice(0;POSUN(KIN!$A$97;0;0;POČET(KIN!J:J);36);10;1;B38)
buňka E38: =NajdiVice(0;POSUN(KIN!$A$97;0;0;POČET(KIN!J:J);36);10;36;B38)
Spíš než zvětšování oblasti na tvrdo, bych použila následující vzorce pro dynamický výpočet řádků oblasti dat. Rychlostně to bude možná pomalejší než původně pevně definovaná oblast KIN!$A$97:$AL$2762, ale takhle se bude zvětšovat a zmenšovat podle množství řádků vstupu a zároveň bude rychlejší než prohledávání všech 10tis řádků.
buňka C38: =NajdiVice(0;POSUN(KIN!$A$97;0;0;POČET(KIN!J:J);36);10;1;B38)
buňka E38: =NajdiVice(0;POSUN(KIN!$A$97;0;0;POČET(KIN!J:J);36);10;36;B38)
Pokud je to vše.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.
-
- Mohlo by vás zajímat
- Odpovědi
- Zobrazení
- Poslední příspěvek
-
-
Excel - filtr hyperlinku na druhý list Příloha(y)
od mikiracan » 06 čer 2023 11:49 » v Kancelářské balíky - 2
- 2756
-
od mikiracan
Zobrazit poslední příspěvek
18 srp 2023 10:17
-
-
-
Excel - automatický export listů xls do pdf včetně pojmenování Příloha(y)
od kalosek » 28 čer 2023 20:31 » v Kancelářské balíky - 2
- 2204
-
od kalosek
Zobrazit poslední příspěvek
29 čer 2023 19:39
-
-
- 9
- 1261
-
od mmmartin
Zobrazit poslední příspěvek
29 srp 2023 16:47
-
- 16
- 6760
-
od mirekol
Zobrazit poslední příspěvek
20 říj 2023 08:31
-
- 1
- 664
-
od Grimm
Zobrazit poslední příspěvek
12 bře 2024 21:43
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 5 hostů