Acesta este cel de-al 19-lea sfat săptămânal Excel pe.com. Multe dintre sfaturile Excel implică un fel de truc macro. În această săptămână, pentru utilizatorii Excel care nu au scris niciodată un macro, vă ofer un manual despre cum să înregistrați și apoi să personalizați un macro Excel util.

Să presupunem că aveți 400 de rânduri de date de adresă, așa cum se arată în figura de sus din stânga. Câmpul de nume se află în coloana A, adresa străzii în coloana B, iar orașul în coloana C.
Scopul dvs. este să convertiți datele într-o singură coloană, așa cum se arată în a doua figură.
Această problemă simplă va fi utilizată pentru a ilustra cum să înregistrați, să modificați și apoi să rulați o macro simplă.
Pentru utilizatorii Excel 95: După înregistrarea macro-ului, Excel va pune macro-ul pe o foaie numită Module1 în registrul dvs. de lucru. Puteți doar să faceți clic pe foaie pentru a accesa macro-ul.
Deși există 400 de înregistrări în această foaie de lucru, vreau să înregistrez o mică parte din macro care are grijă doar de prima adresă. Macrocomanda va presupune că pointerul este pe prenume. Se vor introduce trei rânduri goale. Acesta va copia celula din dreapta celulei originale în celula de sub celula originală. Va copia celula orașului în celula 2 rânduri sub celula originală. Apoi ar trebui să mutați indicatorul celulei în jos, astfel încât să fie pe numele următor.
Cheia este să gândiți acest proces înainte de al înregistra. Nu doriți să faceți multe greșeli atunci când înregistrați macro-ul.
Deci, puneți indicatorul de celulă în celula A1. Accesați meniul și selectați Instrumente> Macro> Înregistrați o nouă macro. Caseta de dialog Înregistrare macro sugerează un nume de Macro1. Este bine, așa că apasă OK.
Înregistratorul de macrocomenzi Excel are o setare implicită foarte stupidă pe care trebuie să o schimbați absolut pentru ca această macrocomandă să funcționeze. În Excel 95, accesați Instrumente> Macro> Utilizați referințe relative În Excel 97-2003, faceți clic pe a doua pictogramă din bara de instrumente Înregistrare oprire. Pictograma arată ca o foaie de lucru mică. O celulă roșie din C3 indică o altă celulă roșie din A3. Pictograma se numește Referință relativă. Când această pictogramă este activată, există o anumită culoare în jurul pictogramei. Pictograma reține ultima setare din sesiunea Excel curentă, deci este posibil să trebuiască să faceți clic pe ea de câteva ori pentru a afla ce metodă este sau nu activată. În Excel 2007, utilizați Vizualizare - Macro - Utilizați referințe relative.
OK, suntem gata să plecăm. Urmați acești pași:
- Apăsați săgeata în jos o dată pentru a vă deplasa la celula B1.
- Țineți apăsată tasta Shift și apăsați săgeata în jos de două ori pentru a selecta rândurile 2, 3 și 4
- Din meniu, selectați Inserare, apoi selectați Rânduri pentru a insera trei rânduri goale.
- Apăsați săgeata sus și apoi săgeata dreapta pentru a vă deplasa la celula B2.
- Apăsați Ctrl X pentru a tăia celula B2.
- Apăsați pe săgeata în jos, pe săgeata spre stânga, apoi pe Ctrl V pentru a lipi în celula A2.
- Săgeată în sus, săgeată în dreapta, săgeată în dreapta, Ctrl X, săgeată în stânga, săgeată în stânga, săgeată în jos, săgeată în jos, Ctrl V pentru a muta C1 la A3.
- Apăsați de două ori săgeata în jos, astfel încât indicatorul de celulă să fie acum pe următorul nume din rândul A5.
- Faceți clic pe pictograma „Opriți înregistrarea” de pe bara de instrumente pentru a opri înregistrarea macro-ului.
Ei bine, ați înregistrat prima dvs. macro. Hai să aruncăm o privire. Accesați Instrumente> Macro> Macro. Din listă, evidențiați Macro1 și apăsați butonul Editare. Ar trebui să vedeți ceva care arată așa.
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
Hei, dacă nu ești programator, probabil că pare destul de intimidant. Nu-l lăsa să fie. Dacă există ceva ce nu înțelegeți, există un ajutor excelent. Faceți clic pe cursorul dvs. undeva în cuvântul cheie Offset și apăsați F1. Cu condiția să instalați fișierul de ajutor VBA, veți vedea subiectul de ajutor pentru cuvântul cheie Offset. Ajutorul vă arată sintaxa declarației. Se spune că este Offset (RowOffset, ColumnOffset). Încă nu e foarte clar? Căutați cuvântul verde subliniat „exemplu” în partea de sus a ajutorului. Exemplele VBA ale Excel vă vor permite să aflați ce se întâmplă. În exemplul Offset, se spune că pentru a activa celula două rânduri dedesubt și trei rânduri la dreapta celulei curente, veți utiliza:
ActiveCell.Offset(3, 2).Activate
OK, deci acesta este un indiciu. Funcția de compensare este un mod de a vă deplasa în jurul foii de calcul Excel. Având în vedere aceste informații, puteți vedea ce face macro-ul. Primul offset (1, 0) este locul în care am mutat indicatorul celular în jos la A2. Următorul Offset este locul în care ne-am deplasat în sus un rând (-1 rânduri) și peste 1 coloană. Este posibil să nu înțelegeți nimic altceva în macro, dar este totuși util.
Reveniți la foaia de lucru Excel. Puneți indicatorul de celulă în celula A5. Alegeți Instrumente> Macro> Macro> Macro1> Executare. Macrocomanda rulează și a doua adresă este formatată.
S-ar putea să spuneți că selectarea întregului șir lung de comenzi este mai dificilă decât formatarea manuală. OK, apoi faceți Instrumente> Macro> Macro> Opțiuni. În caseta de comenzi rapide, spuneți Ctrl + w este tasta de comandă rapidă pentru această macrocomandă. Faceți clic pe OK, apoi închideți dialogul Macro cu Anulare. Acum, când apăsați Ctrl w, macro-ul va rula. Puteți formata o adresă printr-o singură apăsare de tastă.
Ești pregătit pentru marele timp? Câte adrese mai aveți? Am lovit Ctrl wa de câteva ori, așa că mai am 395. Reveniți la macro-ul dvs. Vom pune întregul cod macro într-o buclă. Introduceți o nouă linie care spune „Do Until activecell.value =" "" înainte de prima linie de cod macro. Introduceți o linie care spune „Buclă” înainte de linia End Sub. Bucla Do va executa totul între linia Do și Linia Loop până când va rula într-o linie goală. Macrocomanda arată acum:
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
Reveniți la foaia dvs. Excel. Puneți indicatorul de celulă pe următorul nume. Apăsați pe Ctrl w și macro-ul va format toate înregistrările dvs. în câteva secunde.
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".
- Salvați registrul de lucru înainte de a rula o macro pentru prima dată. În acest fel, dacă are o eroare și face ceva neașteptat, puteți închide fără a salva și reveni la versiunea salvată.
Sperăm că acest exemplu simplu vă va oferi înregistratorilor de macrocomenzi începători curajul de a înregistra o macro simplă data viitoare când aveți o sarcină recurentă de efectuat în Excel.