Ez a 19. heti Excel tipp az at.com címen. Az Excel sok tippje valamilyen makrót tartalmaz. Ezen a héten azoknak az Excel felhasználóknak, akik még soha nem írtak makrót, felajánlok egy alapot egy hasznos Excel makró rögzítéséről, majd testreszabásáról.

Tegyük fel, hogy 400 sornyi címadata van, mint amilyen a bal felső ábrán látható. A név mező az A oszlopban, az utca címe a B oszlopban, a város pedig a C oszlopban található.
A cél az, hogy az adatokat egyetlen oszlopká konvertálja, mint amilyen a második ábrán látható.
Ezt az egyszerű problémát arra használjuk, hogy szemléltessük egy egyszerű makró rögzítését, módosítását és futtatását.
Excel 95 felhasználók számára: A makró rögzítése után az Excel beteszi a makrót a munkafüzet Module1 nevű lapjára. Csak kattintson a lapra a makró eléréséhez.
Annak ellenére, hogy ebben a munkalapban 400 rekord van, szeretnék egy apró darabot rögzíteni a makróból, amely csak az első címet látja el. A makró feltételezi, hogy a cellpointer szerepel az utónéven. Három üres sort fog beilleszteni. Az eredeti cellától jobbra lévő cellát átmásolja az eredeti cella alatti cellába. Másolja a városi cellát az eredeti cella alatti 2 cellába. Ezután lefelé kell mozgatnia a cella mutatót, hogy a következő néven legyen.
A legfontosabb az, hogy ezt a folyamatot gondold ki, mielőtt felvennéd. Nem akar sok hibát elkövetni a makró rögzítésekor.
Tehát helyezze a cellamutatóját az A1 cellába. Menjen a menübe, és válassza az Eszközök> Makró> Új makró rögzítése lehetőséget. A Makró rögzítése párbeszédpanel a Macro1 nevét javasolja. Ez rendben van, ezért nyomja meg az OK gombot.
Az Excel makrórögzítőnek van egy nagyon hülye alapértelmezett beállítása, amelyet feltétlenül meg kell változtatnia a makró működéséhez. Az Excel 95 alkalmazásban lépjen az Eszközök> Makró> Relatív hivatkozások használata elemre. Az Excel 97-2003 programban kattintson a Felvétel leállítása eszköztár második ikonjára. Az ikon úgy néz ki, mint egy apró munkalap. A C3-ban lévő vörös sejt egy másik A3-as vörös cellára mutat. Az ikon neve Relative Reference. Ha ez az ikon be van kapcsolva, az ikont körülveszi néhány szín. Az ikon emlékszik az aktuális Excel munkamenet legutóbbi beállítására, ezért előfordulhat, hogy párszor rá kell kattintania, hogy kiderüljön, melyik módszer van vagy sem. Az Excel 2007 alkalmazásban használja a Nézet - Makrók - Használja a relatív hivatkozásokat elemet.
Rendben, készen állunk az indulásra. Kovesd ezeket a lepeseket:
- A B1 cellába lépéshez nyomja meg egyszer a lefelé mutató nyilat.
- Tartsa lenyomva a shift billentyűt, és nyomja meg kétszer a lefelé mutató nyílot a 2., 3. és 4. sor kiválasztásához
- A menüből válassza a Beszúrás lehetőséget, majd válassza a Sorok lehetőséget három üres sor beszúrásához.
- A felfelé mutató nyíl, majd a jobb nyíl megnyomásával léphet a B2 cellába.
- Nyomja meg a Ctrl X billentyűt a B2 cella kivágásához.
- Nyomja meg a lefelé mutató nyíl, a bal nyíl, majd a Ctrl V billentyűt az A2 cellába történő beillesztéshez.
- Nyomja meg a felfelé mutató nyíl, a jobb nyíl, a jobb nyíl, a Ctrl X, a bal nyíl, a bal nyíl, a lefelé mutató nyíl, a lefelé mutató nyíl, a Ctrl V billentyűkombinációt a C1 és A3 közötti irányba.
- Nyomja meg kétszer a lefelé mutató nyilat, hogy a cellamutató most az A5 sor következő nevén legyen.
- A makró rögzítésének leállításához kattintson az eszköztár "Felvétel leállítása" ikonjára.
Nos, felvetted az első makródat. Lássuk. Válassza az Eszközök> Makró> Makrók lehetőséget. Jelölje ki a listából a Macro1 elemet, és nyomja meg a Szerkesztés gombot. Látnia kellene valamit, ami így néz ki.
Sub Macro1() ' ' Macro1 Macro ' Macro recorded 4/18/99 by Reader ' ' ActiveCell.Offset(1, 0).Range("A1:A3").Select Selection.EntireRow.Insert ActiveCell.Offset(-1, 1).Range("A1").Select Selection.Cut ActiveCell.Offset(1, -1).Range("A1").Select ActiveSheet.Paste ActiveCell.Offset(-1, 2).Range("A1").Select Selection.Cut ActiveCell.Offset(2, -2).Range("A1").Select ActiveSheet.Paste ActiveCell.Offset(2, 0).Range("A1").Select End Sub
Hé, ha Ön nem programozó, az valószínűleg elég félelmetesnek tűnik. Ne hagyd, hogy legyen. Ha van valami, amit nem ért, akkor kiváló segítség van. Kattintson a kurzorra valahol az Eltolás kulcsszóban, és nyomja meg az F1 billentyűt. Ha telepítette a VBA súgófájlt, látni fogja az Offset kulcsszó súgótémáját. A súgó megmondja az utasítás szintaxisát. Azt mondja, hogy Offset (RowOffset, ColumnOffset). Még mindig nem nagyon világos? A súgó teteje közelében keresse meg a zöld, aláhúzott "példa" szót. Az Excel VBA példái lehetővé teszik, hogy megtanulja, mi történik. Az Eltolás példában azt mondja, hogy az aktuális cellától jobbra és két sorral jobbra lévő cellát aktiválja:
ActiveCell.Offset(3, 2).Activate
OK, szóval ez egy nyom. Az eltolás funkció az Excel táblázatban való mozgás egyik módja. Tekintettel erre a kis információra, láthatja, hogy mit csinál a makró. Az első eltolás (1, 0) az, ahol a cellpointert lefelé mozgattuk A2-re. A következő eltolás az, ahol feljebb léptünk egy sorral (-1 sor) és 1 oszlop felett. Lehet, hogy nem értesz mást a makróban, de mégis hasznos.
Menjen vissza az Excel munkalapra. Helyezze a cellamutatóját az A5 cellába. Válassza az Eszközök> Makró> Makrók> Makró1> Futtatás parancsot. A makró fut, és a második címe meg van formázva.
Lehet, hogy azt állítja, hogy az egész hosszú, nagy parancssor kiválasztása nehezebb, mint csak kézzel formázni. OK, majd tegye az Eszközök> Makró> Makrók> Opciók parancsot. Tegyük fel, hogy a parancsikon mezőben a Ctrl + w a makró parancsikonja. Kattintson az OK gombra, majd a Mégse gombbal utasítsa el a Makró párbeszédpanelt. Amikor megnyomja a Ctrl w billentyűt, a makró futni fog. A címet egyetlen gombnyomással formázhatja.
Készen állsz a nagy időre? Hány címed maradt? Néhányszor eltaláltam a Ctrl wa-t, így 395 maradt. Menj vissza a makróhoz. A teljes makrokódot hurokba fogjuk tenni. Helyezzen be egy új sort, amely a következőt írja: "Add -ig activecell.value =" "" a makrokód első sora elé. Helyezzen be egy sort, amelyen a "Hurok" felirat olvasható. A Do hurok mindent végrehajt a Do és a Loop sor között, amíg egy üres sorba nem fut. A makró most így néz ki:
Sub Macro1() ' ' Macro1 Macro ' Macro recorded 4/18/99 by Reader ' ' Do Until ActiveCell.Value = "" ActiveCell.Offset(1, 0).Range("A1:A3").Select Selection.EntireRow.Insert ActiveCell.Offset(-1, 1).Range("A1").Select Selection.Cut ActiveCell.Offset(1, -1).Range("A1").Select ActiveSheet.Paste ActiveCell.Offset(-1, 2).Range("A1").Select Selection.Cut ActiveCell.Offset(2, -2).Range("A1").Select ActiveSheet.Paste ActiveCell.Offset(2, 0).Range("A1").Select Loop End Sub
Térjen vissza az Excel lapjára. Helyezze a cella mutatót a következő névre. A Ctrl w megnyomásával a makró néhány másodperc alatt megformázza az összes rekordot.
The authors of Excel books say that you can not do anything useful by recording a macro. Not true! For the person who was going to have to cut and paste 800 times, this macro is very useful. It took a few minutes to record and customize. Yes, professional programmers will point out that the code is horribly inefficient. Excel puts a whole bunch of stuff in there that it does not need to put in there. Yes, if you knew what you are doing, you can accomplish the same task with half the lines which will run in 1.2 seconds instead of 3 seconds. SO WHAT? 3 seconds is far faster than the 30 minutes the task would have taken.
Some more tips for beginning macro recorders:
- The apostrophe is used do indicate a comment. Anything after the apostrophe is ignored by VBA
- This is object oriented programming. The basic syntax is object.action. If a object oriented compiler were playing soccer, it would say "ball.kick" in order to kick the ball. So "Selection.Cut" says to do an "edit> cut" on the current selection.
- In the above example, the Range modifiers are relative to the active cell. If the active cell is in B2 and you say "ActiveCell.Range("A1:C3").Select", then you select the 3 row by 3 column area starting in cell B2. In other words, you select B2:D4. Saying "ActiveCell.Range("A1")" says to select the 1 x 1 cell range starting with the active cell. This is incredibly redundant. It is equivalent to saying "ActiveCell.Select".
- A makró első futtatása előtt mentse el a munkafüzetet. Ilyen módon, ha hibája van, és valami váratlant okoz, bezárása nélkül bezárhat, és visszatérhet a mentett verzióhoz.
Remélhetőleg ez az egyszerű példa bátorságot ad a kezdő makrórögzítőknek, hogy legközelebb egy egyszerű makrót rögzítsen, amikor ismétlődő feladatot hajt végre az Excelben.