Программирование макросов в Эксель

advertisement
Программирование макросов в Эксель.
Объявление переменных, использование циклов.
Макросы можно не только записывать как последовательность команд, их можно
создавать вручную.
Исходный код макроса, записанного вручную.
Допустим, у нас есть заказ на закупку продуктов. Нам нужно подсчитать общую
стоимость. Заказы поступают нам в таком виде регулярно и каждый раз одинаково их
обрабатывать неудобно.
Воспользуемся макросом, чтобы решить эту задачу.
Начинаем запись макроса и вручную производим все необходимые действия. Когда все
необходимые действия выполнены, останавливаем запись макроса.
Теперь если мы создадим новый лист с таблицей такой же структуры (новый заказ), мы
сможем все те же действия выполнить быстрее.
Открываем макросы, нажимаем кнопку «Выполнить» и получаем автоматически
добавленный столбец со стоимостью и итог.
Это прекрасно, но почему так происходит? Что делает макрос? Чтобы ответить на этот
вопрос нужно увидеть, что из себя представляет макрос.
Макрос это программа, написанная на языке VBA – Visual Basic for Applications. Давайте
увидим исходный код этой программы. Для этого открываем список макросов (Alt + F8) и
нажимаем кнопку «Изменить»
Перед нами предстает исходный код этой программы.
В этом исходном коде отражается то, что я делал, когда записывал макрос.
Range("E2").Select
Я выбрал диапазон - одну ячейку «E2»
ActiveCell.FormulaR1C1 = "=RC[-3]*RC[- Внес в эту активную ячейку «E2» формулу
2]"
для расчета стоимости. И нажал «Enter»
Range("E2").Select
Selection.Copy
Range("E2:E5").Select
ActiveSheet.Paste
Потом я вновь выделил эту ячейку. Нажал
Ctrl+C – копировать. Выделил ячейки «E2:E5»
и нажал Ctrl+V – вставить.
Range("E6").Select
ActiveCell.FormulaR1C1
4]C:R[-1]C)"
=
В ячейку «E6» я ввел формулу для подсчета
"=SUM(R[- общей стоимости.
Range("E1").Select
ActiveCell.FormulaR1C1 = "стоимость"
Range("D6").Select
ActiveCell.FormulaR1C1 = "итог"
Range("E6").Select
Selection.Font.Bold = True
Selection.Font.Underline =
xlUnderlineStyleSingle
Range("D6:E6").Select
With Selection.Interior
.ColorIndex = 36
.Pattern = xlSolid
End With
В ячейку «E1» я ввел слово «стоимость».
В ячейку «D6» я ввел слово «итог».
Range("G13").Select
Ну и выделил какую-то ячейку
В ячейке «E6» я поставил жирный шрифт и
подчеркивание.
Я выделил ячейки «D6:E6» и сделал заливку
светло-желтым цветом.
Каждый раз, когда мы запускаем этот макрос, он выполнят ровно то, что ему было
указано на выбранном листе Эксель.
Теперь предположим, что нужно сделать всё, то же самое, но количество строк в заказе не
всегда равно четырем. Их может быть и три и двадцать три.
Программирование макроса вручную.
Создание собственного макроса.
Для того, чтобы попрактиковаться в программировании создадим второй макрос. Просто
берем копируем исходный текст макроса 1, копируем его, вставляем рядом и называем
«МойМакрос» и удаляем из него весь текст кроме «Sub МойМакрос()
End Sub».
Можно убедиться, что в Экселе при этом в списке макросов появился добавленный нами
макрос. Если сейчас нажать кнопку «выполнить», то ничего не произойдет, поскольку
макрос не содержит никаких команд.
Определение переменных, использование цикла для поиска последней строки.
Итак, перед нами стоит проблема поиска последней строки.
Как это обычно делает человек? Он просматривает таблицу и находит последнюю
заполненную строчку.
Давайте проделаем то же самое это в программе. На нужно будет её найти и запомнить её
номер.
Для начала нам потребуется объявить переменную, в которой мы сохраним её номер.
Для этого пишем «Dim n» - n – это наша переменная.
Я также создам переменную счетчик - «Dim i» и буду её использовать в цикле для
перехода между ячейками.
Ниже приведен текст макроса, при выполнении которого последовательно выделяются
ячейки столбца «А» до тех пор пока не будет найдена пустая ячейка.
Здесь используется цикл While.
Синтаксис здесь следующий
While <Условие>
<Команды>
Wend
Работает он следующим образом – пока выполняется условие, обрабатываются команды
указанные в цикле.
Когда условие перестает выполняться, программы обрабатывает команды, укзанные после
цикла.
Wend – по сути это просто While End – то, есть конец цикла While.
Символ «&» используется для объединения текстовых значений в единый текст – в
данном случае текста «A» и номера «i» в единый адрес «A2», для случая когда i=2.
Вставка формул итогов и форматирование.
Далее весь код программы очень похож на то, что было ранее за исключением того, что он
заточен не на фиксированное количество строк, а на произвольное.
Комментарии вставлены в сам текст программы.
Возможно, раньше вы заметили, что внешний вид формул отличался от привычного.
На самом деле, тот же стиль формул будет, если поставить в настройках Экселя стиль
ссылок R1C1. Поскольку мне удобнее писать адреса ячеек в другом формате, поэтому я
использую не «ActiveCell.FormulaR1C1», а «ActiveCell.Formula».
Подготовил Прохор Лейкин.
Download