Makra - jak rozkopírovat na nekonečný počet řádků
Prosím o pomoc. Předesílám, že makrům nijak zvlášť nerozumím, takže prosím spíš polopaticky.
Mám soubor, ve kterém může být velké množství řádků (více než 200).
Udělala jsem si makro na úpravu jednoho řádku. Je tam toho více, ale pro zjednodušení řekněmě, že se jedná o řádek 5, ve kterém jsem sloučila buňky B5 a C5.
A potřebovala bych, aby se tato úprava opakovala na všech následujících řádcích až do nekonečna (nebo řekněme třeba do 1000).
(Takže aby se na řádku 6 sloučily buňky B6 a C6, na řádku 7 buňky B7 a C7, atd.)
Jde to nějak udělat? Aniž bych musela to makro tisíckrát změnit a pokaždé v něm všude upravit číslo řádku?
Děkuji za rady!
Jasnovidecky usudzujem ze asi pises o MS excel
http://books.google.de/books?id=JTg7HvmxEKYC&pg=PA 89&lpg=PA89&dq=excel+cykly&source=bl&ots=pSQatA8LM L&sig=jWnjvGqOX8NT0n1FtxsZyMzzF5k&hl=sk&sa=X&ei=KE FpU-eWFqm7yAPll4DIDA&ved=0CGIQ6AEwBQ#v=onepage&q=e xcel%20cykly&f=false
Díky, já jsem si dokonce všimla, že jsem tam ten excel zapomněla uvést, ale pak jsem si řekla, že to z toho tak nějak vyplývá.
Jinak to je přesně to, co jsem hledala, jen je to pro mě španělská vesnice.
Řekněme, že chci tedy upravit kód z výše vymyšleného příkladu:
(Vím, je to ošklivé, šlo by to líp, ale já všechny ty úpravy nahrávala jako záznam makra, takže vypadají takhle.)
Kód chci opakovat, dokud nenarazím na konec tabulky (tedy na prázdnou buňku Bněco).
Prosím, co je tam špatně? Nějak vůbec nejsem schopná to vymyslet.
Tak namiesto
Range("B5:C5").Select
musis pouzit to i a ne 5 (samozrejme neda sa napisat Bi ale musis tam pouzit nejaku funkciu na to)
Range("B6").Select je tam uplne zbytocne by som povedal.
Jakou funkci? Já to vážně neovládám tak dobře. :(
No musíš využít funkce CELLS(<row>,<col>), která odkazuje na buňku pomocí čísla řádku a čísla sloupce (takže to "Cells(B, i)" máš špatně).
Dále funkce RANGE je schopna pracovat nejen s řetězcem ve tvaru "<adresa1:adresa2>", ale i s odkazy na první a poslední buňku v oblasti - tj. RANGE(<odkaz_na_prvni_buňku>, <odkaz_na_posledni_buňku>).
Takže když ty dvě funkce (RANGE a CELLS) zkombinuješ, budeš místo
RANGE("B5:C5")
psát
RANGE(CELLS(i,2), CELLS(i,3))
A testovat budeš samozřejmě CELLS(i,2).
A z celý "vopičárny" With - End With je důležitej ten poslední příkaz (MergeCells = True), vše ostatní můžeš vyhodit (teda pokud nechceš měnit zarovnání apod.). Tím se ten With - End With stane zbytečným, takže můžeš rovno psát jedinej příkaz:
RANGE(CELLS(i,2), CELLS(i,3)).MergeCells = True
Jojo, to
je tam zbytečně, vím, umažu.
googlis si slova excel select range with variable a najdes napr.
291308
P.S> v tvojom pripade Bi:Ci (B je 2 a C je 3) to bude asi
ActiveSheet.Range(Cells(i, 2), Cells(i, 3)).Select
A to List1.Cells(B, i) asi bude tiz blbo, povedal by som ze skor by to malo byt Cells(i,2) podla tych microsoftich popisov. Nerobim s MS pouzivaj referencne popisy k VBS, najdes si googlom, tam je vsetko napisane.
Super, díky oběma! Funguje! Teď už to jen aplikovat na můj mnohem složitější případ. Ale ten způsob vybírání buněk mi fakt pomohl.