Ово је 19. седмични Екцел-ов савет на.цом. Многи Екцел савети укључују неку врсту макро трика. Ове недеље, за кориснике програма Екцел који никада нису написали макро, нудим приручник о начину снимања, а затим прилагођавању корисног Екцел макронаредбе.

Рецимо да имате 400 редова података о адресама попут оних приказаних на горњој слици лево. Поље имена је у колони А, адреса улице у колони Б, а град у колони Ц.
Ваш циљ је да податке претворите у једну колону попут оне приказане на другој слици.
Овај једноставан проблем користиће се за илустрацију снимања, модификовања и покретања једноставног макронаредбе.
За кориснике програма Екцел 95: Након снимања макронаредбе, Екцел ће ваш макро ставити на лист назван Модуле1 у вашој радној свесци. Можете само кликнути на лист да бисте приступили макроу.
Иако на овом радном листу постоји 400 записа, желим да снимим мали делић макронаредбе који се брине само о првој адреси. Макро ће претпоставити да је показивач ћелије на првом имену. Убациће три празна реда. Копираће ћелију десно од оригиналне ћелије у ћелију испод оригиналне ћелије. Копираће градску ћелију у ћелију 2 реда испод оригиналне ћелије. Затим би требало да помери показивач ћелије надоле, тако да је на следећем имену.
Кључно је размислити о овом процесу пре него што га снимате. Не желите да правите много грешака приликом снимања макронаредбе.
Дакле, ставите показивач ћелије у ћелију А1. Идите у мени и одаберите Тоолс> Мацро> Рецорд нев Мацро. Дијалог Снимање макроа сугерише име Макро1. Ово је у реду, па притисните ОК.
Екцел макро снимач има једну врло глупу подразумевану поставку коју морате апсолутно променити да би овај макро радио. У програму Екцел 95 идите на Алатке> Макро> Коришћење релативних референци У програму Екцел 97-2003 кликните другу икону на траци са алаткама Заустави снимање. Икона изгледа као мали радни лист. Црвена ћелија у Ц3 указује на другу црвену ћелију у А3. Икона се зове Релативна референца. Када је ова икона „укључена“, око иконе постоји нека боја. Икона памти последњу поставку из тренутне Екцел сесије, па ћете можда морати да је кликнете неколико пута да бисте утврдили који је метод укључен или не. У програму Екцел 2007 користите Поглед - Макронаредбе - Користите релативне референце.
ОК, спремни смо за полазак. Пратите ове кораке:
- Притисните једном стрелицу надоле да бисте се преселили у ћелију Б1.
- Држите притиснут тастер Схифт и притисните два пута стрелицу надоле да бисте изабрали редове 2, 3 и 4
- Из менија одаберите Уметни, а затим одаберите Редови да бисте уметнули три празна реда.
- Притисните стрелицу нагоре, а затим стрелицу надесно да бисте прешли у ћелију Б2.
- Притисните Цтрл Кс да бисте исекли ћелију Б2.
- Притисните стрелицу надоле, леву стрелицу, а затим Цтрл В да бисте је залепили у ћелију А2.
- Притисните стрелицу нагоре, стрелицу надесно, стрелицу надесно, Цтрл Кс, стрелицу лево, стрелицу лево, стрелицу надоле, стрелицу надоле, Цтрл В да бисте померили Ц1 до А3.
- Двапут притисните стрелицу надоле тако да се показивач ћелије сада налази на следећем имену у реду А5.
- Кликните икону „Стоп Рецординг“ на траци са алаткама да бисте зауставили снимање макронаредбе.
Па, снимили сте свој први макро. Хајде да погледамо. Идите на Алатке> Макро> Макрои. На листи означите Мацро1 и притисните дугме Едит. Требали бисте видети нешто што изгледа овако.
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
Хеј, ако ниси програмер, то вероватно изгледа прилично застрашујуће. Не дозволи да буде. Ако постоји нешто што не разумете, постоји изврсна помоћ. Кликните на курсор негде у кључној речи Оффсет и притисните Ф1. Под условом да сте инсталирали датотеку помоћи ВБА, видећете тему помоћи за кључну реч Оффсет. Помоћ вам говори синтаксу израза. Каже да је Оффсет (РовОффсет, ЦолумнОффсет). Још увек није баш јасно? Потражите зелено подвучену реч „пример“ при врху помоћи. Екцел-ови примери ВБА омогућиће вам да научите шта се догађа. У примеру Оффсет, каже се да бисте активирали ћелију два реда испод и три реда десно од тренутне ћелије, користили бисте:
ActiveCell.Offset(3, 2).Activate
ОК, то је траг. Функција померања је начин кретања по Екцел табели. Имајући у виду овај део информација, можете некако да видите шта макро ради. Прво померање (1, 0) је место где смо померили показивач ћелије доле на А2. Следећи помак је место где смо се померили за један ред горе (-1 ред) и преко 1 колоне. Можда ништа друго не разумете у макронаредби, али је и даље корисно.
Вратите се на Екцел радни лист. Ставите показивач ћелије у ћелију А5. Одаберите Алати> Макро> Макро> Макро1> Покрени. Макро се покреће и ваша друга адреса је форматирана.
Можда кажете да је одабир овог дугачког великог низа наредби теже него само форматирање руком. У реду, а затим урадите Алатке> Макро> Макро> Опције. У пољу за пречице реците да је Цтрл + в пречица за овај макро. Кликните на У реду, а затим одбаците дијалог Макро са Откажи. Сада, када притиснете Цтрл в, макро ће се покренути. Адресу можете форматирати једним притиском тастера.
Јесте ли спремни за велико време? Колико адреса вам је остало? Погодила сам Цтрл ва неколико пута, па ми је остало 395. Вратите се свом макронаредби. Ставићемо цео макро код у петљу. Убаците нови ред који каже „До До ацтивецелл.валуе =" "" пре првог реда кода макронаредби. Убаците ред који каже „Лооп“ пре краја Енд лине. Петља До извршиће све између линије До и петље све док не наиђе на празан ред. Макро сада изгледа овако:
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
Вратите се на свој Екцел лист. Поставите показивач ћелије на следеће име. Притисните Цтрл в и макро ће форматирати све ваше записе за неколико секунди.
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".
- Сачувајте радну свеску пре првог покретања макронаредбе. На овај начин, ако има грешку и учини нешто неочекивано, можете да затворите без чувања и вратите се на сачувану верзију.
Надамо се да ће вам овај једноставан пример дати храброст снимачима макроа почетника да следећи пут када поновите задатак у Екцел-у снимите једноставан макро.