Toto je 19. týždenný tip na Excel na.com. Mnoho tipov pre program Excel zahŕňa určitý druh triku s makrami. Tento týždeň ponúknem používateľom programu Excel, ktorí nikdy nenapísali makro, základné informácie o tom, ako zaznamenať a potom prispôsobiť užitočné makro programu Excel.

Povedzme, že máte 400 riadkov údajov o adrese, ktoré sa zobrazujú na hornom obrázku vľavo. Pole pre meno je v stĺpci A, ulica v stĺpci B a mesto v stĺpci C.
Vaším cieľom je previesť údaje do jedného stĺpca, ako je ten, ktorý je uvedený na druhom obrázku.
Tento jednoduchý problém bude použitý na ilustráciu toho, ako zaznamenať, upraviť a potom spustiť jednoduché makro.
Pre používateľov aplikácie Excel 95: Po zaznamenaní makra program Excel umiestni vaše makro na hárok s názvom Module1 v zošite. Na prístup k makru stačí kliknúť na hárok.
Aj keď je v tomto pracovnom hárku 400 záznamov, chcem zaznamenať malú časť makra, ktoré sa stará iba o prvú adresu. Makro bude predpokladať, že bunkový ukazovateľ je na meno. Vloží tri prázdne riadky. Skopíruje bunku napravo od pôvodnej bunky do bunky pod pôvodnou bunkou. Skopíruje mestskú bunku do bunky 2 riadky pod pôvodnou bunkou. Potom by mal posunúť ukazovateľ bunky nadol, takže je na ďalšie meno.
Kľúčom je tento proces premyslieť skôr, ako ho zaznamenáte. Pri nahrávaní makra nechcete robiť veľa chýb.
Umiestnite ukazovateľ na bunku do bunky A1. Prejdite do ponuky a vyberte položky Nástroje> Makro> Zaznamenať nové makro. Dialógové okno Záznam makra naznačuje názov Macro1. To je v poriadku, takže stlačte OK.
Záznamník makier programu Excel má jedno veľmi hlúpe predvolené nastavenie, ktoré musíte bezpodmienečne zmeniť, aby toto makro fungovalo. V programe Excel 95 prejdite do ponuky Nástroje> Makro> Použiť relatívne referencie V programe Excel 97-2003 kliknite na druhú ikonu na paneli s nástrojmi Zastaviť nahrávanie. Ikona vyzerá ako malý pracovný hárok. Červená bunka v C3 ukazuje na ďalšiu červenú bunku v A3. Ikona sa volá Relatívna referencia. Keď je táto ikona zapnutá, okolo ikony je nejaká farba. Ikona si pamätá posledné nastavenie z aktuálnej relácie programu Excel, takže budete musieť dvakrát kliknúť, aby ste zistili, ktorá metóda je alebo nie je. V programe Excel 2007 použite Zobraziť - Makrá - Použiť relatívne referencie.
Dobre, sme pripravení vyraziť. Nasleduj tieto kroky:
- Jedným stlačením šípky nadol sa presuniete do bunky B1.
- Podržte stlačený kláves Shift a dvakrát stlačte šípku nadol, aby ste vybrali riadky 2, 3 a 4
- V ponuke vyberte možnosť Vložiť a potom výberom položky Riadky vložte tri prázdne riadky.
- Stlačením šípky nahor a potom šípky doprava prejdite na bunku B2.
- Stlačením Ctrl X vyrežte bunku B2.
- Stlačením šípky nadol, šípky doľava a potom Ctrl V prilepte do bunky A2.
- Stlačením šípky hore, šípka doprava, šípka doprava, Ctrl X, šípka doľava, šípka doľava, šípka dole, šípka dole, Ctrl V na presun C1 až A3.
- Dvakrát stlačte šípku nadol, aby sa ukazovateľ bunky nachádzal na nasledujúcom mene v riadku A5.
- Kliknutím na ikonu „Zastaviť nahrávanie“ na paneli nástrojov zastavíte nahrávanie makra.
Zaznamenali ste svoje prvé makro. Pozrime sa. Prejdite do ponuky Nástroje> Makro> Makrá. V zozname zvýraznite položku Makro1 a stlačte tlačidlo Upraviť. Mali by ste vidieť niečo, čo vyzerá takto.
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
Hej, ak nie si programátor, vyzerá to asi dosť zastrašujúco. Nenechaj to tak. Ak je niečo, čomu nerozumiete, existuje vynikajúca pomoc. Kliknite na kurzor niekde v kľúčovom slove Posun a stlačte kláves F1. Za predpokladu, že ste nainštalovali súbor pomocníka VBA, uvidíte tému pomoci pre kľúčové slovo Offset. Pomoc vám povie syntax príkazu. Hovorí, že je to offset (RowOffset, ColumnOffset). Stále nie je veľmi jasné? V hornej časti pomocníka vyhľadajte zelené podčiarknuté slovo „príklad“. Príklady Excelu VBA vám umožnia zistiť, o čo ide. V príklade ofsetu sa hovorí, že na aktiváciu bunky o dva riadky nižšie a tri riadky napravo od aktuálnej bunky by ste použili:
ActiveCell.Offset(3, 2).Activate
Dobre, to je stopa. Funkcia odsadenia predstavuje spôsob pohybu po excelovskej tabuľke. Na základe týchto informácií môžete trochu vidieť, čo dané makro robí. Prvý posun (1, 0) je miesto, kde sme presunuli ukazovateľ bunky nadol na A2. Ďalším posunom je miesto, kde sme sa posunuli o jeden riadok vyššie (-1 riadok) a o 1 stĺpec. Možno v makre nebudete rozumieť ničomu inému, ale je to stále užitočné.
Vráťte sa späť do hárka programu Excel. Umiestnite ukazovateľ na bunku do bunky A5. Vyberte Nástroje> Makro> Makrá> Makro1> Spustiť. Makro sa spustí a vaša druhá adresa bude naformátovaná.
Možno si hovoríte, že výber celého tohto dlhého veľkého reťazca príkazov je ťažšie ako iba formátovanie ručne. Dobre, potom urobte Nástroje> Makro> Makrá> Možnosti. V poli skratiek je napríklad klávesová skratka Ctrl + w pre toto makro. Kliknite na OK, potom zatvorte dialógové okno Makro pomocou Zrušiť. Teraz, keď kliknete na Ctrl w, makro sa spustí. Adresu môžete naformátovať jediným stlačením klávesu.
Ste pripravení na veľký čas? Koľko adries vám zostáva? Niekoľkokrát som narazil na Ctrl wa, takže mi ostáva 395. Vráťte sa späť k svojmu makru. Celý kód makra dáme do slučky. Pred prvý riadok kódu makra vložte nový riadok s textom „Do Until activecell.value =" "". Pred riadok End Sub vložte riadok s názvom „Smyčka“. Smyčka Do vykoná všetko medzi riadkom Do a Loop, kým sa nespustí do prázdneho riadku. Makro teraz vyzerá takto:
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
Vráťte sa späť na svoj hárok programu Excel. Umiestnite ukazovateľ bunky na ďalšie meno. Stlačte Ctrl w a makro naformátuje všetky vaše záznamy za niekoľko sekúnd.
Autori kníh v programe Excel tvrdia, že zaznamenaním makra nemôžete urobiť nič užitočné. Nepravda! Pre osobu, ktorá bude musieť 800-krát vystrihnúť a prilepiť, je toto makro veľmi užitočné. Záznam a prispôsobenie trvalo niekoľko minút. Áno, profesionálni programátori upozornia, že kód je strašne neefektívny. Excel tam dáva kopu vecí, ktoré tam nemusí vložiť. Áno, ak ste vedeli, čo robíte, môžete splniť tú istú úlohu s polovičnými riadkami, ktoré bežia namiesto 1,2 sekundy za 1,2 sekundy. NO A ČO? 3 sekundy sú oveľa rýchlejšie ako 30 minút, ktoré by úloha trvala.
Niekoľko ďalších tipov pre začiatočníkov záznamníkov makier:
- Používa sa apostrof na označenie komentára. Čokoľvek po apostrofe je VBA ignorované
- Toto je objektovo orientované programovanie. Základná syntax je object.action. Keby objektovo orientovaný kompilátor hral futbal, povedal by „ball.kick“, aby mohol loptu vyhodiť. Takže „Selection.Cut“ hovorí, že urobí „edit> cut“ aktuálneho výberu.
- Vo vyššie uvedenom príklade sú modifikátory rozsahu relatívne k aktívnej bunke. Ak je aktívna bunka v B2 a vy hovoríte „ActiveCell.Range („ A1: C3 “). Vyberte“, potom vyberiete oblasť stĺpca 3 riadok po 3, ktorá začína v bunke B2. Inými slovami, vyberiete B2: D4. Povedaním „ActiveCell.Range („ A1 “)“ sa hovorí o výbere rozsahu buniek 1 x 1 počnúc aktívnou bunkou. To je neuveriteľne zbytočné. Je to ekvivalent výroku „ActiveCell.Select“.
- Pred prvým spustením makra si uložte zošit. Týmto spôsobom, ak dôjde k chybe a urobí niečo neočakávané, môžete zavrieť bez uloženia a vrátiť sa späť k uloženej verzii.
Dúfajme, že tento jednoduchý príklad poskytne začínajúcim makrofonistom odvahu zaznamenať jednoduché makro, keď nabudúce budete mať v programe Excel opakovanú úlohu.