jan.maticky
26.04.16,19:24
Dobry den,

dlhsie sa trapim s problemom dynamickych dat. V jednoduchosti rozpisem moju zakladnu ulohu:


a) Mam nasledujucu tabulku v Zosit_1:

A B
1 Nazov Cislo
2 W 100
3 X 200
4 Y 300

b) Chcem vytvorit take makro, ktore mi vytvori v Zosit_2 takyto obsah:

A B C
1 Nazov Cislo 1. cislica B
2 W 100 1
3 X 200 2
4 Y 300 3

Toto viem naucit makro jednoducho tak, ze skopirujem stlpec A zo Zosit_1 do Zosit_2, funkciou VLOOKUP() vyplnim v nom stlpec B a pomocou funkcioe LEFT() stlpec C.


Problem, ktory potrebujem vyriesit je, ze makro si pamata tieto operacie len pre staticku tabulku v Zosit_1. Ako docielim dynamicku pracu makra?

V Zosit_1 mi pribudne Riadok 5:

A B
1 Nazov Cislo
2 W 100
3 X 200
4 Y 300
5 Z 400

a makro zareaguje na toto doplnenie tak, ze Zosit_2 bude vyzerat:

A B C
1 Nazov Cislo 1. cislica B
2 W 100 1
3 X 200 2
4 Y 300 3
5 Z 400 4


Budem Vam velmi vdacny za pomoc,

Igor.
mepex
26.04.16,18:13
Sub Macro1()
Range("A1").Select
Selection.CurrentRegion.Copy
PocetRiadkov = Selection.CurrentRegion.Rows.Count

Workbooks.Add
ActiveSheet.Paste
Range("C1") = "1.Cislo"

Range("C2:C" & PocetRiadkov).Select
Selection.FormulaR1C1 = "=VALUE(LEFT(RC[-1],1))"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
End Sub
jan.maticky
26.04.16,21:36
Dakujem velmi pekne. Mohol by som poprosit upravit konkretny kod v excelovskom subore, ktory som prave pridal? Vola sa Priklad.xlsx a je v uvodnej sprave.


Dakujem za ochotu,

Igor.
mepex
27.04.16,02:50
Nedá sa nič upraviť, lebo súbory s makrami majú mať príponu .xlsm (tento súbor neobsahuje makrá práve kvôli prípone - Excel o tom aj varoval). Možné uložiť aj s príponou .xls, vtedy makrá obsahuje.
PaloPa
27.04.16,08:06
Kód od Mepexa je OK, aj keď bude pridaný nový riadok, ale zdrojová oblasť bude súvislá (zabezpečuje "CurrentRegion").

V prípade ak by bola zdrojová oblasť s prázdnym riadkom, treba kód upraviť nasledovne. (Vrátane ošetrenia vzorca LEFT, aby nehodil chybu v prípade prázdnej bunky):


Sub Macro1()

' OK pre súvislú oblast
' Range("A1").Select
' Selection.CurrentRegion.Copy
' PocetRiadkov = Selection.CurrentRegion.Rows.Count

' Pre oblast s prázdnym riadkom
PocetRiadkov = Range("A50000").End(xlUp).Row - Range("A1").Row
Range("A1", Range("B1").Offset(PocetRiadkov, 0)).Copy


Workbooks.Add
ActiveSheet.Paste
Range("C1") = "1.Cislo"

Range("C2:C" & PocetRiadkov + 1).Select

' Selection.FormulaR1C1 = "=VALUE(LEFT(RC[-1],1))"
Selection.FormulaR1C1 = "=IFERROR(VALUE(LEFT(RC[-1],1)),"""")"

Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select

End Sub
jan.maticky
27.04.16,13:53
Ahoj, pridal som do povodnej spravy excelovsky subor v pozadovanom formate.

S vdacnostou Igor.
jan.maticky
27.04.16,15:54
Ahoj, pridal som do hlavnej spravy subor Priklad_v2_Workbook.xlsm. Mohol by si mi ho upravit?


Dakujem,

Igor.
jan.maticky
27.04.16,15:59
Ahoj, nefunguje mi Tvoja excelovska uprava. Nereaguje to na pridanie riadkov.
PaloPa
28.04.16,05:42
Skus pls podrobnejšie popísať, ako robíš celý postup, mne to funguje OK.
PaloPa
28.04.16,05:50
Pridal som aj tvoje upravené riešenie: Priklad_v2_Workbook.zip
jan.maticky
29.04.16,11:36
Dakujem, presne tak som to myslel. Tvoj kod funguje tak ako som chcel. Chcem Ta este poziadat, mohol by si tam nieco doplnit? Ked sa zrusia niektore riadky, dava tam "N/A". Na rozsirenie reaguje OK, ale ked sa znizi pocet riadkov, tak to vyhadzuje chybu. Velke DAKUJEM.
PaloPa
29.04.16,12:33
Do kódu som pridal riadok, ktorý najskôr premaže staré dáta v cieľovom liste ( Rows("2:30000").Delete Shift:=xlUp 'Mazat stare
). Viď Priklad_v3_Workbook.zip
jan.maticky
29.04.16,15:01
Dakujem krasne :-). Ako mam chapat tych 30.000? Tolko riadkov vymaze v cielovom zosite? Vies, pracujem este s vyssim poctom riadkov. Excel konci riadkom 1.048.576 a konci stlpcom XFD.
Ako mam chapat tych 30.000?

Dakujem,

Igor.


P. S.: Kod ma este jednu chybicku krasy. Ked mas napr. 10 riadkov a 5. vymazes, da do cieloveho N/A. Chapem preco. Posuvat riadky na hor by to chcelo asi nejakou funkciou, ze?
PaloPa
30.04.16,09:10
Ad 30000: Má význam "x krát rádovo viac ako bude reálne použitých", zmeň si kľudne i na 1 mil.

Ad N/A: "Delete Shift:=xlUp" znamená "maž a posuň riadky nahor", to už tam je.
Ale chybu 10 vs 5 zmazaných zopakovať neviem. Skús pls podrobnejšie popísať postup (krok za krokom) , ako sa vygenerovala
jan.maticky
05.05.16,06:50
Ahoj, mozeme sa skontaktovat v realnom case (telefonicky, a pod.)? Tak by sa to vysvetlilo najlepsie. Prosim, napis mi svoj kontakt spravou na e-mail jan.maticky@gmail.com.

Dakujem.
mepex
05.05.16,12:50
Doplnil som do mojej odpovedi prílohu s upraveným makrom.
MePEx