Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno excel - kopirovani casti bunky

ahoj,

tak opet jeden dotaz z exelu, se kterym sam nehnu. resp. dva dotazy. nejdriv ten jednodussi:

1) muzu si udelat v excelu 2007 vlastni klavesovou zkratku? jde mi o to, ze kdyz neco kopiruji (vkladam do excelu) tak mi to defaultne vklada i puvodni format. rad bych (idealne prenastavenou klavesovou zkratkou Ctrl + v) vlozil jen prosty text. nyni to zdlouhave vkladam pres "vlozit jinak" a vlozit prosty text. kdyz je toho vic, je to dost zdlouhave.

a ted druhy dotaz - pro me neresitelny orisek:

2) mam v bunce A2 cele jmeno a adresu. jmeno a adresa jsou od sebe vzdy oddeleny carkou a mezerou. bylo by nejak mozne tuhle bunku rozdelit do tri bunek? v bunce B2 jmeno a prijmeni (pripadne titul), v bunce C2 ulice a č.p. a v bunce D2 obec a PSC? navic je to komplikovane v tom, ze nekdy je v adrese pouzita cast obce rovnez oddelena carkou a nekdy ne. a aby to bylo jeste tezsi, tak tech jmen a adres je pres 5000. cili v bunkach A2 - A5250.

dam sem par prikladu s vymyslenym jmenem a adresou:

A1 - Novák Pavel Ing., Holandská 666/8, Vršovice, 10000 Praha 10
A2 - Šulc Jaroslav, Jiřího Šotky 98, 27101 Nové Strašecí

proc to chci, tak proto, ze je potrebuji pro hromadnou korespondenci. v tomhle stavu je nedam na obalku tak, jak maj byt. a protoze je musime oslovit, musim to i nejak ja vyresit.

jde tohle vubec nejak vyresit a nebo je to na rucni praci?

diky moc!!

ps: jeste me napada, poradil bych si i s tim, kdyby to bylo do 4 sloupcu, to co je oddeleno carkou a mezerou, tak dat vzdy do jednoho sloupce. samozrejme vzdy bez te carky.

takze

A2 - Novák Pavel Ing., Holandská 666/8, Vršovice, 10000 Praha 10
B2 - Novák Pavel Ing.
C2 - Holandská 666/8
D2 - Vršovice
E2 - 10000 Praha 10

jeste jednou diky za jakykoli napad!!!

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
teda chlapi, jste dobry:-) to reseni - ikona : text do sloupcu - neznam. hanba me fackuje! a to druh…
mayerrs 18.09.2014 12:39
mayerrs
Kolik je takovýchto případů? Do 100 bych to asi řešil ručně. V případě 4 údajů v jedné buňce bych po…
uri 18.09.2014 14:18
uri
asi jo.. asi to tak udelam.. tech pripadu bude celkem tak tretina, ale co mi zbyva.. ikdyz by bylo f…
mayerrs 18.09.2014 14:58
mayerrs
Tohle makro rozhází obsah zalomené buňky do jednotlivých řádků. Neříkám, že to nejde napsat i efekti…
Moas 19.09.2014 06:17
Moas
tohle makro to zvladlo dobre:-) diky! mimochodem, docela by me zajimalo, jak evektivnejc by to slo:-…
mayerrs 19.09.2014 22:35
mayerrs
No myslím, že jestlis to pustil na excel s tisíci řádky, tak to pár minut muselo chroustat. Základn… nový
Moas 20.09.2014 08:59
Moas
jak evektivnejc by to slo Sub MakeLines() Dim aCell As Range Dim aValues() As String Dim aBound As… nový
los 20.09.2014 11:19
los
do techhle veci jsem bohuzel nikdy neproniknul. co ted napisu, je nejspis uplna hloupost, ale dokaza… nový
mayerrs 20.09.2014 22:01
mayerrs
Dá sa to len napísať ručne, cez záznam makra by takýto kód nikdy nevznikol. Napísať kód efektívnejši… poslední
los 21.09.2014 09:37
los
chlapi, vyresili ste mi docela velkej problem a usnadnili mi spoustu rucni prace:-) diky, diky, dik… nový
mayerrs 19.09.2014 22:39
mayerrs

teda chlapi, jste dobry:-) to reseni - ikona : text do sloupcu - neznam. hanba me fackuje! a to druhe reseni s tim vzoreckem - na to nestacim:-( kazdopadne diky moc!! oboji je super:-)

jen, jeste to trochu zkomplikuju. kdyz ste vyresili tohle, treba mi pomuzete jeste s timkle.

jedna se o to, ze se muze stat a taky se to stava, ze v jedne bunce je tech jmen nekolik. dam sem priklad:

bunka A1 vypada takhle:

Barchánek Pett, Jarní 270/40, Střížkov, 19000 Praha
Barchánek Pavel, Letní 49, Letňany, 19900 Praha 9
Kynzl Alois, Ke stadionu 99, 25267 Tuchoměřice
Kynzl Zdeněk, Pod jezem 13, 25267 Tuchoměřice

maximum jsou 4 jmena s adresama v jedne bunce s tim, ze vzdy je to v te bunce pod sebou, ale v jedne bunce. kdyz zkusim pouzit "text do sloupcu" tak mi to oddeli jen prvni jmeno a ta tri dalsi se nepouziji. slo by i tohle nejak osetrit?

jeste dodam, ze ve vetsine pripadu je v jedne bunce jedno jmeno, nekdy 2, nekdy 3 a nekdy 4. distribuce je nahodna.

Kolik je takovýchto případů? Do 100 bych to asi řešil ručně. V případě 4 údajů v jedné buňce bych pod buňku vložil 3 řádky a do nich vyjmul 3x údaje z buňky A1 (Ctrl X Ctrl V) a pak použil volbu "Text do sloupců". Ručním úpravám se stejně nevyhneš, pokud chceš mít stejné údaje ve stejném sloupci.

asi jo.. asi to tak udelam.. tech pripadu bude celkem tak tretina, ale co mi zbyva.. ikdyz by bylo fajn to mit zvladnute nerucne, protoze bohuzel data dostavam v tehle podobe a nejde s tim nic delat. vzdy dostanu v jedne bunce cekolik jmen a vzdy si s tim tedy budu muset hrat. kdyby vas neco napadlo na zautomatizovani, bylo by to super!

No myslím, že jestlis to pustil na excel s tisíci řádky, tak to pár minut muselo chroustat.

Základní zefektivnění by bylo v přidání Application.ScreenUpdating=False na začátek (před DO) a Application.ScreenUpdating=True na konec (před End Sub). Tím bys vypnul grafický výstup, makro by nemuselo nic vykreslovat - vykreslování zabere nejvíc času. Na druhou stranu bys neviděl, že "to něco dělá". Prostě by Excel na chvíli jakoby zamrznul a pak vyhodil výsledek naráz.

pak je tam taky spousta řádků Activecell.offset, kdy následně pracuji s hodnotou té buňky. To se dá napsat i efektivněji (nemusíš se napřed na tu buňku přepnout, abys pracoval s její hodnotou, můžeš se na ni odkazovat rovnou). Jenomže mně se to takto líp debuguje.

Dalo by se laborovat i s odstraněním DoEvents. Ten příkaz dovoluje počítači věnovat se i ostatním aktivitám mimo to Excel makro. U krátkých maker není potřeba, dlouhá makra bez něj tuhnou. Dost to celé makro zpomaluje ale je to stabilní.

jak evektivnejc by to slo

Sub MakeLines()
    Dim aCell As Range
    Dim aValues() As String
    Dim aBound As Integer
    
    Application.ScreenUpdating = False
    Set aCell = Range("A1")
    Do While aCell <> ""
        aValues = Split(aCell, Chr(10))
        aBound = UBound(aValues)
        If aBound > 0 Then
            aCell.EntireRow.Resize(aBound).Insert
            aCell.Offset(-aBound).Resize(aBound + 1) = WorksheetFunction.Transpose(aValues)
        End If
        Set aCell = aCell.Offset(1)
    Loop
    Application.ScreenUpdating = True
End Sub

Dá sa to len napísať ručne, cez záznam makra by takýto kód nikdy nevznikol. Napísať kód efektívnejšie ako to, čo vznikne záznamom makra, nie je nič zložité. Záznam makra som síce nikdy nepoužil, ale z môjho laického pohľadu sa mi to zdá ako zdĺhavý a neefektívny spôsob vytvárania makier. :-)

chlapi, vyresili ste mi docela velkej problem a usnadnili mi spoustu rucni prace:-)

diky, diky, diky!!

ted uz si s tim muzu dal nejak hrat, ale to gro, co jsem potreboval, to uz mam a ted uz budu jen spoustet makro a pak rozdelovat text do sloupcu:-)

jeste jednou diky a preju pekny vikend!!

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