Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Excel - makro, kopírování

Zdravím,

mám 305 listů (pořadí listů je 2 až 306), na které potřebuji nakopírovat data z "List1".
Na "List1" je v buňkách A2:A3603 název listu, na který se kopíruje (např. 719; 719; 713a;713a;713a;710;atd) v buňkách A2:BA3603 jsou data, která chci zkopírovat (tedy vč. názvu listu).
Po spuštění makra to tedy bude vypadat tak, že vezme všechny buňky A2:BA3603, které ve sloupci A obsahují výraz "501A" a zkopíruje je do listu "501A" do buněk A2:BAxxx (podle počtu dat).
Data jsou ve sloupci A seřazena sestupně.
Na "List2" mám pomocná data: buňky A1:A305 obsahují sestupně názvy listů, C1:C305 řádek, na kterém v "List1" začínají data pro vybraný list, D1:D305 řádek, na kterém v "List1" končí data pro vybraný list.

Zkouším něco takového:

For i = 2 To 306
Worksheets(i).range("A2").Value = Worksheets("list1").Range(worksheets("list2").cells(cells(i-1,3),cells(i-1,4)).Value

Next i

Předmět Autor Datum
Máš tam pár chýb: - zabudol si na list2, na ktorom je pomocná tabuľka, takže vlepovať môžeš začať a…
robert13 15.06.2018 10:59
robert13
Super, funguje. Chybu jsem neměl v rozsahu "i", neb list2 je zcela logicky na konci :) Velké díky
qdj 15.06.2018 11:35
qdj
... pri úvahách o Tvojej odpovedi ma napadá, že vlastne parameter "i" používaš ako index cieľového… poslední
robert13 15.06.2018 12:29
robert13

Máš tam pár chýb:

- zabudol si na list2, na ktorom je pomocná tabuľka, takže vlepovať môžeš začať až od hárka 3
- máš chybný syntax definovania cieľa a to ako v určení kopírovanej oblasti, tak i v spôsobe zápisu kopírovania

Sub Prenos()
Application.ScreenUpdating = False
    For i = 3 To 307
        Worksheets("list1").Range("A" & Worksheets("list2").Cells(i - 2, 3) & ":BA" & Worksheets("list2").Cells(i - 2, 4)).Copy (Worksheets(i).Range("A2"))
    Next i
End Sub

P.S.
- nie sú tu ošetrené chybové stavy, napr. môžeš mať preklep v názve cieľového hárka alebo v pomocnej tabuľke, čo spôsobí smerovanie na neexistujúci hárok a pod
- správnosť závisí od toho, či nemáš chybu v rozsahoch pomocnej tabuľky
- dá sa to aj bez zoradenia a bez pomocnej tabuľky, proste kód pôjde riadok po riadku v zdrojovom liste a každý riadok prilepí za posledný riadok príslušného cieľového listu

... pri úvahách o Tvojej odpovedi ma napadá, že vlastne parameter "i" používaš ako index cieľového listu.
Z toho dôvodu môže pri neopatrnosti prísť ku kolízii priradenia oblasti z listu2 na správny hárok. Musíš zosúladiť index s číslom riadka, z ktorého vyčítavaš oblasť riadkov.
Pritom list2 obsahuje v stĺpci "A" zároveň názov cieľového listu, takže cieľový hárok nemusí byť definovaný indexom, ale jeho názvom, vyčítaným zo stĺpca "A" listu2.
Index "i" potom bude určovať už len číslo riadka na liste2 z ktorého sa načítava ako názov, tak i rozsah riadkov.
Nedôjde tak k miešaniu indexovania listov (kedy by záležalo na tom, kde sa nachádza list2) a čísla správneho riadku pre definovanie kopírovanej oblasti.

Ale toto si očividne uvedomuješ, takže ok.
:beer:

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