Kezdőoldal » Számítástechnika » Programozás » Hogy tudok VBA programozás...

Hogy tudok VBA programozás segítségével "összefűzni" két munkalapot?

Figyelt kérdés

Arra gondolok, hogy ha az egyik munkalapon pl. ez szerepel (első oszlop első szó, második oszlop második szó):


piros alma

sárga barack

zöld alma

lila hagyma

kék szőlő

fehér szőlő


A másik a munkalapon pl. ez szerepel (első oszlop első szó, második oszlop második szó):


piros alma

zöld körte

sárga barack

kék törpe

barna kiwi

lila hagyma


Akkor egy harmadik munkalapra hogy programozzam le, hogy ezeket az adatokat összefűzze? Értem ez alatt azt, hogy a két munkalapon szereplő minden párosítást szerepeljen a harmadik munkalapon, de mindegyik csak egyszer?


Olyasmi programra gondolok, ami csekkolja, hogy az első munkalap első oszlopának első cellájának van-e megfelelője a második munkalap első oszlopában, ha nincs, ugyanezt csekkolja az első munkalap második oszlopának első cellájával a második munkalap második oszlopán, és ha egyik sem egyezett, akkor kiírja az értékeket (amik szövegek) a harmadik munkalap megfelelő oszlopába és sorába. Majd ugrik az első munkalap következő elemére... és ha végzett, akkor eljátssza ugyanezt úgy is, hogy ami a másodikon szerepelt, de az elsőn nem, az még kerüljön a harmadikra...


Nem tudom, érthető-e, mit szeretnék, a fenti példán bemutatva ez lenne a harmadik lap eredménye:


piros alma

sárga barack

zöld alma

lila hagyma

kék szőlő

fehér szőlő

zöld körte

kék törpe

barna kiwi


Mindezt VBA segítségével, Excelben.


Ha számok lennének, megoldottam volna, de a szöveggel nem boldogulok. :D


NEM házi feladatról van szó, hanem valós probléma miatt lenne erre szükségem (egyszerűbbnek tűnt, ill. tűnik leprogramozni, mint manuálisan végigböngészni 700-700 sort a két említett munkalapon).


Persze ez a piros almás izé csak illusztráció, hogy le tudjam írni, milyen kaliberű dologra van szükségem. :D


Nagyon köszönök minden segítséget!



2014. szept. 9. 17:53
 1/8 coopper ***** válasza:

Szia.


1. Átmásolod az első münkalap teljes tartalmát, ezt két módon teheted meg munkalapmásolás, illetve cellák másolásával (for ciklus) esetleg még oszlop másolás vagy sorok másolása (de ezek végül is mind leképezhetőek for ciklusra álltalánosáágban : Sheets(AhováMasolomMunkalapszáma).Cells(Sor, Oszlop) = Sheets(AhonnanMásolomMunkalapszáma).Cells(Sor, Oszlop) Pl. A harmadik munkafüzet, A3-as cellájába másolja az első munkafüzet A3-as celláját : Sheets(3).Cells(3, 1) = Sheets(1).Cells(3, 1)


Ha ez megvan akkor inditasz egy egymásba ágyazott ciklust

az külső ciklus a harmadik munkalap (vagy első munkalap) első sorától megy az utolsó sorig, mig a belső ciklus a második munkalap első sorától az utolsó soráig fut és össehasonlitod a cellák tartalmát Természetesen a harmadik munkalap utolsó sorát el kell tárolni egy változóban - poz mint pozició, akkor valami ilyet kell kapnod :


For I=1 to Munkalap3Utolsosora

For J=1 to Munkalap2Utolsosora

if Sheets(2).Cells(J, 1) <> Sheets(3).Cells(I, 1) then

poz=poz+1

Sheets(3).Cells(poz, 1) = Sheets(2).Cells(J, 1)

endif

Next J

Next I


Sok sikert.

Üdv.

2014. szept. 9. 18:30
Hasznos számodra ez a válasz?
 2/8 coopper ***** válasza:

Hát most hogy jobban megnézem a kódot, rájöttem hogy nem jó (nem próbáltam ki).


Most megpróbálom kipróbálni és majd irom az eredményt.


Üdv.

2014. szept. 9. 18:38
Hasznos számodra ez a válasz?
 3/8 coopper ***** válasza:

Na ezt kipróbáltam, a fenti példákkal A C oszlopba raktam a szövegeket

Az első munkalapon : C1-C6

A második munkalpon is : C1-C6

A harmadik munkalapon eredmény : C1-C9 lett


Itt a makró :


Sub Makró1()

_ _ Rem Első munkalap "C" oszlopának (3-dik oszlop) másolása a Harmadik munkalp "C" oszlopára az első nem üres sorig, tart a másolás

_ _ I = 0

_ _ Ertek1 = " "

_ _ While Ertek1 <> ""

_ _ _ _ I = I + 1

_ _ _ _ Ertek1 = Sheets(1).Cells(I, 3)

_ _ _ _ Sheets(3).Cells(I, 3) = Ertek1

_ _ Wend


_ _ Rem Második munkalap "C" oszlopának (3-dik oszlop) másolása a Harmadik munkalp "C" oszlopának utolsó sorai után az első nem üres sorig, tart a másolás

_ _ J = 0

_ _ Ertek2 = " "

_ _ While Ertek2 <> ""

_ _ _ _ J = J + 1

_ _ _ _ Ertek2 = Sheets(2).Cells(J, 3)


_ _ _ _ Rem Annak vizsgálata, hogy a második munkalap "C" oszlopának "J" sora megvan-e a harmadik munkalap "C" oszlopában

_ _ _ _ Vane = False

_ _ _ _ K = 0

_ _ _ _ While (K <= I) And (Not (Vane))

_ _ _ _ _ _ K = K + 1

_ _ _ _ _ _ If Ertek2 = Sheets(3).Cells(K, 3) Then

_ _ _ _ _ _ _ _ Vane = True

_ _ _ _ _ _ End If

_ _ _ _ Wend


_ _ _ _ Rem Nincs meg akkor a Harmadik munkalap "C" oszlopábak utolsó poziciójába hozzárakjuk az itt még nem szereplő éréket

_ _ _ _ If Not (Vane) Then

_ _ _ _ _ _ Sheets(3).Cells(I, 3) = Ertek2

_ _ _ _ _ _ I = I + 1

_ _ _ _ End If

_ _ Wend

End Sub


Sok sikert.

Üdv.

2014. szept. 9. 19:05
Hasznos számodra ez a válasz?
 4/8 A kérdező kommentje:

Szia!


Köszönöm a segítséget, de vagy én vagyok túl sügér, vagy nem értettük meg teljesen egymást. :)


Szóval a C oszlop lenne a szín, D oszlop pedig a gyümölcs (adott esetben törpe), és eszerint kellene egybefésülni.


Viszont azt hiszem, a tudásom ehhez túl gyér, mert kimásoltam, amit írtál, és nem működött (hiába írtam át Munka1-re, mert magyar az excelem). Valamint a Wend-ről még nem hallottam, és hogy mit takar az Ertek1 = " " rész, arra nem jöttem rá. :/


Szóval ha ez így nagyon menthetetlen, akkor hagyd csak.


Egyébként nagyon köszönöm így is a segítséget! :)

2014. szept. 9. 23:22
 5/8 coopper ***** válasza:

Szia.


Elnézést a szövegértésem nem 100 %-os, csak másodszorra vagy harmadszorra.


Sub Makró1()-ben nem kell átirni semmire se munka1-re.


Kimásolod, kiveszed belőle a "_ _" jeleket amik csak azért vannak benne, hogy a "formátum" megmaradjon - tehát csak szépség miatt.


Na nézzük a gondjaidat :


1. Az én excelem, is magyar, tehát ez nem lehet gond.


2. Wend : While párja (lezáró része) kéz a kézben járnak, tehát egyik sem működik a másik nélkül (ugyan olyanok mint a For - Next páros)


3. Ertek1 = " " Ez egy változó aminek egy szóköz lesz a kezdeti értéke.


Na most azért mert nem jól fogtam fel a feladatoot, a következő változtatásokat kellene eszközölni a makróban a helyes müködés érdekében, de hogy egyszerübb legyen a dolog feltöltöttem a BAS filét, innen leszedheted : [link]


Letöltés után inditsd el az EXCEL-t nyisd meg vele a azt a fájlt amit össze akarsz rendeztetnini, (illetve elsőnek kipróbálás céljáből ird be neki a "C" és "D" oszlopokba a teszt adatokat - piros, alma, stb).


Nyomj neki egy ALT+F11 gombot (bejön a Microsoft Visual Basic for Application nevezetű program) abban bal oldalt a "ThisWorkbook" nevezetű soron jobb egér gomb és a menüből Import filét választva megkeresed a letöltött BAS filét és megnyitatod vele (HA mindent jól csináltál akkor Itt megjelenik egy "Mudoles" sor amiben van egy Module1 nevezetű makró kép : [link]


Ha az excel filében volt már Macro1 akkor module11-ként illetve mudule12-ként, stb fogja beimportálni.


Ha kész összezárhatod a Visual Basic for Application programot.


Most az Excelben inditsd el a makrót : Nézet fül -> Makrók ikon - Makrók megjelenitése (ALT+F8) -> Kiválasztod a megfelelő makrót és Inditás gomb.


A makró lefut és átmásolja a Munka1 illetve a Munka2 "C" és "D" oszlopában lévő adatokat a Munka3 "C2 és "D" oszlopára.


Mentésként az EXCELben Makróbarát munkalapot kell választani (XLSM kiterjesztést fog kapni)


Sok sikert.

Üdv.

2014. szept. 10. 07:40
Hasznos számodra ez a válasz?
 6/8 A kérdező kommentje:

Szia!


Nagyon szépen köszönöm a segítséget! :)


Valamiért kb. 30 elemet nem szűrt ki a program, de így is nagyon sokat segített, mert nem ezer sorból kellett manuálisan válogatni. :)


tényleg nagyon hálás vagyok.

2014. szept. 10. 22:48
 7/8 coopper ***** válasza:

Szia.


Igy látatlanban, csak arra tudok tippelni, hogy az a 30 elem azért nem szűrődik ki mert eltér a többitől.


Lehetséges, hogy ezeknél az elemelnél van egy szóköz billentyű valamelyik szó végén (első vagy második cellában) ez az excelben nem látszik viszont összehasonlitáskor - a szóköz miatt - természetes hogy nem egyezik az eddigiekkel, tehát új elemként jelentkezik.


Sok sikert.

Üdv.

2014. szept. 11. 05:40
Hasznos számodra ez a válasz?
 8/8 A kérdező kommentje:
Én is erre tudok gondolni, de végső soron mindegy is. :) Köszönöm még egyszer!
2014. szept. 13. 21:29

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!