СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

VBA для MS Excel

Категория: Информатика

Нажмите, чтобы узнать подробности

Представляю вашему вниманию серию уроков по Информатике на тему "VBA для MS Excel".

 

Visual Basic for Applications (VBAVisual Basic для приложений) — немного упрощённая реализация языка программирования Visual Basic, встроенная в линейку продуктов Microsoft Office (включая версии для Mac OS), а также во многие другие программные пакеты, такие как AutoCAD, SolidWorks, CorelDRAW, WordPerfect и ESRI ArcGIS. VBA покрывает и расширяет функциональность ранее использовавшихся специализированных макро-языков, таких как WordBasic.

Просмотр содержимого документа
«VBA для MS Excel»

Заполняем ячеки таблицы
Условие Если... То...

Ячейка Cells

Ячейка в VBA описывается Cells(a, b) через запятую, где
a - это номер строки
b - это номер столбца

Предположим необходимо прописать в первую ячейку первого столбца некоторое число.
Запись будет выглядеть так:

Cells(1, 1) = 123

Если необходимо прописать значение в ячейку на конкретный лист, то запись будет выглядеть следующим образом:

Worksheets("Лист1").Cells(1, 1) = 123

При этом отделение листа и ячейки осуществляется точкой.
Если содержимое ячейки текст, то его необходимо заключать в кавычки.

Worksheets("Лист1").Cells(1, 1) = "Текст"

Условие Если... То...

Иногда требуется выполнение определённого условия. Самое распростронённое как ни странно - это условие Если То.
Запись его выглядит так:

If Then

Else


End If

If - это начало условия, читается как Если
Then - это равносильно российскому То
Else - это равносильно слову Иначе
End If - это закрытие данного условия

Ниже приведён пример его применения.

Sub Primer()

If Cells(1, 1) = 1 Then

Cells(1, 2) = 1

Else

Cells(1, 2) = 0

End If

End Sub

Данный код читается следующим образом. Если ячейка А1 = 1, то В1 = 1, иначе В1 = 0.

Ниже приведён пример с информационными сообщениями.

Sub Primer()

Da = MsgBox("Вам понравился данный пример?", vbYesNo, "Пример")

If Da = vbYes Then

MsgBox "Это хорошо", vbInformation, "Пример"

Else

MsgBox "Печально", vbInformation, "Пример"

End If

End Sub



Работа с диапазоном ячеек
Range

Диапазон ячеек описывается Range( ).

При этом в скобках может находиться не обязательно диапазон ячеек, можно описать и одну ячейку, например, так:

Range("A1").Select

При такой записи произойдёт выделение только одной ячейки А1.

А вот если запись произвести следующим образом:

Range("A1:B3").Select

то произойдёт выделение всего указанного диапазона, в данном случае это А1:В3.
Если произвести следующую запись:

Range("A1:B3")=1

Range("A1:B3")="Текст"

то единица, в первом случае, будет находиться во всём указанном диапазоне (в каждой ячейке будет 1). Аналогичная ситуация во втором случае: слово Текст будет написано во всех ячейках указанного диапазона.

При этом, следующие записи равнозначны:

Range("A1:B3") = "Текст" = Range("A1","B3")="Текст"

А как сделать так, чтобы было одновременно выделено несколько диапазонов?
Очень просто. Выглядеть это будет так:

Range("A1:A4,C1:C3").Select

Range("A1:A3,C1:C3,E2:E5").Select

Как и в примере с ячейками, диапазон можно выделить, изменить и т.п. не обязательно на активном листе, а на каком-нибудь другом. Выглядеть это будет так:

Worksheets("Лист2").Range("A1:B3") = "Текст"

Ну и конечно же диапазон можно задать ячейками:

Range(Cells(1, 1), Cells(3, 3)) = "Текст"



Заливка ячеек

Основные используемые цвета

Раскрасить ячейку, или другими словами, выполнить её заливку можно следующим образом.

Cells(1, 1).interior.colorindex = 1

где 1 - Это цвет.

Таким же образом можно осуществить заливку некоторого диапазона.

Range("A1:D1").interior.colorindex = 1

Ниже показана таблица цветов применяемых при заливке. Всего имеется 56 стандартных цветов.

Справа указан числовой индекс соответствующий определённому цвету.

Альтернативные способы заливки

Если вам мало стандартных 56 цветов и хочется каких-то оттенков, то для этого есть альтернативные способы заливки ячеек. В следующем способе используется RGB политра. И Вы можете выбрать любой цвет из этой политры и выполнить заливку ячейки, диапазона или даже текста. Ниже показан пример заливки ячейки при помощи RGB политры.

Cells(1, 1).Interior.Color = RGB(160, 255, 30)

По такому же принципу выполняем заливку диапазона:

Range("A2:D2").Interior.Color = RGB(40, 255, 120)



Кнопка без фиксации
Элемент ActiveX

Естественно охото, чтобы наша программа работала от какой-то команды, например, при нажатии на кнопку. Добавить кнопку на лист не сложно.

Открываем на ленте вкладку "Разработчик" и выбираем пиктограмму "Вставить" / "Элементы ActiveX".

Выбираем данную кнопку и придаём ей нужный размер. Переименовать кнопку можно нажав ПКМ и выбрав пункт "Объект CommandButton" / "Edit".

В принципе кнопка готова в употребление. Теперь можно назначить на неё макрос нажав двойным щелчком ЛКМ по нашей кнопке. При этом откроется окно редактирования VB. Где задастся автоматически начало и конец нашего макроса.

Сюда уже можно вписать наш программный код, но не забываем выключить "Режим конструктора"перед запуском макроса, например, такого:

Private Sub CommandButton1_Click()

MsgBox "Привет"

End Sub

Теперь при нажатии на нашу кнопку будет выпоняться какой-то код, заключённый между началом и концом нашего макроса.

Private Sub CommandButton1_Click() 'Начало

..................

Тут распологается наш код, который будет выполняться при нажатии на кнопку

..................

End Sub 'Конец



Кнопка без фиксации
Элемент ActiveX

Естественно охото, чтобы наша программа работала от какой-то команды, например, при нажатии на кнопку. Добавить кнопку на лист не сложно.

Открываем на ленте вкладку "Разработчик" и выбираем пиктограмму "Вставить" / "Элементы ActiveX".

Выбираем данную кнопку и придаём ей нужный размер. Переименовать кнопку можно нажав ПКМ и выбрав пункт "Объект CommandButton" / "Edit".

В принципе кнопка готова в употребление. Теперь можно назначить на неё макрос нажав двойным щелчком ЛКМ по нашей кнопке. При этом откроется окно редактирования VB. Где задастся автоматически начало и конец нашего макроса.

Сюда уже можно вписать наш программный код, но не забываем выключить "Режим конструктора"перед запуском макроса, например, такого:

Private Sub CommandButton1_Click()

MsgBox "Привет"

End Sub

Теперь при нажатии на нашу кнопку будет выпоняться какой-то код, заключённый между началом и концом нашего макроса.

Private Sub CommandButton1_Click() 'Начало

..................

Тут распологается наш код, который будет выполняться при нажатии на кнопку

..................

End Sub 'Конец











Кнопка без фиксации
Элемент ActiveX

Естественно охото, чтобы наша программа работала от какой-то команды, например, при нажатии на кнопку. Добавить кнопку на лист не сложно.

Открываем на ленте вкладку "Разработчик" и выбираем пиктограмму "Вставить" / "Элементы ActiveX".

Выбираем данную кнопку и придаём ей нужный размер. Переименовать кнопку можно нажав ПКМ и выбрав пункт "Объект CommandButton" / "Edit".

В принципе кнопка готова в употребление. Теперь можно назначить на неё макрос нажав двойным щелчком ЛКМ по нашей кнопке. При этом откроется окно редактирования VB. Где задастся автоматически начало и конец нашего макроса.

Сюда уже можно вписать наш программный код, но не забываем выключить "Режим конструктора"перед запуском макроса, например, такого:

Private Sub CommandButton1_Click()

MsgBox "Привет"

End Sub

Теперь при нажатии на нашу кнопку будет выпоняться какой-то код, заключённый между началом и концом нашего макроса.

Private Sub CommandButton1_Click() 'Начало

..................

Тут распологается наш код, который будет выполняться при нажатии на кнопку

..................

End Sub 'Конец



Кнопка с фиксацией
Элемент ActiveX

Естественно охото, чтобы наша программа работала от какой-то команды, например, при нажатии на кнопку. Добавить кнопку на лист не сложно.

Открываем на ленте вкладку "Разработчик" и выбираем пиктограмму "Вставить" / "Элементы ActiveX".

Выбираем данную кнопку и придаём ей нужный размер. Переименовать кнопку можно нажав ПКМ и выбрав пункт "Объект ToggleButton" / "Edit".

В принципе кнопка готова в употребление. Теперь можно назначить на неё макрос нажав двойным щелчком ЛКМ по нашей кнопке. При этом откроется окно редактирования VB. Где задастся автоматически начало и конец нашего макроса.

Private Sub ToggleButton1_Click()


End Sub

Сюда уже можно вписать наш программный код, но не забываем что наша кнопка с фиксацией и может выполнять две функции - когда в нажатом состоянии и наоборот в отпущенном.

Тут мы можем воспользоваться условием Если... То. И наш код будет выглядеть так, например,:

Private Sub ToggleButton1_Click()

If ToggleButton1 = True Then

MsgBox "Я кнопка. И я в нажатом состоянии"

Else

MsgBox "Я кнопка. И я в отпущенном состоянии"

End If

End Sub

Если Вас не устраивает такое длинно название кнопки ToggleButton1, то вы можете сами задать ей любое имя. Нажимаете по кнопке правой кнопкой мыши и выбираете из выпадающего списка пунктСвойства.

В открывшемся окне возможно изменять настройки кнопки. В самой верхней строчке написано имя нашей кнопки, которое можно изменить.

Попробуем заменить его на имя Knopka и выполним двойной щелчёк по кнопке, для того чтобы попасть в окно редактирования VBA. При этом код в открывшемся окне будет начинаться так:

Private Sub Knopka_Click()


End Sub

В данном свойстве объекта возможно изменять не только имя кнопки, но и её цвет, высоту, ширину и прочие параметры.

Галочку поставить на лист просто. Всё там же. Открываем на ленте вкладку "Разработчик" и выбираем пиктограмму "Вставить" / "Элементы ActiveX".

После выбора данного флажка, его естественно надо как-то описать, чтобы он выполнял какую-то функцию на нашем листе. Данный элемент ActiveX также имеет два состояния - это флажок поставлен и флажок снят. Следовательно описать его можно следующим образом.

Private Sub CheckBox1_Click()

If CheckBox1 = True Then

Cells(1, 1).Interior.ColorIndex = 1

Else

Cells(1, 1).Interior.ColorIndex = xlNone

End If

End Sub

Этот макрос выполняет следующие действия:
- при поставленной галочке ячейка А1 принимает чёрный цвет
- при снятой галочке ячейка A1 обесцвечивается

CheckBox1 - это и есть наш флажок, цифра 1 означает, что это флажок №1. Если их несколько, то будет дальнейшая автоматическая нумерация флажков согласно их количеству в нашем документе.

_Click - означает, что наш макрос активируется при нажатии на флажок.

Необязательно чтобы наш макрос активизировался при установлении флажка. Его имя так же можно задействовать в другом макросе. И выглядеть это будет, например, так:

Private Sub CommandButton1_Click()

If CheckBox1 = True Then

MsgBox "Флажок установлен", vbInformation, "Пример"

Else

MsgBox "Флажок снят", vbInformation, "Пример"

End If

End Sub

Переименовать нашу галочку возможно следующим образом:

Нажимаем ПКМ на нашем чекбоксе и выбираем пункт Объект CheckBox / Edit.

Радиопереключатель поставить на какой-либо лист просто. Открываем на ленте вкладку "Разработчик" и выбираем пиктограмму "Вставить" / "Элементы ActiveX".

После выбора переключателя, его надо как-то описать, чтобы он выполнял какую-то функцию на нашем листе. Данный элемент ActiveX также имеет два состояния как и флажок. Это переключатель в активном состоянии и переключатель в деактивированном состоянии. Но при этом таких переключателей на листе может быть большое количество, а истинным (на котором пал выбор пользователя) может быть только один. Следовательно, программный код можно записать, например, так:

Sub Kod()

If OptionButton1 = True Then

MsgBox "Активирован радиопереключатель №1", vbInformation, "Пример"

End If

If OptionButton2 = True Then

MsgBox "Активирован радиопереключатель №2", vbInformation, "Пример"

End If

If OptionButton3 = True Then

MsgBox "Активирован радиопереключатель №3", vbInformation, "Пример"

End If

End Sub

Это показан всего лишь один из вариантов применения переключателя. В данном примере показано решение на трёх переключателях. Возможно сделать и так, чтобы наш макрос выполнялся непосредственно после активации какого либо переключателя. Выглядеть это будет к примеру так:

Private Sub OptionButton1_Click()

MsgBox "Активирован радиопереключатель №1", vbInformation, "Пример"

End Sub

После выбора нашего переключателя появится информационное сообщение:

Нажимаем ПКМ (Правую Кнопку Мыши) на нашем переключателе и выбираем пункт Объект OptionButton / Edit и переименовываем переключатели в необходимые нам имена.







Линейка прокрутки ScrollBar
Элемент ActiveX

Что же такое линейка прокрутки, как ей пользоваться и с чем её едят?

Открываем на ленте вкладку "Разработчик" и выбираем пиктограмму "Вставить" / "Элементы ActiveX".

Придаем необходимый размер и положение нашей полосе и приступаем к дальнейшим шагам по её функциональности. Данный элемент ActiveX является так называемой переменной, которая может изменять свои значения от одной величины до другой. То есть некий диапазон.

Для того чтобы задать нашему диапазону какой то минимум и максимум необходимо нажать ПКМ наScrollBar (полосе прокрутки) и выбрать пункт Свойства, при этом откроется такое окно свойств объекта, в котором возможна его настройка и изменение его параметров:

В этом окне возможно изменеие параметров и свойств нашего объекта начиная от изменения имени и заканчива шириной. Но нас в данный момент интересует только три основных параметра и два вопроса:

1. Как же задать диапазон минимального и максимального значения?
2. Что же будет происходить когда мы будем её прокручивать?
Сейчас мы это и посмотрим.

Находим слово Max в появившемся окне и слово Min. Это и есть наше минимальное и максимальное значение. Устанавливаем интересующий нас диапазон в эти строки, например, от 0 до 100. Теперь надо сделать так чтобы эта информация играла какую-то роль, то-есть что-то у нас изменялось и, конечно хочется видеть эти изменения. Теперь в этом же окне находим слово LinkedCell. Это и есть тот самый параметр, который может показать нам эти изменения. Занесём в этот параметр, например, ячейку A1 (не забываем, что пишем английской раскладкой) и посмотрим что получилось. Окно свойств объекта в этом случае будет выглядеть следующим образом:

Повращаем нашей прокруткой от минимума до максимума и от максимума до минимума. И если всё сделано правильно, то в ячейке A1 значение будет меняться от 0 до 100. При этом как бы мы не меняли размеры линейки прокрутки, значение всё равно будет от 0 до 100.



Недавно мы с вами рассмотрели какие информационные сообщения существуют в Excel на базе Visual Basic, слава Богу существует множество таких сообщений, которые можно впихивать куда угодно.

Теперь я покажу такое сообщение, которое можно не только смотреть и выбирать кнопочку для необходимого нам ответа, а сообщение, в которое можно вводить необходимую нам информацию, которая в последствии может сыграть какую-то значительную роль в нашей программе.

Сообщение ввода возможно описать следующим образом.

Private Sub CommandButton1_Click()

InputBox "Введите значение от 0 до 1000", "Пример"

End Sub

Но данная запись нам только покажет это сообщение как оно есть, и считать с него вводимые данные очень сложно. Для того чтобы распознать вводимые данные и передать их дальше для обработки данное сообщение лучше записывать следующим образом.

Private Sub CommandButton1_Click()

R = InputBox("Введите значение от 0 до 1000", "Пример")

If R 0 Then

Cells(1, 1) = R

End If

End Sub

При такой записи наша переменная R принимает то значение, которое мы ввели. И теперь его можно обрабатывать так как нам угодно.

Если у нас есть какое-то число, или какие-то данные, по умолчанию, и необходимо сделать так, чтобы эти данные автоматически прописывались в сообщении то макрос необходимо записать так:

Private Sub CommandButton1_Click()

R = InputBox("Введите значение от 0 до 1000", "Пример", "500")

If R 0 Then

Cells(1, 1) = R

End If

End Sub

Сообщение примет следующий образ: