Nejste přihlášen/a.
Mám tabulku v Excelu a potřebuji, asi pomocí makra, vložit prázdný řádek, každý 20. řádek až do konce tabulky. Tzn. na řádek 21, 41, 61, ... vložit prázdný řádek až do konce tabulky. Prostě rozdělit tabulku na bloky po 20 řádcích, oddělené prázdným řádkem. Poradíte jak? Dík.
Tohle by melo pomoci...
Sub test()
Dim r As Range
Set r = Range("A1")
Do
Range(r.Offset(20, 0), r.Offset(20, 0)).EntireRow.Insert
Set r = Cells(r.Row + 20, 1)
MsgBox r.Address
If r.Offset(1, 0) = "" Then Exit Do
Loop
End Sub
doplněno 12.08.13 16:22:S tim MsgBoxem ma figurek samozrejme pravdu.
Byl tam pouze pro kontrolu, jestli to vklada spravne radky.
Staci ten radek umazat a cele to probehne automaticky.
doplněno 13.08.13 12:17:Pokud mi to dava po 19 radkach misto 20, coz ma figurek asi pravdu a timto mu za opravu dekuji, tak staci pricist jednicku v tomto radku:
Set r = Cells(r.Row + 20+1, 1)
Zkratka 21 misto 20. Nic neresitelneho. Konec koncu by mohlo byt i nakonec lepsi udelat z tohoto parametr a krok (pocet radku) zadavaty nekde zvlast, pokud by mel byt napriklad nekdy jiny, nez zrovna 20.
tady máte dvě makra. Dobře se na ně podívejte, čím se vlastně liší. Jedno skončí na řádku 300 (Delkatabulky=300), číslo 300 si můžete upravit. Druhé jede až do konce tabulky (DelkaTabulky=Row.count). Ale radím vám, použijte raději to první makro, protože počet řádků je pře sto tisíc a projet celou tabulku shora až úplně dolů trvá celé věky.
Řádek Range("A1").Offset(krok * i + (i - 1), 0).Insert je sice trochu nepřehledný, ale není v něm nic složitějšího, než výpočet řádku, který se přidává. Při prvním průchodu cyklem se přidá řádek 21, při druhém 42, při třetím 63 atd.
Příkaz On Error Resume Next není nutný. Slouží jen k ignorování případné chyby v cyklu.
Tak mnoho zdaru
*
Sub VlozitRadek1()
On Error Resume Next
krok = 20
DelkaTabulky = 300
For i = 1 To DelkaTabulky
Range("A1").Offset(krok * i + (i - 1), 0).Insert
Next i
End Sub
*
Sub VlozitRadek2()
On Error Resume Next
krok = 20
DelkaTabulky = Rows.Count
For i = 0 To DelkaTabulky
Range("A1").Offset(krok * i + (i - 1), 0).Insert
Next i
End Sub
Doplněk po tom, co jsem si právě přečetl o kousek výš. Nikdy nepoužívejte mesidžbox uvnitř cyklu Do. Jak jsem napsal, řádků je přes 100 tisíc a jestli budete postupovat po kroku 20, pak uživatelům vašeho programu nezbude, než 5000x zmačknout tlačítko OK.
Asi vás budou honit po poli, protože není způsob jak zastavit rozjetý cyklus Do, jedině tvrdý reset.
Takže radím, téhle součástce se zdálky vyhněte.
MsgBox r.Address
Axusovo makro nahoře dává špatné výsledky. První oddělený blok má 20 řádků a každý další 19.
doplněno 13.08.13 12:48:Axus.
Nic ve zlém, ale to vaše makro psal alchymista, který neví co dělá.
Když už, pak mělo vypadat tady tak :
Sub test()
Dim Krok As Byte
Dim r As Range
Krok = 20
Set r = Range("A1")
Do While r.Offset(1, 0).Value <> ""
r.Offset(Krok, 0).EntireRow.Insert
Set r = Cells(r.Row + Krok + 1, 1)
Loop
End Sub
Neneseme odpovědnost za správnost informací a za škodu vzniklou jejich využitím. Jednotlivé odpovědi vyjadřují názory jejich autorů a nemusí se shodovat s názorem provozovatele poradny Poradte.cz.
Používáním poradny vyjadřujete souhlas s personifikovanou reklamou, která pomáhá financovat tento server, děkujeme.