< návrat zpět

MS Excel


Téma: Svyhledat pomoci makra rss

Zaslal/a 8.2.2017 13:09

Zdravím všechny,
Mam takový menší problém, nahrál jsem makrorekoderem makro, kde jsem použil funkce:
IF
ISERROR
VLOOKUP
makro funguje a děla co má, a to:
po zmáčknutí tlačítka z makrem, se do určitých buněk se doplní vzorec
=IF(ISERROR(VLOOKUP……..
(Kde jsou zadané podmínky kde se má hledat data, podstatě z jednoho listu („výrobek“) vyhledá údaje a přidá do druhého listu („data“) požadované údaje podle zadaných parametru), ale bohužel to hodně zpomaluje samotný chod makra. Chtěl jsem se zeptat dalo se by nějak přepsat makro, aby se to zrychlilo, nebo nasměrovat na nějaké stránky kde by se dalo najit řešení. Ve VBA jsem začátečník, tak budu rad za každou pomoc.
Předem dekuji za odpověď. Níže je ukázka kódu makra.

kod:

Sub prida_data_do_bunek()
'
' prida_data_do_bunek Makro
' prida pozadovana data do vybranych bunek pomoci funkci SVYHLEDAT
'

'
ActiveCell.Offset(1, -1).Range("A1").Select
ActiveCell.FormulaR1C1 = "=R[-1]C"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "=R[-2]C"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "=R[-3]C"
ActiveCell.Offset(-3, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC[-1],vyrobek!R2C1:R10000C26,2,FALSE)),""no data"",VLOOKUP(RC[-1],vyrobek!R2C1:R10000C26,2,FALSE))"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(R[-1]C[-1],vyrobek!R2C1:R10000C26,3,FALSE)),""no data"",VLOOKUP(R[-1]C[-1],vyrobek!R2C1:R10000C26,3,FALSE))"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(R[-2]C[-1],vyrobek!R2C1:R10000C26,4,FALSE)),""no data"",VLOOKUP(R[-2]C[-1],vyrobek!R2C1:R10000C26,4,FALSE))"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(R[-3]C[-1],vyrobek!R2C1:R10000C26,5,FALSE)),""no data"",VLOOKUP(R[-3]C[-1],vyrobek!R2C1:R10000C26,5,FALSE))"
ActiveCell.Offset(-3, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC[-2],vyrobek!R2C1:R10000C26,6,FALSE)),""no data"",VLOOKUP(RC[-2],vyrobek!R2C1:R10000C26,6,FALSE))"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(R[-1]C[-2],vyrobek!R2C1:R10000C26,7,FALSE)),""no data"",VLOOKUP(R[-1]C[-2],vyrobek!R2C1:R10000C26,7,FALSE))"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(R[-2]C[-2],vyrobek!R2C1:R10000C26,8,FALSE)),""no data"",VLOOKUP(R[-2]C[-2],vyrobek!R2C1:R10000C26,8,FALSE))"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(R[-3]C[-2],vyrobek!R2C1:R10000C26,9,FALSE)),""no data"",VLOOKUP(R[-3]C[-2],vyrobek!R2C1:R10000C26,9,FALSE))"
ActiveCell.Offset(-3, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC[-3],vyrobek!R2C1:R10000C26,10,FALSE)),""no data"",VLOOKUP(RC[-3],vyrobek!R2C1:R10000C26,10,FALSE))"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(R[-1]C[-3],vyrobek!R2C1:R10000C26,11,FALSE)),""no data"",VLOOKUP(R[-1]C[-3],vyrobek!R2C1:R10000C26,11,FALSE))"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(R[-2]C[-3],vyrobek!R2C1:R10000C26,12,FALSE)),""no data"",VLOOKUP(R[-2]C[-3],vyrobek!R2C1:R10000C26,12,FALSE))"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(R[-3]C[-3],vyrobek!R2C1:R10000C26,13,FALSE)),""no data"",VLOOKUP(R[-3]C[-3],vyrobek!R2C1:R10000C26,13,FALSE))"
ActiveCell.Offset(-3, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC[-4],vyrobek!R2C1:R10000C26,14,FALSE)),""no data"",VLOOKUP(RC[-4],vyrobek!R2C1:R10000C26,14,FALSE))"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(R[-1]C[-4],vyrobek!R2C1:R10000C26,14,FALSE)),""no data"",VLOOKUP(R[-1]C[-4],vyrobek!R2C1:R10000C26,14,FALSE))"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(R[-2]C[-4],vyrobek!R2C1:R10000C26,14,FALSE)),""no data"",VLOOKUP(R[-2]C[-4],vyrobek!R2C1:R10000C26,14,FALSE))"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(R[-3]C[-4],vyrobek!R2C1:R10000C26,14,FALSE)),""no data"",VLOOKUP(R[-3]C[-4],vyrobek!R2C1:R10000C26,14,FALSE))"
ActiveCell.Offset(-3, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC[-5],vyrobek!R2C1:R10000C26,15,FALSE)),""no data"",VLOOKUP(RC[-5],vyrobek!R2C1:R10000C26,15,FALSE))"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(R[-1]C[-5],vyrobek!R2C1:R10000C26,15,FALSE)),""no data"",VLOOKUP(R[-1]C[-5],vyrobek!R2C1:R10000C26,15,FALSE))"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(R[-2]C[-5],vyrobek!R2C1:R10000C26,15,FALSE)),""no data"",VLOOKUP(R[-2]C[-5],vyrobek!R2C1:R10000C26,15,FALSE))"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(R[-3]C[-5],vyrobek!R2C1:R10000C26,15,FALSE)),""no data"",VLOOKUP(R[-3]C[-5],vyrobek!R2C1:R10000C26,15,FALSE))"
ActiveCell.Offset(-3, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC[-6],vyrobek!R2C1:R10000C26,16,FALSE)),""no data"",VLOOKUP(RC[-6],vyrobek!R2C1:R10000C26,16,FALSE))"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(R[-1]C[-6],vyrobek!R2C1:R10000C26,16,FALSE)),""no data"",VLOOKUP(R[-1]C[-6],vyrobek!R2C1:R10000C26,16,FALSE))"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(R[-2]C[-6],vyrobek!R2C1:R10000C26,16,FALSE)),""no data"",VLOOKUP(R[-2]C[-6],vyrobek!R2C1:R10000C26,16,FALSE))"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(R[-3]C[-6],vyrobek!R2C1:R10000C26,16,FALSE)),""no data"",VLOOKUP(R[-3]C[-6],vyrobek!R2C1:R10000C26,16,FALSE))"
ActiveCell.Offset(-3, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC[-7],vyrobek!R2C1:R10000C26,17,FALSE)),""no data"",VLOOKUP(RC[-7],vyrobek!R2C1:R10000C26,17,FALSE))"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(R[-1]C[-7],vyrobek!R2C1:R10000C26,18,FALSE)),""no data"",VLOOKUP(R[-1]C[-7],vyrobek!R2C1:R10000C26,18,FALSE))"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(R[-2]C[-7],vyrobek!R2C1:R10000C26,19,FALSE)),""no data"",VLOOKUP(R[-2]C[-7],vyrobek!R2C1:R10000C26,19,FALSE))"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(R[-3]C[-7],vyrobek!R2C1:R10000C26,20,FALSE)),""no data"",VLOOKUP(R[-3]C[-7],vyrobek!R2C1:R10000C26,20,FALSE))"
ActiveCell.Offset(1, -6).Range("A1").Select
End Sub

Zaslat odpověď >

#034854
avatar
Bez přílohy těžko říct, předpokládám ale, že ti to zpomaluje velké množství dat či vzorců v sešitě.
S každým zápisem vzorce do buňky se totiž provádí znovu přepočet, což při velkém množství dat může velmi zpomalovat. Řešit lze tak, že se na začátku makra vypnou přepočty, a až se zapíšou všechny vzorce, tak se opět přepočty zapnou.
P.

Př.:
'Na začátek makra:
Application.Calculation = xlManual
'Na konec makra:
Application.Calculation = xlAutomatic
citovat
#034855
avatar
Díky, o něco se to makro zrychlilo ale mam obavy že, když ten sešit bude zaplněn spousta datama že se to stejné zpomalí víc. Ještě by se chtěl zeptat, dalo by nějak ošetřit že při nahraní makra aby to vyhodnotilo jestli pod daným číslem se nachází jeden, dva nebo tři výrobky a podle toho se do doplní vzorcem. Do první prázdné buňky ve sloupečku D se napíše číslo a pak se zpustí makro a podle toho čísla se makro rozhodne kolik řádku má doplnit vzorcem.
Příklad:
Když pod číslem 6040113 – je jen jeden výrobek tak se nahraje marko jen pro jeden výrobek – 1 řádek se vzorcem
Pod číslem 6040114 – je dva výrobky, takže by se nahrálo jen dva výrobky a to 2 řádky vzorců.
Ted momentálně mam nastavené tak že se vždycky nahraje 4 přichystané řádky, to co zůstane prázdné tak to vymažu ručně.
Níže přikládám soubor.
Příloha: zip34855_test_vyrobek.zip (44kB, staženo 27x)
citovat
#034857
avatar
A co začít od začátku a autora se nejdřív zeptat, proč vůbec potřebuje vzorce na listu namísto čistě doplněných dat...citovat
#034858
avatar
To by bylo asi nejednoduše, ale jde o to, že ten sešit budou používat víc lidi (doplňovat data), takže je vetší pravděpodobnost že se udělá víc chyb, než se to načte pomoci funkce Svyhledat, zároveň data se budu pak vázat na vypočet jiných tabulek.
Podmínky typu vyrobek1 – 1 řádek, vyrobek2 – 2 řádky, když nebudou fungovat tak se podstatě nic nedej (byl to jen nápad), prázdné buňky se vymažou ručně. Spiš mě jde o to aby to makro pomoci Svyhledat bylo rychle, ale nevím jestli je to vůbec možné, když tam bude kvanta dat …. Ale každopádně děkuji za Vaše reakce.citovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje