Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Excel makro pre kopirovanie riadkov v dvoch zositoch.

Ahojte..., potreboval by som macro, ktore by vykonalo nasledovne: Dajme tomu, ze v exceli mam dva zosity (1 a 2). Zo zosita cislo 1 potrebujem skopirovat bunky (A3 az G3) do zosita cislo 2 v rozsahu stlpcov A az G s nasledovnymi podmienkami: Ak prve tri bunky (A3,B3,C3) zo zosita 1 budu zhodne s prvymi tromi bunkami uz existujuceho riadku v zosite 2, tak bunky D3 az G3 (ciselne hodnoty) zosita 1 sa pripocitaju ku hodnotam danemu riadku zosita 2. Ak tieto prve tri bunky nebudu zhodne s uz existujucim zaznamom v zosite 2, tak sa cely riadok (A3 az G3) zo zosita 1 skopiruje do zosita 2 na posledny volny riadok. Snad je to ako tak zrozumitelne. Dakujem!

Předmět Autor Datum
1. bunky D3 až G3 hárka 1 pripočítať k bunkám D3 až G3 hárka 2? 2. asi si chcel povedať skopírovať d…
robert13 18.08.2014 15:37
robert13
Takto: Sheet 1: 19.8.2013 volvo green 1 1 1 Sheet 2: 15.8.2013 audi green 1 1 1 16.8.2013 bmw blac…
Abu255 18.08.2014 15:43
Abu255
Stĺpec A som z príkladu pochopil ako dátum, B ako značku a C ako farbu... potom ale sčítaval len D,E…
robert13 19.08.2014 09:14
robert13
Robo velke dik za snahu, ale prave to testujem a vzdy ked ten skript spustim, tak zamrzne cely excel… nový
Abu255 19.08.2014 10:14
Abu255
A samozrejme to, ze ten riadok je v zosite dva tiez na pozicii A3... je len nahoda, ja potrebujem v… nový
Abu255 19.08.2014 10:23
Abu255
ja mám tiež 2010... Dá ti nejakú hlášku, keď "zamrzne"? Keď zamrzne, skús CTRL+BREAK. To zastavuje b… nový
robert13 19.08.2014 10:27
robert13
Teda... pokiaľ v hárku 2 nájde záznam, kde sú prvé tri bunky rovnaké s hľadaným riadkom z hárka 1, p… nový
robert13 19.08.2014 10:41
robert13
skús si makro v editore Visual Basicu odkrokovať F8-kou nový
robert13 19.08.2014 10:28
robert13
testoval som to na tomto a mne to beží nový
robert13 19.08.2014 10:29
robert13
trochu vylepšené nový
robert13 19.08.2014 10:37
robert13
No Robo tie tvoje subory mi funguju. Prikladam vzorku toho mojho, ktory mi stale mrzne...dik moc! 4… nový
Abu255 19.08.2014 11:17
Abu255
jasné, že mrzne, lebo v hárku 1 máš len 1 riadok a príkaz xlDown pre neho v tom prípade znamená skok… nový
robert13 19.08.2014 12:01
robert13
Sefe diky moc, funguje to presne ako som potreboval. Super! nový
Abu255 19.08.2014 12:47
Abu255
ok, teší ma ;) nový
robert13 19.08.2014 12:56
robert13
Ja mam taky problem v exceli: mam napriklad 4 harky Prvy harok je moj archiv druhy je posta Kosice… nový
gunok 27.08.2014 00:08
gunok
v prílohe posielam riešenie Prenos želaných údajov do svojho hárka nastáva tak, že sa označí bunka… nový
robert13 27.08.2014 11:13
robert13
mozem ti poslat moj dokument pre lepsiu predstavu? das mi tvoj email adresu? nový
gunok 28.08.2014 21:28
gunok
da sa to spravit aj tak, ze ked vytvorim bunku s overovanim udajov a tam dam moznosti kosice nitra p… nový
gunok 28.08.2014 20:52
gunok
nie, pretože sa nedá priradiť spúšťajúca udalosť len k bunkám určitého stĺpca. Dá sa urobiť to, že s… nový
robert13 28.08.2014 21:32
robert13
a teraz ma napadá, že by sa to hádam dalo aj tak, ako si vravel... ono by sa pri každej zmene v zoši… nový
robert13 28.08.2014 21:48
robert13
moj email aberto.anton@gmail.com nový
gunok 28.08.2014 21:53
gunok
môj mail odoslaný... došiel? poslední
robert13 28.08.2014 22:03
robert13

Takto:

Sheet 1:
19.8.2013 volvo green 1 1 1

Sheet 2:
15.8.2013 audi green 1 1 1
16.8.2013 bmw black 1 1 1
19.8.2013 volvo green 1 1 1
19.8.2013 toyota black 1 1 1

result after script:
Sheet 2:
15.8.2013 audi green 1 1 1
16.8.2013 bmw black 1 1 1
19.8.2013 volvo green 2 2 2
19.8.2013 toyota black 1 1 1

Alebo ked prve tri bunky zo zosita 1 sa nebudu rovnat prvym trom bunkam z nejakeho uz existujuceho riadka v zosite dva, tak cely riadok zo zosita jedna sa prida ako posledny volny riadok do zosita 2. Tu cast skriptu kedy sa prida cely riadok mam vyriesenu, ale neviem ako vyriesit porovnanie tych troch prvych buniek zo zosita 1 so vsetkymi riadkami zosita 2 a tam kde je zhoda, tak zvysne bunky s ciselnymi hodnotami sa pripocitaju ku prislusnemu riadku v zosite 2.

Stĺpec A som z príkladu pochopil ako dátum, B ako značku a C ako farbu...
potom ale sčítaval len D,E a F. G tam už nie je. Ak som to zle pochopil, tak treba kód upraviť v tom zmysle ako to potrebuješ.
A urobil som to tak, že v hárku 1 môžeš mať zoznam, nielen jeden riadok. Týmpádom prejde celý zoznam na hárku 1 a urobí, čo treba na hárku 2. Potom je možné zoznam na 1. hárku zmazať

Sub Makro1()
PR1 = Sheets(1).Range("A3").End(xlDown).Row
PR2 = Sheets(2).Range("A3").End(xlDown).Row
For i = 3 To PR1
For j = 3 To PR2
If Sheets(1).Range("A" & i) = Sheets(2).Range("A" & j) And Sheets(1).Range("B" & i) = Sheets(2).Range("B" & j) And Sheets(1).Range("C" & i) = Sheets(2).Range("C" & j) Then
Sheets(2).Range("D" & j) = Sheets(2).Range("D" & j) + Sheets(1).Range("D" & i)
Sheets(2).Range("E" & j) = Sheets(2).Range("E" & j) + Sheets(1).Range("E" & i)
Sheets(2).Range("F" & j) = Sheets(2).Range("F" & j) + Sheets(1).Range("F" & i)
GoTo DalsieI
End If
Next j
Sheets(1).Range("A" & i & ":F" & i).Copy (Sheets(2).Range("A" & (PR2 + 1)))
PR2 = PR2 + 1
DalsieI:
Next i
End Sub

Teda... pokiaľ v hárku 2 nájde záznam, kde sú prvé tri bunky rovnaké s hľadaným riadkom z hárka 1, pričíta a končí s prehľadávaním druhého hárka, nasleduje vyhľadávanie ďalšieho riadka z hárka 1.

Je logické, že viac takých záznamov by sa v ostávajúcej časti zoznamu na hárku 2 nachádzať nemalo

jasné, že mrzne, lebo v hárku 1 máš len 1 riadok a príkaz xlDown pre neho v tom prípade znamená skok na úplne posledný riadok excelu a to je 1 048 576. riadok ;)
Zato som ti vravel, že aj v hárku 1 môžeš mať zoznam a nie len jeden riadok.
Dopĺňam ti preto makro tak, aby ani takýto stav neviedol do chyby (ale samozrejme, riadok s údajmi musí byť v hárku 1 v 3. riadku)
Okrem toho sa porovnávajú len prvé tri stĺpce! Ak chceš na zhodu porovnávať aj 4. stĺpec, potrebné doplniť do kódu.

Ja mam taky problem v exceli:

mam napriklad 4 harky Prvy harok je moj archiv druhy je posta Kosice druhy posta Presov treti posta Nitra.

Ak zadan do archivu

meno cislo zasielky a posta kosice(posta kosice) aby mi automaticky cely riadok skopirovalo na druhy harok ktory ma nazov posta Kosice?

Neviem ci som to zrozumitelne napisal dik za odpoved

v prílohe posielam riešenie

Prenos želaných údajov do svojho hárka nastáva tak, že sa označí bunka riadka, ktorý sa má preniesť (je jedno, ktorý stĺpec) a stlačí sa tlačidlo prenosu.
Makro vyhodnotí, ktorá bunka je aktívna, zistí z nej riadok a celý ten riadok prekopíruje do hárka, názov ktorého si zistí zo stĺpca D riadka s aktívnou bunkou. Riadok je do cieľového hárka nakopírovaný do nasledujúceho voľného riadka.
Okrem toho, makro zistí, či pošta uvedená v stĺpci D aktívneho riadka už má svoj vlastný hárok. Pokiaľ ešte hárok s takou poštou neexistuje, založí nový a pomenuje podľa obsahu bunky D aktívneho riadka archívu. Preto je dôležité, aby v Archíve neboli v názve pošty preklepy. Ak totiž omylom napíšeš Košie, tak ti založí nový hárok s názvom Košie a obsah prekopíruje tam.
Toto makro nezisťuje, či už niektorý z riadkov nebol do cieľového hárka prenesený, t.j. daný riadok sa tam zapíše toľkokrát, koľkokrát si ho stlačením tlačidla prenosu tam odoslal.
Samozrejme, dá sa ošetriť aj to, ale na to teraz nemám čas, tak som dal aspoň prefarbiť riadky, u ktorých prenos už bol vykonaný
P.S. pri spúšťaní zošita je samozrejme nutné povoliť makrá!

nie, pretože sa nedá priradiť spúšťajúca udalosť len k bunkám určitého stĺpca. Dá sa urobiť to, že sa to makro spustí pri každej zmene v zošite ale my nechceme, aby sa to spustilo aj keď zadávam meno, číslo zásielky a pod, ale len pri zadaní pošty... Takže pri takomto riešení síce overíš, že tam nebudeš mať preklep ale treba následne obslúžiť tlačidlo prenosu.
Súbor môžeš priložiť aj sem, ale ak chceš cez mail, tak môj mail ti pošlem na tvoj, keď ho tu zverejníš.
Inak... to čo chceš, by sa dalo cez užívateľský formulár, t.j. aj vpisovanie do tvojho archívu by sa dialo cez okno s nadefinovanými textovými poliami a tam by sa zároveň ošetrilo aj to, že akonáhle ho zapíšeš do archívu, prenesie sa i do svojho príslušného hárku. Nie je problém...

a teraz ma napadá, že by sa to hádam dalo aj tak, ako si vravel... ono by sa pri každej zmene v zošite spustilo makro ale doň by sa dala podmienka, že prenos nastane len ak máš aktívny hárok "Archív" a sú už všetky údaje v danom riadku zapísané. Potom by sa však stalo aj to, že by si chcel opraviť niektorý už existujúci riadok v archíve... napríklad by si opravil číslo zásielky a keď ukončíš jeho opravu stlačením Enter, makro bude automaticky spustené a opravený riadok by sa preniesol znovu do svojho hárku. Síce do správneho (podľa pošty) ale raz by tam už bol s nesprávnym číslom zásielky a tiež by sa teraz vpísal na koniec zoznamu, tentokrát so správnym číslom zásielky... Dalo by sa to zas ošetriť tým, že by tam existovalo tlačidlo, ktoré by slúžilo na to, že sa v archíve postavíš na riadok, ktorý chceš opraviť a stlačíš to tlačidlo. To by spravilo to, že si v príslušnom hárku nájde ten záznam a zmaže ho a následne by si ten riadok opravil a on by ho vradil na miesto, kde bol pôvodný... Dá sa všetko :D

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