Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem 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!

Předmět Autor Datum
Jasnovidecky usudzujem ze asi pises o MS excel http://books.google.de/books?id=JTg7HvmxEKYC&pg=PA 89…
MM.. 06.05.2014 22:09
MM..
Díky, já jsem si dokonce všimla, že jsem tam ten excel zapomněla uvést, ale pak jsem si řekla, že to…
zzzzzzz 06.05.2014 23:17
zzzzzzz
Tak namiesto Range("B5:C5").Select musis pouzit to i a ne 5 (samozrejme neda sa napisat Bi ale musis…
MM.. 07.05.2014 00:03
MM..
Jakou funkci? Já to vážně neovládám tak dobře. :(
zzzzzzz 07.05.2014 00:05
zzzzzzz
No musíš využít funkce CELLS(<row>,<col>), která odkazuje na buňku pomocí čísla řádku a čísla sloupc…
MachR55 07.05.2014 10:30
MachR55
Jojo, to End With Range("B6").Select je tam zbytečně, vím, umažu.
zzzzzzz 07.05.2014 00:07
zzzzzzz
googlis si slova excel select range with variable a najdes napr. 291308 3: ako vyberte bunku v prac…
MM.. 07.05.2014 00:07
MM..
A to List1.Cells(B, i) asi bude tiz blbo, povedal by som ze skor by to malo byt Cells(i,2) podla tyc…
MM.. 07.05.2014 00:11
MM..
Super, díky oběma! Funguje! Teď už to jen aplikovat na můj mnohem složitější případ. :-D Ale ten způ… poslední
zzzzzzz 07.05.2014 21:59
zzzzzzz

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.)

  Range("B5:C5").Select
    With Selection
        .HorizontalAlignment = xlGeneral
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = True
    End With
    Range("B6").Select

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.

Sub Makrox1()

i = 5

Do Until IsEmpty(List1.Cells(B, i)) = True

   Range("B5:C5").Select
   With Selection
       .HorizontalAlignment = xlGeneral
      .VerticalAlignment = xlBottom
       .WrapText = False
       .Orientation = 0
       .AddIndent = False
       .IndentLevel = 0
       .ShrinkToFit = False
       .ReadingOrder = xlContext
        .MergeCells = True
   End With
    Range("B6").Select
i = i + 1
Loop

End Sub

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

googlis si slova excel select range with variable a najdes napr.
291308

3: ako vyberte bunku v pracovnom hárku v inom zošite
Vyberte rozsah C2:D10 na aktívnom hárku, môžete použiť niektorý z nasledujúcich príkladov:

ActiveSheet.Range(Cells(2, 3), Cells(10, 4)).Select

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

Zpět do poradny Odpovědět na původní otázku Nahoru