Время на прочтение
7 мин
Количество просмотров 312K
Приветствую всех.
В этом посте я расскажу, что такое VBA и как с ним работать в Microsoft Excel 2007/2010 (для более старых версий изменяется лишь интерфейс — код, скорее всего, будет таким же) для автоматизации различной рутины.
VBA (Visual Basic for Applications) — это упрощенная версия Visual Basic, встроенная в множество продуктов линейки Microsoft Office. Она позволяет писать программы прямо в файле конкретного документа. Вам не требуется устанавливать различные IDE — всё, включая отладчик, уже есть в Excel.
Еще при помощи Visual Studio Tools for Office можно писать макросы на C# и также встраивать их. Спасибо, FireStorm.
Сразу скажу — писать на других языках (C++/Delphi/PHP) также возможно, но требуется научится читать, изменять и писать файлы офиса — встраивать в документы не получится. А интерфейсы Microsoft работают через COM. Чтобы вы поняли весь ужас, вот Hello World с использованием COM.
Поэтому, увы, будем учить Visual Basic.
Чуть-чуть подготовки и постановка задачи
Итак, поехали. Открываем Excel.
Для начала давайте добавим в Ribbon панель «Разработчик». В ней находятся кнопки, текстовые поля и пр. элементы для конструирования форм.
Появилась вкладка.
Теперь давайте подумаем, на каком примере мы будем изучать VBA. Недавно мне потребовалось красиво оформить прайс-лист, выглядевший, как таблица. Идём в гугл, набираем «прайс-лист» и качаем любой, который оформлен примерно так (не сочтите за рекламу, пожалуйста):
То есть требуется, чтобы было как минимум две группы, по которым можно объединить товары (в нашем случае это будут Тип и Производитель — в таком порядке). Для того, чтобы предложенный мною алгоритм работал корректно, отсортируйте товары так, чтобы товары из одной группы стояли подряд (сначала по Типу, потом по Производителю).
Результат, которого хотим добиться, выглядит примерно так:
Разумеется, если смотреть прайс только на компьютере, то можно добавить фильтры и будет гораздо удобнее искать нужный товар. Однако мы хотим научится кодить и задача вполне подходящая, не так ли?
Кодим
Для начала требуется создать кнопку, при нажатии на которую будет вызываться наша програма. Кнопки находятся в панели «Разработчик» и появляются по кнопке «Вставить». Вам нужен компонент формы «Кнопка». Нажали, поставили на любое место в листе. Далее, если не появилось окно назначения макроса, надо нажать правой кнопкой и выбрать пункт «Назначить макрос». Назовём его FormatPrice. Важно, чтобы перед именем макроса ничего не было — иначе он создастся в отдельном модуле, а не в пространстве имен книги. В этому случае вам будет недоступно быстрое обращение к выделенному листу. Нажимаем кнопку «Новый».
И вот мы в среде разработки VB. Также её можно вызвать из контекстного меню командой «Исходный текст»/«View code».
Перед вами окно с заглушкой процедуры. Можете его развернуть. Код должен выглядеть примерно так:
Sub FormatPrice()End Sub
Напишем Hello World:
Sub FormatPrice()
MsgBox "Hello World!"
End Sub
И запустим либо щелкнув по кнопке (предварительно сняв с неё выделение), либо клавишей F5 прямо из редактора.
Тут, пожалуй, следует отвлечься на небольшой ликбез по поводу синтаксиса VB. Кто его знает — может смело пропустить этот раздел до конца. Основное отличие Visual Basic от Pascal/C/Java в том, что команды разделяются не ;, а переносом строки или двоеточием (:), если очень хочется написать несколько команд в одну строку. Чтобы понять основные правила синтаксиса, приведу абстрактный код.
Примеры синтаксиса
' Процедура. Ничего не возвращает
' Перегрузка в VBA отсутствует
Sub foo(a As String, b As String)
' Exit Sub ' Это значит "выйти из процедуры"
MsgBox a + ";" + b
End Sub' Функция. Вовращает Integer
Function LengthSqr(x As Integer, y As Integer) As Integer
' Exit Function
LengthSqr = x * x + y * y
End FunctionSub FormatPrice()
Dim s1 As String, s2 As String
s1 = "str1"
s2 = "str2"
If s1 <> s2 Then
foo "123", "456" ' Скобки при вызове процедур запрещены
End IfDim res As sTRING ' Регистр в VB не важен. Впрочем, редактор Вас поправит
Dim i As Integer
' Цикл всегда состоит из нескольких строк
For i = 1 To 10
res = res + CStr(i) ' Конвертация чего угодно в String
If i = 5 Then Exit For
Next iDim x As Double
x = Val("1.234") ' Парсинг чисел
x = x + 10
MsgBox xOn Error Resume Next ' Обработка ошибок - игнорировать все ошибки
x = 5 / 0
MsgBox xOn Error GoTo Err ' При ошибке перейти к метке Err
x = 5 / 0
MsgBox "OK!"
GoTo ne
Err:
MsgBox
"Err!"
ne:
On Error GoTo 0 ' Отключаем обработку ошибок
' Циклы бывает, какие захотите
Do While True
Exit DoLoop 'While True
Do 'Until False
Exit Do
Loop Until False
' А вот при вызове функций, от которых хотим получить значение, скобки нужны.
' Val также умеет возвращать Integer
Select Case LengthSqr(Len("abc"), Val("4"))
Case 24
MsgBox "0"
Case 25
MsgBox "1"
Case 26
MsgBox "2"
End Select' Двухмерный массив.
' Можно также менять размеры командой ReDim (Preserve) - см. google
Dim arr(1 to 10, 5 to 6) As Integer
arr(1, 6) = 8Dim coll As New Collection
Dim coll2 As Collection
coll.Add "item", "key"
Set coll2 = coll ' Все присваивания объектов должны производится командой Set
MsgBox coll2("key")
Set coll2 = New Collection
MsgBox coll2.Count
End Sub
Грабли-1. При копировании кода из IDE (в английском Excel) есь текст конвертируется в 1252 Latin-1. Поэтому, если хотите сохранить русские комментарии — надо сохранить крокозябры как Latin-1, а потом открыть в 1251.
Грабли-2. Т.к. VB позволяет использовать необъявленные переменные, я всегда в начале кода (перед всеми процедурами) ставлю строчку Option Explicit. Эта директива запрещает интерпретатору заводить переменные самостоятельно.
Грабли-3. Глобальные переменные можно объявлять только до первой функции/процедуры. Локальные — в любом месте процедуры/функции.
Еще немного дополнительных функций, которые могут пригодится: InPos, Mid, Trim, LBound, UBound. Также ответы на все вопросы по поводу работы функций/их параметров можно получить в MSDN.
Надеюсь, что этого Вам хватит, чтобы не пугаться кода и самостоятельно написать какое-нибудь домашнее задание по информатике. По ходу поста я буду ненавязчиво знакомить Вас с новыми конструкциями.
Кодим много и под Excel
В этой части мы уже начнём кодить нечто, что умеет работать с нашими листами в Excel. Для начала создадим отдельный лист с именем result (лист с данными назовём data). Теперь, наверное, нужно этот лист очистить от того, что на нём есть. Также мы «выделим» лист с данными, чтобы каждый раз не писать длинное обращение к массиву с листами.
Sub FormatPrice()
Sheets("result").Cells.Clear
Sheets("data").Activate
End Sub
Работа с диапазонами ячеек
Вся работа в Excel VBA производится с диапазонами ячеек. Они создаются функцией Range и возвращают объект типа Range. У него есть всё необходимое для работы с данными и/или оформлением. Кстати сказать, свойство Cells листа — это тоже Range.
Примеры работы с Range
Sheets("result").Activate
Dim r As Range
Set r = Range("A1")
r.Value = "123"
Set r = Range("A3,A5")
r.Font.Color = vbRed
r.Value = "456"
Set r = Range("A6:A7")
r.Value = "=A1+A3"
Теперь давайте поймем алгоритм работы нашего кода. Итак, у каждой строчки листа data, начиная со второй, есть некоторые данные, которые нас не интересуют (ID, название и цена) и есть две вложенные группы, к которым она принадлежит (тип и производитель). Более того, эти строки отсортированы. Пока мы забудем про пропуски перед началом новой группы — так будет проще. Я предлагаю такой алгоритм:
- Считали группы из очередной строки.
- Пробегаемся по всем группам в порядке приоритета (вначале более крупные)
- Если текущая группа не совпадает, вызываем процедуру AddGroup(i, name), где i — номер группы (от номера текущей до максимума), name — её имя. Несколько вызовов необходимы, чтобы создать не только наш заголовок, но и всё более мелкие.
- После отрисовки всех необходимых заголовков делаем еще одну строку и заполняем её данными.
Для упрощения работы рекомендую определить следующие функции-сокращения:
Function GetCol(Col As Integer) As String
GetCol = Chr(Asc("A") + Col)
End FunctionFunction GetCellS(Sheet As String, Col As Integer, Row As Integer) As Range
Set GetCellS = Sheets(Sheet).Range(GetCol(Col) + CStr(Row))
End FunctionFunction GetCell(Col As Integer, Row As Integer) As Range
Set GetCell = Range(GetCol(Col) + CStr(Row))
End Function
Далее определим глобальную переменную «текущая строчка»: Dim CurRow As Integer. В начале процедуры её следует сделать равной единице. Еще нам потребуется переменная-«текущая строка в data», массив с именами групп текущей предыдущей строк. Потом можно написать цикл «пока первая ячейка в строке непуста».
Глобальные переменные
Option Explicit ' про эту строчку я уже рассказывал
Dim CurRow As Integer
Const GroupsCount As Integer = 2
Const DataCount As Integer = 3
FormatPrice
Sub FormatPrice()
Dim I As Integer ' строка в data
CurRow = 1
Dim Groups(1 To GroupsCount) As String
Dim PrGroups(1 To GroupsCount) As String
Sheets(
"data").Activate
I = 2
Do While True
If GetCell(0, I).Value = "" Then Exit Do
' ...
I = I + 1
Loop
End Sub
Теперь надо заполнить массив Groups:
На месте многоточия
Dim I2 As Integer
For I2 = 1 To GroupsCount
Groups(I2) = GetCell(I2, I)
Next I2
' ...
For I2 = 1 To GroupsCount ' VB не умеет копировать массивы
PrGroups(I2) = Groups(I2)
Next I2
I = I + 1
И создать заголовки:
На месте многоточия в предыдущем куске
For I2 = 1 To GroupsCount
If Groups(I2) <> PrGroups(I2) Then
Dim I3 As Integer
For I3 = I2 To GroupsCount
AddHeader I3, Groups(I3)
Next I3
Exit For
End If
Next I2
Не забудем про процедуру AddHeader:
Перед FormatPrice
Sub AddHeader(Ty As Integer, Name As String)
GetCellS("result", 1, CurRow).Value = Name
CurRow = CurRow + 1
End Sub
Теперь надо перенести всякую информацию в result
For I2 = 0 To DataCount - 1
GetCellS("result", I2, CurRow).Value = GetCell(I2, I)
Next I2
Подогнать столбцы по ширине и выбрать лист result для показа результата
После цикла в конце FormatPrice
Sheets("Result").Activate
Columns.AutoFit
Всё. Можно любоваться первой версией.
Некрасиво, но похоже. Давайте разбираться с форматированием. Сначала изменим процедуру AddHeader:
Sub AddHeader(Ty As Integer, Name As String)
Sheets("result").Range("A" + CStr(CurRow) + ":C" + CStr(CurRow)).Merge
' Чтобы не заводить переменную и не писать каждый раз длинный вызов
' можно воспользоваться блоком With
With GetCellS("result", 0, CurRow)
.Value = Name
.Font.Italic = True
.Font.Name = "Cambria"
Select Case Ty
Case 1 ' Тип
.Font.Bold = True
.Font.Size = 16
Case 2 ' Производитель
.Font.Size = 12
End Select
.HorizontalAlignment = xlCenter
End With
CurRow = CurRow + 1
End Sub
Уже лучше:
Осталось только сделать границы. Тут уже нам требуется работать со всеми объединёнными ячейками, иначе бордюр будет только у одной:
Поэтому чуть-чуть меняем код с добавлением стиля границ:
Sub AddHeader(Ty As Integer, Name As String)
With Sheets("result").Range("A" + CStr(CurRow) + ":C" + CStr(CurRow))
.Merge
.Value = Name
.Font.Italic = True
.Font.Name = "Cambria"
.HorizontalAlignment = xlCenterSelect Case Ty
Case 1 ' Тип
.Font.Bold = True
.Font.Size = 16
.Borders(xlTop).Weight = xlThick
Case 2 ' Производитель
.Font.Size = 12
.Borders(xlTop).Weight = xlMedium
End Select
.Borders(xlBottom).Weight = xlMedium ' По убыванию: xlThick, xlMedium, xlThin, xlHairline
End With
CurRow = CurRow + 1
End Sub
Осталось лишь добится пропусков перед началом новой группы. Это легко:
В начале FormatPrice
Dim I As Integer ' строка в data
CurRow = 0 ' чтобы не было пропуска в самом начале
Dim Groups(1 To GroupsCount) As String
В цикле расстановки заголовков
If Groups(I2) <> PrGroups(I2) Then
CurRow = CurRow + 1
Dim I3 As Integer
В точности то, что и хотели.
Надеюсь, что эта статья помогла вам немного освоится с программированием для Excel на VBA. Домашнее задание — добавить заголовки «ID, Название, Цена» в результат. Подсказка: CurRow = 0 CurRow = 1.
Файл можно скачать тут (min.us) или тут (Dropbox). Не забудьте разрешить исполнение макросов. Если кто-нибудь подскажет человеческих файлохостинг, залью туда.
Спасибо за внимание.
Буду рад конструктивной критике в комментариях.
UPD: Перезалил пример на Dropbox и min.us.
UPD2: На самом деле, при вызове процедуры с одним параметром скобки можно поставить. Либо использовать конструкцию Call Foo(«bar», 1, 2, 3) — тут скобки нужны постоянно.
В этом уроке я покажу Вам самые популярные макросы в VBA Excel, которые вы сможете использовать для оптимизации своей работы. VBA — это язык программирования, который может использоваться для расширения возможностей MS Excel и других приложений MS Office. Это чрезвычайно полезно для пользователей MS Excel, поскольку VBA может использоваться для автоматизации вашей работы и значительно увеличить Вашу эффективность. В этой статье Вы познакомитесь с VBA и я вам покажу некоторые из наиболее полезных, готовых к использованию примеров VBA. Вы сможете использовать эти примеры для создания собственных скриптов, соответствующих Вашим потребностям.
Вам не нужен опыт программирования, чтобы воспользоваться информаций из этой статьи, но вы должны иметь базовые знания Excel. Если вы еще учитесь работать с Excel, я бы рекомендовал Вам прочитать статью 20 формул Excel, которые вам нeобходимо выучить сейчас, чтобы узнать больше о функциональных возможностях Excel.
Я подготовил для вас несколько самых полезных примеров VBA Excel с большой функциональностью, которую вы сможете использовать для оптимизации своей работы. Чтобы их использовать, вам необходимо записать их в файл. Следующий параграф посвящен установке макроса Excel. Пропустите эту часть, если вы уже знакомы с этим.
Table of Contents
Как включить макросы в Excel
В Excel нажмите комбинацию клавиш alt + F11. Это приведет вас к редактору VBA в MS Excel. Затем щелкните правой кнопкой мыши папку Microsoft Excel Objects слева и выберите Insert => Module. Это место, где сохраняются макросы. Чтобы использовать макрос, вам нужно сохранить документ Excel как макрос. Из табуляции File => Save as, выберите Save as macro-enabled Workbok (расширение .xlsm) Теперь пришло время написать свой первый макрос!
1. Копирование данных из одного файла в другой.
Очень полезный макрос, поскольку он показывает, как скопировать ряд данных изнутри vba и как создать и назвать новую книгу. Вы можете изменить этот макрос в соответствии с вашими собственными требованиями:
Sub CopyFiletoAnotherWorkbook() Sheets("Example 1").Range("B4:C15").Copy Workbooks.Add ActiveSheet.Paste Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="C:TempMyNewBook.xlsx" Application.DisplayAlerts = True End Sub
2. Отображение скрытых строк
Иногда большие файлы Excel можно содержать скрытые строки для большей ясности И для лучшего удобства пользователей. Вот один макрос, который отобразит все строки из активной рабочей таблицы:
Sub ShowHiddenRows() Columns.EntireColumn.Hidden = False Rows.EntireRow.Hidden = False End Sub
3. Удаление пустых строк и столбов
Пустые строки в Excel — может быть проблемой для обработки данных. Вот как избавиться от них:
Sub DeleteEmptyRowsAndColumns() Dim MyRange As Range Dim iCounter As Long Set MyRange = ActiveSheet.UsedRange For iCounter = MyRange.Rows.Count To 1 Step -1 If Application.CountA(Rows(iCounter).EntireRow) = 0 Then Rows(iCounter).Delete End If Next iCounter For iCounter = MyRange.Columns.Count To 1 Step -1 If Application.CountA(Columns(iCounter).EntireColumn) = 0 Then Columns(iCounter).Delete End If Next iCounter End Sub
4. Нахождение пустых ячеек
Sub FindEmptyCell() ActiveCell.Offset(1, 0).Select Do While Not IsEmpty(ActiveCell) ActiveCell.Offset(1, 0).Select Loop End Sub
#### 5. Заполнение пустых ячеек
Как упоминалось ранее, пустые ячейки препятствуют обработке данных и созданию сводных таблиц. Вот один примерный код, который заменяет все пустые ячейки на 0. Этот макрос имеет очень большое приложение, потому что Вы можете использовать его для поиска и замены результатов N/A, а также других символов, таких как точки, запятые или повторяющиеся значения:
Sub FindAndReplace() Dim MyRange As Range Dim MyCell As Range Select Case MsgBox("Can't Undo this action. " & _ "Save Workbook First?", vbYesNoCancel) Case Is = vbYes ThisWorkbook.Save Case Is = vbCancel Exit Sub End Select Set MyRange = Selection For Each MyCell In MyRange If Len(MyCell.Value) = 0 Then MyCell = 0 End If Next MyCell End Sub
#### 6. Сортировка данных
Следующий макрос сортирует по возрастанию все числа из столбца активной ячейки. Просто дважды нажмите любую ячейку из столбца, который вы хотите отсортировать.
NB: Здесь нам нужно поставить этот код в Sheet1 (папка Microsoft Excel Objects), а не в Module1 (папка Modules):
Private Sub Worksheet_BeforeDoubleClick (ByVal Target as Range, Cancel As Boolean) Dim LastRow As Long LastRow = Cells (Rows.Count, 1) .End (xlUp) .Row Rows ("6:" & LastRow) .Sort _ Key1: = Cells (6, ActiveCell.Column), _ Order1: = xlAscending End Sub
#### 7. Удаление пустых пространств
Иногда данные в книге содержат дополнительные пробелы (whitespace charachters), которые могут мешать анализу данных и коррумпировать формулы. Вот один макрос, который удалит все пробелы из предварительно выбранного диапазона ячеек:
Sub TrimTheSpaces() Dim MyRange As Range Dim MyCell As Range Select Case MsgBox("Can't Undo this action. " & _ "Save Workbook First?", vbYesNoCancel) Case Is = vbYes ThisWorkbook.Save Case Is = vbCancel Exit Sub End Select Set MyRange = Selection For Each MyCell In MyRange If Not IsEmpty(MyCell) Then MyCell = Trim(MyCell) End If Next MyCell End Sub
#### 8. Выделение дубликатов цветом
Иногда в нескольких столбцах, которые мы хотели бы осветить, есть повторяющиеся значения. Этот макрос делает именно это:
Sub HighlightDuplicates() Dim MyRange As Range Dim MyCell As Range Set MyRange = Selection For Each MyCell In MyRange If WorksheetFunction.CountIf(MyRange, MyCell.Value) > 1 Then MyCell.Interior.ColorIndex = 36 End If Next MyCell End Sub
#### 9. Выделение десяти самых высоких чисел
Этот код будет отображать десять самых высоких чисел из набора ячеек:
Sub TopTen() Selection.FormatConditions.AddTop10 Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1) .TopBottom = xlTop10Top .Rank = 10 .Percent = False End With With Selection.FormatConditions(1).Font .Color = -16752384 .TintAndShade = 0 End With With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 13561798 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False End Sub
Вы можете легко настроить код, чтобы выделить различное количество чисел.
#### 10. Выделение данных больших чем данные число
Когда вы запустите этот код, появится окно. Вам надо написать число, которое вы хотите сравнить с выбранными ячейками.
Sub HighlightGreaterThanValues() Dim i As Integer i = InputBox("Enter Greater Than Value", "Enter Value") Selection.FormatConditions.Delete Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, Formula1:=i Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1) .Font.Color = RGB(0, 0, 0) .Interior.Color = RGB(31, 218, 154) End With End Sub
Вы тоже можете настроить этот код, чтобы выделить более низкие чисел.
#### 11. Выделение ячеек комментариями
Простой макрос, который выделяет все ячейки, содержащие комментарии:
Sub HighlightCommentCells() Selection.SpecialCells(xlCellTypeComments).Select Selection.Style= "Note" End Sub
#### 12. Выделение ячеек со словами с ошибками
Это очень полезно, когда вы работаете с функциями, которые принимают строки, однако кто-то ввел строку с ошибкой, и ваши формулы не работают. Вот как решить эту проблему:
Sub ColorMispelledCells() For Each cl In ActiveSheet.UsedRange If Not Application.CheckSpelling(Word:=cl.Text) Then _ cl.Interior.ColorIndex = 28 Next cl End Sub
13. Создание сводной таблицы
Вот как создать сводную таблицу в MS Excel (версия 2007). Особенно полезно, когда вы делаете индивидуальный отчет каждый день. Вы можете оптимизировать создание сводной таблицы следующим образом:
Sub PivotTableForExcel2007() Dim SourceRange As Range Set SourceRange = Sheets("Sheet1").Range("A3:N86") ActiveWorkbook.PivotCaches.Create( _ SourceType:=xlDatabase, _ SourceData:=SourceRange, _ Version:=xlPivotTableVersion12).CreatePivotTable _ TableDestination:="", _ TableName:="", _ DefaultVersion:=xlPivotTableVersion12 End Sub
14. Отправка активного файла по электронной почте
Мой любимый код VBA. Он позволяет вам прикреплять и отправлять файл, с которым вы работаете, с предопределенным адресом электронной почты, заголовком сообщения и телом сообщения! Сначала Вам нужно сделать референцию в Excel на Microsoft Outlook (в редакторе Excel VBA, нажмите tools => references и выберите Microsoft Outlook).
Sub SendFIleAsAttachment() Dim OLApp As Outlook.Application Dim OLMail As Object Set OLApp = New Outlook.Application Set OLMail = OLApp.CreateItem(0) OLApp.Session.Logon With OLMail .To = "admin@datapigtechnologies.com; mike@datapigtechnologies.com" .CC = "" .BCC = "" .Subject = "This is the Subject line" .Body = "Hi there" .Attachments.Add ActiveWorkbook.FullName .Display End With Set OLMail = Nothing Set OLApp = Nothing End Sub
15. Вставка всех графиков Excel в презентацию PowerPoint
Очень удобный макрос, который позволяет вам добавлять все ваши графики Excel в презентацию Powerpoint одним щелчком мыши:
Sub SendExcelFiguresToPowerPoint() Dim PP As PowerPoint.Application Dim PPPres As PowerPoint.Presentation Dim PPSlide As PowerPoint.Slide Dim i As Integer Sheets("Slide Data").Select If ActiveSheet.ChartObjects.Count < 1 Then MsgBox "No charts existing the active sheet" Exit Sub End If Set PP = New PowerPoint.Application Set PPPres = PP.Presentations.Add PP.Visible = True For i = 1 To ActiveSheet.ChartObjects.Count ActiveSheet.ChartObjects(i).Chart.CopyPicture _ Size:=xlScreen, Format:=xlPicture Application.Wait (Now + TimeValue("0:00:1")) ppSlideCount = PPPres.Slides.Count Set PPSlide = PPPres.Slides.Add(SlideCount + 1, ppLayoutBlank) PPSlide.Select PPSlide.Shapes.Paste.Select PP.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True PP.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True Next i Set PPSlide = Nothing Set PPPres = Nothing Set PP = Nothing End Sub
16. Вставка таблицы Excel в MS Word
Таблицы Excel обычно помещаются внутри текстовых документов. Вот один автоматический способ экспорта таблицы Excel в MS Word:
Sub ExcelTableInWord() Dim MyRange As Excel.Range Dim wd As Word.Application Dim wdDoc As Word.Document Dim WdRange As Word.Range Sheets("Revenue Table").Range("B4:F10").Cop Set wd = New Word.Application Set wdDoc = wd.Documents.Open _ (ThisWorkbook.Path & "" & "PasteTable.docx") wd.Visible = True Set WdRange = wdDoc.Bookmarks("DataTableHere").Rangе On Error Resume Next WdRange.Tables(1).Delete WdRange.Paste WdRange.Tables(1).Columns.SetWidth _ (MyRange.Width / MyRange.Columns.Count), wdAdjustSameWidth wdDoc.Bookmarks.Add "DataTableHere", WdRange Set wd = Nothing Set wdDoc = Nothing Set WdRange = Nothing End Sub
17. Извлечение слов из текста
Мы можем использовать формулы, если хотим извлечь определенное количество символов. Но что, если мы хотим извлечь только одно слово из предложения или диапазон слов в ячейке? Для этого мы можем сами создать функцию Excel с помощью VBA. Это одна из самых удобных функций VBA, поскольку она позволяет создавать собственные формулы, которые отсутствуют в MS Excel. Давайте продолжим и создадим две функции: findword() и findwordrev():
Function FindWord(Source As String, Position As Integer) As String On Error Resume Next FindWord = Split(WorksheetFunction.Trim(Source), " ")(Position - 1) On Error GoTo 0 End Function Function FindWordRev(Source As String, Position As Integer) As String Dim Arr() As String Arr = VBA.Split(WorksheetFunction.Trim(Source), " ") On Error Resume Next FindWordRev = Arr(UBound(Arr) - Position + 1) On Error GoTo 0 End Function
Отлично, мы уже создали две новые функции в Excel! Теперь попробуйте использовать их в Excel. Функция = FindWordRev (A1,1) берет последнее слово из ячейки A1. Функция = FindWord (A1,3) берет третье слово из ячейки A1 и т. Д.
18. Защита данных в MS Excel
Иногда мы хотим защитить данных нашего файла, чтобы только мы могли его изменять. Вот как это сделать с VBA:
Sub ProtectSheets() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets ws.Protect Password:="1234" Next ws End Sub
Поздравления! Поскольку вы все еще читаете это, вы действительно заинтересованы в изучении VBA. Как вы уже сами видели, язык программирования VBA чрезвычайно полезен и может сэкономить нам много времени. Надеюсь, вы нашли эту информацию полезной и использовали ее, чтобы стать мастером MS Excel, VBA и компьютерных наук в целом.
© 2018 Атанас Йонков
Литература:
1. ExcelChamps.com: Top 100 Useful Excel Macro [VBA] Codes Examples.
2. Michael Alexander, John Walkenbach (2012). 101 Ready-To-Use Excel Macros.
3. BG Excel.info: 14 ready-to-use Macros for Excel.
Содержание рубрики VBA Excel на сайте «Время не ждёт». Систематизация статей по тематическим группам для ускорения поиска нужной информации по заданной теме.
-
Знакомство с VBA Excel
- Начинаем программировать с нуля
- Памятка для начинающих
- Первая кнопка (для начинающих)
- Первая форма (для начинающих)
- Первая функция (для начинающих)
- Правильные имена переменных и процедур
- Свойства ячейки (объекта Range)
- Свойство ActiveCell объекта Application
- Свойство Selection объекта Application
-
Методы VBA Excel
- Метод Application.Goto
- Метод Application.InputBox (синтаксис, параметры)
- Метод Application.Intersect (пересечение диапазонов)
- Метод Application.OnKey
- Метод Application.OnTime
- Метод Application.Union (объединение диапазонов)
- Метод Controls.Add пользовательской формы
- Метод CreateTextFile (синтаксис, параметры)
- Метод Find объекта Range
- Метод FindNext объекта Range
- Метод Hyperlinks.Add (создание гиперссылки)
- Метод OpenTextFile (синтаксис, параметры)
- Метод Range.AutoFill (автозаполнение ячеек)
- Метод Range.Insert (вставка со сдвигом ячеек)
- Метод Range.Justify (переупорядочивание текста)
- Метод Range.PasteSpecial (специальная вставка)
- Метод Range.Replace (замена текста в ячейках)
- Метод Range.Show
- Метод WorksheetFunction.Match (поиск позиции)
- Метод WorksheetFunction.Sum – сумма аргументов
- Метод WorksheetFunction.SumIf
- Метод WorksheetFunction.SumIfs
- Метод WorksheetFunction.Transpose
- Метод WorksheetFunction.VLookup
- Методы Count, CountA и CountBlank
- Методы CountIf и CountIfs
- Методы очистки ячеек (Range.Clear и другие)
- Открытие сайта методом FollowHyperlink
- Удаление ячеек со сдвигом (Range.Delete)
-
Объект Range в VBA Excel
- Автоподбор высоты объединенной ячейки
- Автоподбор ширины объединенной ячейки
- Вставка пустой строки или столбца
- Вставка формулы в ячейку
- Выделенный диапазон ячеек (адрес, выбор, строки)
- Выравнивание текста в ячейке
- Вырезание, копирование и вставка ячеек (диапазонов)
- Диапазон ячеек и массив (обмен значениями)
- Диапазон ячеек пуст (определение)
- Объединение ячеек и его отмена
- Переменная диапазона ячеек (As Range)
- Программное создание границ ячеек
- Размер ячейки (высота строки, ширина столбца)
- Свойства Column и Columns объекта Range
- Свойства Row и Rows объекта Range
- Свойство Areas объекта Range
- Свойство Cells объекта Range
- Свойство End объекта Range
- Свойство Range.Characters
- Свойство Range.CurrentRegion
- Свойство Range.Hidden
- Свойство Range.Offset
- Свойство Range.Resize (синтаксис, примеры)
- Свойство Range.Text
- Свойство Range.WrapText (перенос текста)
- Цвет текста (шрифта) в ячейке
- Цвет ячейки (заливка, фон)
- Узор (рисунок) в ячейке
- Форматирование текста в ячейке (объект Font)
- Ячейки (обращение, запись, чтение, очистка)
-
Объекты VBA Excel
- Объект Collection (создание, методы, примеры)
- Объект Dictionary (свойства, методы, примеры)
- Объект DocumentProperties — свойства документа
- Объект FileSystemObject
- Объект PageSetup (параметры страницы)
- Объект TextStream (свойства и методы)
- Рабочая книга (открыть, создать новую, закрыть)
- Рабочий лист (обращение, переименование, скрытие)
- Рабочий лист (создание, копирование, удаление)
- Регулярные выражения (объекты, свойства, методы)
-
Операторы в VBA Excel
- Арифметические операторы
- Логические операторы
- Оператор Beep (одиночный звуковой сигнал)
- Оператор If…Then…Else и функция IIf
- Оператор On Error (обработка ошибок)
- Оператор Open (синтаксис, параметры)
- Оператор Select Case (синтаксис, примеры)
- Оператор SendKeys (имитация нажатия клавиш)
- Оператор With
- Операторы сравнения
- Операторы чтения и записи в файл
-
Переменные в VBA Excel
- Глобальная переменная
- Ключевое слово Me
- Количество измерений массива
- Массивы (одномерные, многомерные, динамические)
- Пользовательские типы данных (оператор Type)
- Тип данных Decimal
- Типы данных
-
Примеры кода VBA Excel
- Автоматическая запись текущей даты и времени
- Автоматическое заполнение интервала дат (периода)
- Бегущая, ползущая и танцующая строки
- Буфер обмена (копирование, вставка, очистка)
- Вставка рисунка в ячейку
- Выбор случайной ячейки из диапазона
- Генератор случайных чисел (Rnd и Randomize)
- Генерация документов (реестр, массив, бланк)
- Генерация документов и отчетов
- Добавление кнопки в контекстное меню
- Запуск макроса при изменении ячейки
- Изменение свойств пользовательской формы
- Имитация движения и кликов мыши
- Квадратные ячейки (тетрадные клетки)
- Копирование данных с одного листа на другой
- Копирование и перемещение файлов
- Копирование строк по условию
- Номер последней заполненной строки
- Определение координат элемента массива
- Отбор неповторяющихся значений
- Отбор уникальных значений с помощью Collection
- Отбор уникальных значений с помощью Dictionary
- Открыта или закрыта книга (проверка состояния)
- Открытие файла другой программы из кода VBA Excel
- Ошибки в таблице – поиск и исправление
- Парсинг сайтов, html-страниц и файлов
- Перебор листов в книге
- Перемещение листа и его отмена
- Переход к ячейке по адресу из формулы
- Переход по ссылке к ячейке в другой книге
- Поиск значения в таблице
- Поиск и выделение дубликатов в столбце
- Пользовательская автоформа (создание)
- Проверка существования листа
- Программное создание графика (диаграммы)
- Программное создание модуля
- Программное создание формы
- Работа с умной таблицей
- Расчет рабочего времени
- Сбор данных из открытых книг
- Секундомер в ячейке рабочего листа
- Смещение умной таблицы вниз
- Создание простого тестового задания
- Создание таблицы (умной, обычной)
- Создание файлов
- Создание, копирование, перемещение папок
- Сортировка массива
- Сортировка таблицы (диапазона)
- Сохранение книг и листов в PDF
- Сохранение массива в текстовый файл
- Список папок
- Список файлов в папке
- Сравнение прайс-листов
- Сумма прописью (код пользовательской функции)
- Удаление книги из собственного кода
- Удаление повторяющихся значений в диапазоне ячеек
- Удаление пустых строк
- Удаление файлов
- Учет расхода воды и других ресурсов
- Число Пи (значение)
- Экспорт и импорт пользовательской формы
-
Прочее в VBA Excel
- Включение режима конструктора
- Время работы макроса
- Знаки подстановки для шаблонов
- Кавычки в коде — двойные и ёлочки
- Колонтитулы
- Конвертация цвета из Long в RGB
- Копирование, перемещение и поворот фигур
- Объявление функций в 64-разрядных версиях
- Округление чисел (особенности)
- Открыть папку (каталог) в проводнике
- Параметры и аргументы
- Преобразование текста в число
- Работа с трехмерными диапазонами
- Работа с фигурами (Shapes)
- Свойства файла — вывод информации о файле
- Свойство Application.WindowState
- Смена кодировки UTF-8 на ANSI (Windows-1251)
- Смена раскладки клавиатуры
- Сохранение файла рабочей книги
- Сочетание клавиш для процедуры (макроса)
- Стандартная палитра из 56 цветов
- Стандартный диалог выбора файлов Application.GetOpenFilename
-
Работа с Word из кода VBA Excel
- Bookmarks – закладки в документе Word
- Вставка таблицы Excel в документ Word
- Редактирование документов Word
- Создание и открытие документов Word
- Создание таблиц в документе Word
- Управление приложением Word
-
Редактор VBA Excel
- Debug — отладка программы
- Вызов процедуры Sub из другой подпрограммы VBA
- Защита паролем и снятие защиты проекта VBA
- Личная книга макросов (создание, предназначение)
- Макросы (запись, запуск, пример)
- Модуль (импорт, экспорт, удаление)
- Модуль, процедура, форма
- Окно Immediate (отладка кода, вычисления)
- Перенос кода процедуры и текста на новую строку
-
События VBA Excel
- Событие Worksheet.SelectionChange
-
Функции в VBA Excel
- Изменение значений других ячеек из функции
- Пользовательская функция (синтаксис, компоненты)
- Проверка переменных и выражений
- Работа с текстом (функции)
- Удаление лишних пробелов (LTrim, RTrim, Trim)
- Функции Left, Mid, Right (вырезать часть строки)
- Функции Space, String и StrReverse
- Функция Beep API (звуковой сигнал, мелодия)
- Функция Choose (синтаксис, компоненты, примеры)
- Функция FileDateTime
- Функция Filter (фильтрация массива)
- Функция Format (синтаксис, параметры, примеры)
- Функция FreeFile
- Функция Hex
- Функция InputBox (синтаксис, параметры, значения)
- Функция InStr (синтаксис, параметры, примеры)
- Функция InStrRev (синтаксис, параметры, примеры)
- Функции Int и Fix
- Функция Join (синтаксис, параметры, значения)
- Функция MicroTimer
- Функция MsgBox (синтаксис, параметры, значения)
- Функция Replace (замена подстроки)
- Функция Shell
- Функция Split (синтаксис, параметры, значения)
- Функция StrComp (сравнение строк)
- Функция StrConv (смена регистра букв)
- Функция Switch (синтаксис, примеры)
- Функция Timer (примеры)
- Функция Val (примеры)
- Функция для вычисления факториала
- Функции для работы с датой
- Функция преобразования HTML-цвета в число
- Функции преобразования типов данных
-
Циклы в VBA Excel
- Цикл Do Until… Loop
- Цикл Do While… Loop
- Цикл For Each… Next
- Цикл For… Next
- Цикл While… Wend
- Циклы (краткое описание)
-
Элементы управления в VBA Excel
- ComboBox – заполнение поля со списком
- ListBox – заполнение списка данными
- Заполнение списка ComboBox по условию
- Маска ввода в TextBox
- Привязка события к элементу управления
- Программное раскрытие ComboBox
- Размеры и расположение элементов управления
- Свойства SelStart, SelLength, SelText (TextBox)
- Свойство Picture элементов управления
- Сочетания клавиш для кнопок
- Удаление элементов ActiveX с рабочего листа
- Удаление элементов управления формы с листа
- Элемент управления CheckBox (флажок)
- Элемент управления ComboBox (поле со списком)
- Элемент управления CommandButton (кнопка)
- Элемент управления DTPicker
- Элемент управления Frame (рамка)
- Элемент управления Image
- Элемент управления Label (метка, надпись)
- Элемент управления ListBox (список)
- Элемент управления MultiPage
- Элемент управления OptionButton (переключатель)
- Элемент управления RefEdit (редактор ссылок)
- Элемент управления ScrollBar (полоса прокрутки)
- Элемент управления SpinButton (счетчик)
- Элемент управления TabStrip
- Элемент управления TextBox (текстовое поле)
- Элемент управления ToggleButton (выключатель)
- Элемент управления TreeView (древовидная структура)
Introduction
This is a tutorial about writing code in Excel spreadsheets using Visual Basic for Applications (VBA).
Excel is one of Microsoft’s most popular products. In 2016, the CEO of Microsoft said «Think about a world without Excel. That’s just impossible for me.” Well, maybe the world can’t think without Excel.
- In 1996, there were over 30 million users of Microsoft Excel (source).
- Today, there are an estimated 750 million users of Microsoft Excel. That’s a little more than the population of Europe and 25x more users than there were in 1996.
We’re one big happy family!
In this tutorial, you’ll learn about VBA and how to write code in an Excel spreadsheet using Visual Basic.
Prerequisites
You don’t need any prior programming experience to understand this tutorial. However, you will need:
- Basic to intermediate familiarity with Microsoft Excel
- If you want to follow along with the VBA examples in this article, you will need access to Microsoft Excel, preferably the latest version (2019) but Excel 2016 and Excel 2013 will work just fine.
- A willingness to try new things
Learning Objectives
Over the course of this article, you will learn:
- What VBA is
- Why you would use VBA
- How to get set up in Excel to write VBA
- How to solve some real-world problems with VBA
Important Concepts
Here are some important concepts that you should be familiar with to fully understand this tutorial.
Objects: Excel is object-oriented, which means everything is an object — the Excel window, the workbook, a sheet, a chart, a cell. VBA allows users to manipulate and perform actions with objects in Excel.
If you don’t have any experience with object-oriented programming and this is a brand new concept, take a second to let that sink in!
Procedures: a procedure is a chunk of VBA code, written in the Visual Basic Editor, that accomplishes a task. Sometimes, this is also referred to as a macro (more on macros below). There are two types of procedures:
- Subroutines: a group of VBA statements that performs one or more actions
- Functions: a group of VBA statements that performs one or more actions and returns one or more values
Note: you can have functions operating inside of subroutines. You’ll see later.
Macros: If you’ve spent any time learning more advanced Excel functionality, you’ve probably encountered the concept of a “macro.” Excel users can record macros, consisting of user commands/keystrokes/clicks, and play them back at lightning speed to accomplish repetitive tasks. Recorded macros generate VBA code, which you can then examine. It’s actually quite fun to record a simple macro and then look at the VBA code.
Please keep in mind that sometimes it may be easier and faster to record a macro rather than hand-code a VBA procedure.
For example, maybe you work in project management. Once a week, you have to turn a raw exported report from your project management system into a beautifully formatted, clean report for leadership. You need to format the names of the over-budget projects in bold red text. You could record the formatting changes as a macro and run that whenever you need to make the change.
What is VBA?
Visual Basic for Applications is a programming language developed by Microsoft. Each software program in the Microsoft Office suite is bundled with the VBA language at no extra cost. VBA allows Microsoft Office users to create small programs that operate within Microsoft Office software programs.
Think of VBA like a pizza oven within a restaurant. Excel is the restaurant. The kitchen comes with standard commercial appliances, like large refrigerators, stoves, and regular ole’ ovens — those are all of Excel’s standard features.
But what if you want to make wood-fired pizza? Can’t do that in a standard commercial baking oven. VBA is the pizza oven.
Yum.
Why use VBA in Excel?
Because wood-fired pizza is the best!
But seriously.
A lot of people spend a lot of time in Excel as a part of their jobs. Time in Excel moves differently, too. Depending on the circumstances, 10 minutes in Excel can feel like eternity if you’re not able to do what you need, or 10 hours can go by very quickly if everything is going great. Which is when you should ask yourself, why on earth am I spending 10 hours in Excel?
Sometimes, those days are inevitable. But if you’re spending 8-10 hours everyday in Excel doing repetitive tasks, repeating a lot of the same processes, trying to clean up after other users of the file, or even updating other files after changes are made to the Excel file, a VBA procedure just might be the solution for you.
You should consider using VBA if you need to:
- Automate repetitive tasks
- Create easy ways for users to interact with your spreadsheets
- Manipulate large amounts of data
Getting Set Up to Write VBA in Excel
Developer Tab
To write VBA, you’ll need to add the Developer tab to the ribbon, so you’ll see the ribbon like this.
To add the Developer tab to the ribbon:
- On the File tab, go to Options > Customize Ribbon.
- Under Customize the Ribbon and under Main Tabs, select the Developer check box.
After you show the tab, the Developer tab stays visible, unless you clear the check box or have to reinstall Excel. For more information, see Microsoft help documentation.
VBA Editor
Navigate to the Developer Tab, and click the Visual Basic button. A new window will pop up — this is the Visual Basic Editor. For the purposes of this tutorial, you just need to be familiar with the Project Explorer pane and the Property Properties pane.
Excel VBA Examples
First, let’s create a file for us to play around in.
- Open a new Excel file
- Save it as a macro-enabled workbook (. xlsm)
- Select the Developer tab
- Open the VBA Editor
Let’s rock and roll with some easy examples to get you writing code in a spreadsheet using Visual Basic.
Example #1: Display a Message when Users Open the Excel Workbook
In the VBA Editor, select Insert -> New Module
Write this code in the Module window (don’t paste!):
Sub Auto_Open()
MsgBox («Welcome to the XYZ Workbook.»)
End Sub
Save, close the workbook, and reopen the workbook. This dialog should display.
Ta da!
How is it doing that?
Depending on your familiarity with programming, you may have some guesses. It’s not particularly complex, but there’s quite a lot going on:
- Sub (short for “Subroutine): remember from the beginning, “a group of VBA statements that performs one or more actions.”
- Auto_Open: this is the specific subroutine. It automatically runs your code when the Excel file opens — this is the event that triggers the procedure. Auto_Open will only run when the workbook is opened manually; it will not run if the workbook is opened via code from another workbook (Workbook_Open will do that, learn more about the difference between the two).
- By default, a subroutine’s access is public. This means any other module can use this subroutine. All examples in this tutorial will be public subroutines. If needed, you can declare subroutines as private. This may be needed in some situations. Learn more about subroutine access modifiers.
- msgBox: this is a function — a group of VBA statements that performs one or more actions and returns a value. The returned value is the message “Welcome to the XYZ Workbook.”
In short, this is a simple subroutine that contains a function.
When could I use this?
Maybe you have a very important file that is accessed infrequently (say, once a quarter), but automatically updated daily by another VBA procedure. When it is accessed, it’s by many people in multiple departments, all across the company.
- Problem: Most of the time when users access the file, they are confused about the purpose of this file (why it exists), how it is updated so often, who maintains it, and how they should interact with it. New hires always have tons of questions, and you have to field these questions over and over and over again.
- Solution: create a user message that contains a concise answer to each of these frequently answered questions.
Real World Examples
- Use the MsgBox function to display a message when there is any event: user closes an Excel workbook, user prints, a new sheet is added to the workbook, etc.
- Use the MsgBox function to display a message when a user needs to fulfill a condition before closing an Excel workbook
- Use the InputBox function to get information from the user
Example #2: Allow User to Execute another Procedure
In the VBA Editor, select Insert -> New Module
Write this code in the Module window (don’t paste!):
Sub UserReportQuery()
Dim UserInput As Long
Dim Answer As Integer
UserInput = vbYesNo
Answer = MsgBox(«Process the XYZ Report?», UserInput)
If Answer = vbYes Then ProcessReport
End Sub
Sub ProcessReport()
MsgBox («Thanks for processing the XYZ Report.»)
End Sub
Save and navigate back to the Developer tab of Excel and select the “Button” option. Click on a cell and assign the UserReportQuery macro to the button.
Now click the button. This message should display:
Click “yes” or hit Enter.
Once again, tada!
Please note that the secondary subroutine, ProcessReport, could be anything. I’ll demonstrate more possibilities in example #3. But first…
How is it doing that?
This example builds on the previous example and has quite a few new elements. Let’s go over the new stuff:
- Dim UserInput As Long: Dim is short for “dimension” and allows you to declare variable names. In this case, UserInput is the variable name and Long is the data type. In plain English, this line means “Here’s a variable called “UserInput”, and it’s a Long variable type.”
- Dim Answer As Integer: declares another variable called “Answer,” with a data type of Integer. Learn more about data types here.
- UserInput = vbYesNo: assigns a value to the variable. In this case, vbYesNo, which displays Yes and No buttons. There are many button types, learn more here.
- Answer = MsgBox(“Process the XYZ Report?”, UserInput): assigns the value of the variable Answer to be a MsgBox function and the UserInput variable. Yes, a variable within a variable.
- If Answer = vbYes Then ProcessReport: this is an “If statement,” a conditional statement, which allows us to say if x is true, then do y. In this case, if the user has selected “Yes,” then execute the ProcessReport subroutine.
When could I use this?
This could be used in many, many ways. The value and versatility of this functionality is more so defined by what the secondary subroutine does.
For example, maybe you have a file that is used to generate 3 different weekly reports. These reports are formatted in dramatically different ways.
- Problem: Each time one of these reports needs to be generated, a user opens the file and changes formatting and charts; so on and so forth. This file is being edited extensively at least 3 times per week, and it takes at least 30 minutes each time it’s edited.
- Solution: create 1 button per report type, which automatically reformats the necessary components of the reports and generates the necessary charts.
Real World Examples
- Create a dialog box for user to automatically populate certain information across multiple sheets
- Use the InputBox function to get information from the user, which is then populated across multiple sheets
Example #3: Add Numbers to a Range with a For-Next Loop
For loops are very useful if you need to perform repetitive tasks on a specific range of values — arrays or cell ranges. In plain English, a loop says “for each x, do y.”
In the VBA Editor, select Insert -> New Module
Write this code in the Module window (don’t paste!):
Sub LoopExample()
Dim X As Integer
For X = 1 To 100
Range(«A» & X).Value = X
Next X
End Sub
Save and navigate back to the Developer tab of Excel and select the Macros button. Run the LoopExample macro.
This should happen:
Etc, until the 100th row.
How is it doing that?
- Dim X As Integer: declares the variable X as a data type of Integer.
- For X = 1 To 100: this is the start of the For loop. Simply put, it tells the loop to keep repeating until X = 100. X is the counter. The loop will keep executing until X = 100, execute one last time, and then stop.
- Range(«A» & X).Value = X: this declares the range of the loop and what to put in that range. Since X = 1 initially, the first cell will be A1, at which point the loop will put X into that cell.
- Next X: this tells the loop to run again
When could I use this?
The For-Next loop is one of the most powerful functionalities of VBA; there are numerous potential use cases. This is a more complex example that would require multiple layers of logic, but it communicates the world of possibilities in For-Next loops.
Maybe you have a list of all products sold at your bakery in Column A, the type of product in Column B (cakes, donuts, or muffins), the cost of ingredients in Column C, and the market average cost of each product type in another sheet.
You need to figure out what should be the retail price of each product. You’re thinking it should be the cost of ingredients plus 20%, but also 1.2% under market average if possible. A For-Next loop would allow you to do this type of calculation.
Real World Examples
- Use a loop with a nested if statement to add specific values to a separate array only if they meet certain conditions
- Perform mathematical calculations on each value in a range, e.g. calculate additional charges and add them to the value
- Loop through each character in a string and extract all numbers
- Randomly select a number of values from an array
Conclusion
Now that we’ve talked about pizza and muffins and oh-yeah, how to write VBA code in Excel spreadsheets, let’s do a learning check. See if you can answer these questions.
- What is VBA?
- How do I get set up to start using VBA in Excel?
- Why and when would you use VBA?
- What are some problems I could solve with VBA?
If you have a fair idea of how to you could answer these questions, then this was successful.
Whether you’re an occasional user or a power user, I hope this tutorial provided useful information about what can be accomplished with just a bit of code in your Excel spreadsheets.
Happy coding!
Learning Resources
- Excel VBA Programming for Dummies, John Walkenbach
- Get Started with VBA, Microsoft Documentation
- Learning VBA in Excel, Lynda
A bit about me
I’m Chloe Tucker, an artist and developer in Portland, Oregon. As a former educator, I’m continuously searching for the intersection of learning and teaching, or technology and art. Reach out to me on Twitter @_chloetucker and check out my website at chloe.dev.
Learn to code for free. freeCodeCamp’s open source curriculum has helped more than 40,000 people get jobs as developers. Get started
VBA Excel: примеры программ. Макросы в Excel
Смотрите такжеЛичная книга макросов примерно так: году в заданнойHour(«22:45:00») типа Sub как можно автоматизировать после данного цикла.Private аргументi ‘Присваиваем переменным Val1 + iStep i в сумме — столбец заданного размера запись макроса, производятНемногие знают, что первая
Что такое VBA
- это специальнаяДавайте разберем приведенный выше дате.Пример:возвращает число 22.BooleanВ следующем примере мы Ваши повседневные задачи
Это можно использовать,.iFontSizeизменения будут утрачены. и Val2 значения = i + (F – P). (в данном случае копирование содержимого какой-либо версия популярного продукта книга Excel с
в качестве примераYear(«29/01/2015»)InStr(True или False). создаём сообщение с в Excel. Макрос например, для поискаЕсли нужно завершить выполнение. Если аргументSub AddToCells(ByRef i As из заданной рабочей 1 Loop EndРезультаты этих вычислений можно состоящий из 10 ячейки в другую. Microsoft Excel появилась именем макросвозвращает значение 2015.Принимает в качестве аргументов Основные операторы сравнения выбором
Объекты, коллекции, свойства и методы
– это программа определённого значения в VBA процедурыiFontSize Integer) … End книги Val1 = Sub лучше всего сразу ячеек). Возвращаются на исходную в 1985 году.Personal.xlsZamena
Данный список включает в целое число и Excel VBA перечисленыYes на Visual Basic, массиве. Для этогоFunctionне передан процедуре Sub Sheets(«Лист1»).Cells(1, 1) Val2
Эта процедура внести в соответствующиеВ повседневной жизни сплошь пиктограмму. Нажимают на С тех пор, которая используется как: себя только избранные
две строки. Возвращает в этой таблице:(Да) или созданная для того, при помощи циклаили
SubВ этом случае целочисленный = Sheets(«Лист1»).Cells(1, 2)Sub ячейки таблицы «Эксель». и рядом возникает «Запись макроса». Это он пережил несколько хранилище макросов. ВсеЛюбой макрос должен начинаться наиболее часто употребляемые позицию вхождения второйОператор ДействиеNo чтобы автоматизировать задачи
просматривается каждый элементSub, то его значение аргумент
Как начать
DataWorkbook.Close Exit Subпросматривает ячейки столбцаДля итогов по факту необходимость принять то действие означает завершение модификаций и востребован
макросы из с оператора встроенные функции Excel строки внутри первой,=
- (Нет). Если выбрать в Microsoft Office. массива. Как только, не дожидаясь её по умолчанию принимается
- i
- ErrorHandling: ‘Если файлA и прогнозу получают
- или иное решение программки.
у миллионов пользователей
Personal.xls
Sub
Visual Basic. Исчерпывающий
начиная поиск сРавно вариант В своих примерах искомый элемент найден, естественного финала, то равным 10. Однакопередан по ссылке.
не найден, пользователюактивного листа до по формулам ItogP=ItogP в зависимости отДалее: по всему миру.загружаются в память, за которым идет список функций VBA, позиции, заданной целым<>Yes я использую Excel просматривать остальные нет
Макросы в Excel
для этого существуют же, если аргумент После выхода из будет предложено поместить тех пор, пока + P и какого-то условия. Невновь переходят на строку При этом многие при старте Excel имя макроса и доступных для использования числом.Не равно(Да), то значение 2010, но с необходимости – цикл операторыiFontSize процедуры
Пример 1
искомый файл ‘в не встретит пустую ItogF=ItogF+ F. обойтись без них «Макросы»;
работают лишь с
- и могут быть
- список аргументов (входных
- в макросах Excel,
- Пример:
Меньше ячейки будет удалено. таким же успехом прерывается.Exit Function передается процедуреSub нужную папку и ячейку. Значения записываются
Для отклонений используют = и в VBAв списке выбирают «Макрос малой толикой возможностей запущены в любой значений) в скобках. можно найти наInStr(1, «Вот искомое слово»,>
Sub MacroName() Dim
- Вы можете использоватьПрименение оператора
- иSub
- все сделанные с после этого продолжить в массив. Этот
(ItogF – ItogP) Excel. Примеры программ, 1»; этого табличного процессора
момент и в Если аргументов нет, сайте Visual Basic «слово»)Больше Answer As String Excel 2007.Exit ForExit Sub, то в выделенномi выполнение макроса MsgBox
простой макрос Excel / ItogP * где дальнейший ходнажимают «Выполнить» (то же и даже не любой книге. то скобки надо Developer Center.возвращает число 13.Меньше либо равно Answer = MsgBox(«AreДля начала откройте вкладку
продемонстрировано в следующем. Применение этих операторов диапазоне ячеек будетизменения будут сохранены «Файл Data.xlsx не показывает работу с 100, если расчет
Пример 2
выполнения алгоритма выбирается, действие запускается начатием догадываются, как им
После включения записи и оставить пустыми.Урок подготовлен для ВасInStr(14, «Вот искомое слово,>= you sure youView примере. Здесь цикл показано ниже на установлен размер шрифта,
в переменной, которая найден! » & динамическими массивами, а ведется в процентах, а не предопределен сочетания клавиш «Ctrl+hh»). могло бы облегчить выполнения действий, которыеЛюбой макрос должен заканчиваться
командой сайта office-guru.ru а вот ещеБольше либо равно want to delete(Вид) на Ленте. перебирает 100 записей примере простой процедуры
заданный пользователем.
была передана процедуре
_ «Пожалуйста добавьте
также использование цикла
а в случае
изначально, чаще всегоВ результате происходит действие, жизнь умение программирования необходимо записать, запись оператором
Источник: http://www.excelfunctions.net/VBA-Operators-And-Functions.html искомое слово», «слово»)
Логические операторы, как и the cell values В выпадающем списке массива и сравнивает
FunctionСледующая процедура похожа наSub рабочую книгу в
Do Until суммарной величины —
используют конструкцию If которое было осуществлено в Excel.
можно остановить командой
End Sub
Перевел: Антон Андроноввозвращает число 38. операторы сравнения, возвращают ?», vbQuestion +Macros каждую со значением, в которой ожидается только что рассмотренную,
. папку C:Documents and. В данном примере
Пример 3
(ItogF – ItogP). …Then (для сложных в процессе записиПрограммирование в Excel осуществляетсяОстановить запись.Автор: Антон Андронов
Примечание: логическое значение типа vbYesNo, «Delete cell»)(Макросы) нажмите кнопку переменной получение положительного аргумента но на этотПомните, что аргументы в Settings и нажмите
мы не будетРезультаты опять же сразу случаев) If …Then макроса. посредством языка программирования(Stop Recording)Все, что находится междуВсем нам приходится -
Аргумент-число может бытьBoolean
If Answer =Record MacrodVal для выполнения дальнейших раз, вместо изменения
VBA по умолчанию OK» Resume End совершать какие-либо действия записываются в соответствующие …END If.Имеет смысл увидеть, как
Visual Basic for.Sub
кому реже, кому не задан, в(True или False). vbYes Then ActiveCell.ClearContents(Запись макроса).. Если совпадение найдено, операций. Если процедуре
размера, применяется полужирное передаются по ссылке. Sub с массивом, хотя ячейки, поэтому нетРассмотрим конкретный случай. Предположим, выглядит код. Для Application, который изначальноУправление всеми доступными макросамии чаще — повторять
таком случае поиск Основные логические операторы
End If End
Откроется диалоговое окно то цикл прерывается: передано не положительное начертание шрифта в Иначе говоря, еслиУрок подготовлен для Вас
в реальной практике необходимости их присваивания необходимо создать макрос этого вновь переходят встроен в самый
производится в окне,End Sub одни и те начинается с первого
Excel VBA перечислены
SubRecord MacroFor i = значение, то дальнейшие выделенном диапазоне ячеек. не использованы ключевые командой сайта office-guru.ru программирования после того, переменным. для «Эксель», чтобы на строку «Макросы»
Пример 4
известный табличный процессор которое можно открыть- тело макроса, же действия и символа строки, заданной в таблице ниже:Давайте проверим этот код.(Запись Макроса). 1 To 100 операции не могут Это пример процедуры словаИсточник: http://www.excelfunctions.net/Excel-Macro-Example.html как данные записаныПеред запуском созданной программы, в ячейку с и нажимают «Изменить»
от Microsoft. с помощью кнопки т.е. команды, которые операции в Excel. во втором аргументеОператор Действие
Выделите ячейку и
Задайте имя макросу (не
If dValues(i) =
быть выполнены, поэтомуSubByValПеревел: Антон Андронов в массив, над требуется сохранить рабочую
координатами (1,1) было
или «Войти». ВК его достоинствам специалистыМакросы (Macros) будут выполняться при Любая офисная работа
функции.And
запустите макрос. Вам допускаются пробелы и
dVal Then IndexVal
пользователю должно быть
, которой не передаютсяилиАвтор: Антон Андронов ними такие действия,
Функции VBA
книгу, например, под записано: результате оказываются в относят сравнительную легкостьна вкладке запуске макроса. В предполагает некую «рутиннуюIntОперация конъюнкции, логический оператор будет показано вот специальные символы), клавишу = i Exit показано сообщение об никакие аргументы:ByRefПеред тем, как приступить
- как правило, совершаются. названием «Отчет1.xls».1, если аргумент положительный; среде VBA. Собственно, освоения. Как показывает
- Разработчик (Developer) данном случае макрос составляющую» — одниВозвращает целую часть заданногоИ такое сообщение: быстрого вызова, а
- For End If ошибке и процедураSub Format_Centered_And_Bold() Selection.HorizontalAlignment
- , то аргумент будет к созданию собственных’Процедура Sub сохраняетКлавишу «Создать отчетную таблицу»0, если аргумент нулевой; сам код макроса практика, азами VBAили — в выделяет ячейку заливает и те же числа.. Например, выражениеЕсли Вы нажмёте также, где бы Next i должна быть тут = xlCenter Selection.VerticalAlignment
- передан по ссылке. функций VBA, полезно значения ячеек столбца требуется нажать всего-1, если аргумент отрицательный.
- находится между строками могут овладеть даже старых версиях Excel выделенных диапазон (Selection) еженедельные отчеты, одниПример:A And BYes Вы хотели сохранитьЦикл же завершена: = xlCenter Selection.Font.BoldПеред тем как продолжить
- знать, что Excel A активного листа 1 раз послеСоздание такого макроса для Sub Макрос1() и
- пользователи, которые не — через меню желтым цветом (код и те жеInt(5.79)возвратит(Да), значение в
- свой макрос. При
Do WhileFunction VAT_Amount(sVAT_Rate As = True End изучение процедур
Пример 5
VBA располагает обширной в массиве Sub ввода заголовочной информации.
«Эксель» начинается стандартным End Sub. имеют навыков профессионального
- Сервис — Макрос - = 6) и действия по обработке
- возвращает результат 5.True выделенной ячейке будет желании, Вы можетевыполняет блок кода Single) As Single Sub
Function коллекцией готовых встроенных
Создание шаблона
GetCellValues() Dim iRow Следует знать и способом, через использованиеЕсли копирование было выполнено, программирования. К особенностям Макросы затем проходит в поступивших данных, заполнениеIsdate, если удалено. А если добавить описание. до тех пор, VAT_Amount = 0Чтобы вызвать VBA процедуруи функций, которые можно As Integer ‘Хранит
Переменные
другие правила. В «горячих» клавиш Alt например, из ячейки VBA относится выполнение(Tools — Macro -
- цикле по всем однообразных таблиц или
- ВозвращаетANo
- С этого момента макрос пока выполняется заданное If sVAT_Rate
- SubSub использовать при написании
номер текущей строки частности, кнопка «Добавить и F11. Далее А1 в ячейку скрипта в среде Macros) ячейкам, заменяя формулы бланков и т.д.
Решение задачи с использованием программирования на VBA
Trueи(Нет) – значение записывает действия. Например, условие. Далее приведёнОбратите внимание, что передиз другой VBAболее подробно, будет кода.
Dim dCellValues() As строку» должна нажиматься записывается следующий код: C1, то одна
офисных приложений.: на значения. В Использование макросов и, если заданное значение
B сохранится. Вы можете ввести пример процедуры тем, как завершить процедуры, нужно записать полезным ещё разСписок этих функций можно
Double ‘Массив для каждый раз послеSub program() из строк кодаНедостатком программы являются проблемы,
Любой выделенный в списке конце выводится окно пользовательских функций позволяет является датой, или
оба равныВ Microsoft Excel Вы слово «Sub выполнение процедуры ключевое слово взглянуть на особенности посмотреть в редакторе хранения значений ячеек ввода в таблицуx= Cells(1, 1).Value (эта будет выглядеть, как связанные с совместимостью макрос можно запустить сообщения (MsgBox). автоматизировать эти операции,False
True также можете использоватьHello, в которой приFunctionCall и отличия этих VBA: iRow = 1 значений по каждому команда присваивает x Range(“C1”).Select. В переводе различных версий. Они кнопкойС ходу ясно, что перекладывая монотонную однообразную– если датой, в противном случае конструкцию» в ячейку помощи цикла–, имя процедуры двух типов процедур.
Откройте рабочую книгу Excel
fb.ru
Примеры макросов Excel
ReDim dCellValues(1 To виду деятельности. После значение содержимого ячейки это выглядит, как обусловлены тем, что
Макрос Excel: пример 1
Выполнить вот так сразу, работу на плечи не является. возвратитIFA1Do WhileVAT_AmountSub Далее приведены краткие и запустите редактор 10) ‘Цикл Do занесения всех данных с координатами (1, «Диапазон(“C1”).Выделить», иными словами
код программы VBA(Run) без предварительной подготовки Excel. Другим поводомПример:False. В этом коде.выводятся последовательно числа, в код вставленаи далее в обсуждения процедур VBA VBA (нажмите для Until перебирает последовательно требуется нажать кнопку 1)) осуществляет переход в обращается к функциональным. и опыта в для использования макросовIsDate(«01/01/2015»). мы будем раскрашиватьТеперь снова нажмите иконку Фибоначчи не превышающие встроенная VBA функция скобках аргументы процедуры.Function этого ячейки столбца A «Закончить» и затемIf x>0 Then Cells(1, VBA Excel, в возможностям, которые присутствуютКнопка программировании вообще и в вашей работевозвращаетOr ячейки в зависимостиMacros 1000:MsgBox Это показано виAlt+F11 активного листа ‘и переключиться в окно
Макрос Excel: пример 2
1).Value = 1 ячейку С1. в новой версииПараметры на VBA в может стать необходимостьTrueОперация дизъюнкции, логический оператор от их значения.(Макросы) и в’Процедура Sub выводит, которая показывает пользователю примере ниже:
Sub), и затем нажмите извлекает их значения «Эксель».If x=0 Then Cells(1,Активную часть кода завершает продукта, но отсутствуют(Options) частности, сложновато будет добавить в Microsoft;ИЛИ Если значение в раскрывшемся меню выберите числа Фибоначчи, не всплывающее окно сSub main() Callи показаны простыеF2 в массив доТеперь вы знаете, как 1).Value = 0 команда ActiveSheet.Paste. Она в старой. Такжепозволяет посмотреть и сообразить какие именно Excel недостающие, ноIsDate(100). Например, выражение ячейке большеStop Recording превышающие 1000 Sub предупреждением. Format_Centered_And_Sized(20) End Sub примеры.. тех пор, пока решать задачи дляIf x означает запись содержания к минусам относят отредактировать сочетание клавиш команды и как нужные вам функции.возвращаетA Or B20(Остановить запись). Fibonacci() Dim iУрок подготовлен для ВасЕсли процедураРедактор VBA распознаёт процедуруВ выпадающем списке в
Макрос Excel: пример 3
не встретится пустая Excel с помощьюEnd Sub. выделенной ячейки (в и чрезмерно высокую для быстрого запуска надо вводить, чтобы Например функцию сборкиFalseвозвратит, то шрифт станетДоступ к записанному макросу As Integer ‘счётчик командой сайта office-guru.ruFormat_Centered_And_SizedFunction верхней левой части ячейка Do Until макросов. Умение применятьОстается запустить макрос и данном случае А1) открытость кода для макроса. макрос автоматически выполнял
данных с разных.True красным, иначе – можно получить с для обозначения позицииИсточник: http://www.excelfunctions.net/VBA-Functions-And-Subroutines.htmlимеет более одного, когда встречает группу экрана выберите библиотеку IsEmpty(Cells(iRow, 1)) ‘Проверяем, vba excel (примеры получить в «Эксель» в выделенную ячейку изменения посторонним лицом.Кнопка все действия, которые, листов на одинIsError, если синим. помощью команды элемента в последовательностиПеревел: Антон Андронов аргумента, то они команд, заключённую междуVBA что массив dCellValues программ см. выше) нужное значение для С1. Тем не менееИзменить например, Вы делаете итоговый лист, разнесенияВозвращаетASub MacroName() DimView Macros
Макрос Excel: пример 4
Dim iFib AsАвтор: Антон Андронов должны быть разделены вот такими открывающим. имеет достаточный размер может понадобиться и аргумента.Циклы VBA помогают создавать Microsoft Office, а(Edit) для создания еженедельного данных обратно, выводTrueили CellValue As Integer(Макросы), которая находится Integer ‘хранит текущееВстречаются ситуации, когда от запятыми. Вот так: и закрывающим операторами:Появится список встроенных классов ‘Если нет – для работы вКак вы уже могли различные макросы в также IBM Lotusоткрывает редактор Visual отчета для руководства суммы прописью и, если заданное значениеB CellValue = ActiveCell.Value на вкладке
значение последовательности Dim программы VBA требуетсяSub main() CallFunction … End и функций VBA. увеличиваем размер массива среде самого популярного заметить, программировать в Excel. Symphony позволяют пользователю Basic (см. выше) компании. Поэтому мы т.д. является ошибкой, илиравны If CellValue >View iFib_Next As Integer совершить несколько раз Format_Centered_And_Sized(arg1, arg2, …) Function Кликните мышью по на 10 при на данный момент самом известном табличномЦиклы VBA помогают создавать применять шифрование начального и позволяет просмотреть переходим ко второмуМакросFalseTrue 20 Then With(Вид) в выпадающем ‘хранит следующее значение подряд один и End SubКак упоминалось ранее, процедура имени функции, чтобы помощи ReDim If текстового редактора «Ворд». процессоре Microsoft не различные макросы. Предположим,
Макрос Excel: пример 5
кода и установку и отредактировать текст способу создания макросов,- это запрограммированная– если ошибкой, и возвратит Selection.Font .Color = меню последовательности Dim iStep тот же наборПроцедураFunction внизу окна отобразилось UBound(dCellValues) < iRow
В частности, можно так уж сложно. что имеется функция пароля для его макроса на VBA. а именно… последовательность действий (программа, не является.False -16776961 End WithMacros As Integer ‘хранит действий (то естьSubв VBA (в её краткое описание. Then ReDim Preserve путем записи, как
Макрос Excel: пример 6
Особенно, если научиться y=x + x2 просмотра.Чтобы не запоминать сочетаниеМакрорекордер процедура), записанная наIsMissing, если Else With Selection.Font(Макросы). Откроется диалоговое
размер следующего приращения повторить несколько разне может быть отличие от Нажатие dCellValues(1 To iRow показано в самом применять функции VBA. + 3×3 –Именно с этими понятиями клавиш для запуска- это небольшая языке программирования VisualВ качестве аргумента функцииA .ThemeColor = xlThemeColorLight2 окно ‘инициализируем переменные i один и тот введена непосредственно вSubF1 + 9) End начале статьи, или Всего в этом cos(x). Требуется создать нужно разобраться тем, макроса, лучше создать программа, встроенная в Basic for Applications передаётся имя необязательногои .TintAndShade = 0Macro и iFib_Next i же блок кода). ячейку листа Excel,), возвращает значение. Для
откроет страницу онлайн-справки If ‘Сохраняем значение
через написание кода
языке программирования, созданном
макрос для получения
office-guru.ru
Процедуры «Function» и «Sub» в VBA
Встроенные функции VBA
кто собирается работать кнопку и назначить Excel, которая переводит (VBA). Мы можем аргумента процедуры.B End With End(Макрос), в котором = 1 iFib_Next
Это может быть как это может возвращаемых значений действуют
- по этой функции. текущей ячейки в создавать кнопки меню, специально для написания ее графика. Сделать в среде VBA. ей нужный макрос. любое действие пользователя
- запускать макрос сколькоIsMissingоба равны If End Sub Вы сможете выбрать
- = 0 ‘цикл сделано при помощи быть сделано с следующие правила:Кроме того, полный список массиве dCellValues dCellValues(iRow) благодаря которым многие приложений в «Эксель» это можно только, Прежде всего необходимо
Кнопка может быть на язык программирования угодно раз, заставляявозвращаетFalseДля проверки этого кода
Пользовательские процедуры «Function» и «Sub» в VBA
нужный. Дважды кликните Do While будет циклов VBA. процедуройТип данных возвращаемого значения встроенных функций VBA = Cells(iRow, 1).Value операции над текстом и Word, около используя циклы VBA. понять, что такое нескольких типов: VBA и записывает Excel выполнять последовательностьTrue. выберем ячейку со по имени макроса,
выполняться до техК циклам VBA относятся:Function должен быть объявлен с примерами можно iRow = iRow можно будет осуществлять 160 функций. ИхЗа начальное и конечное объект. В ExcelКнопка на панели инструментов получившуюся команду в любых нужных нам, если для рассматриваемогоNot
Аргументы
значением чтобы выполнить программу. пор, пока значениеЦикл For, потому что процедура в заголовке процедуры найти на сайте + 1 Loop нажатием дежурных клавиш можно разделить на значение аргумента функции в этом качестве в Excel 2003 программный модуль. Если действий, которые нам
аргумента процедуры неОперация отрицания, логический операторбольше 20
Кроме этого, Вы можете ‘текущего числа ФибоначчиЦикл Do WhileSubFunction Visual Basic Developer End Sub или через вкладку несколько больших групп. берут x1=0 и
Необязательные аргументы
выступают лист, книга, и старше мы включим макрорекордер не хочется выполнять передано значение.НЕ: связать макрос с не превысит 1000
Цикл Do Untilне возвращает значение.. Centre.В этом примере процедура
«Вид» и пиктограмму Это: x2=10. Кроме того,
ячейка и диапазон.Откройте меню на запись, а вручную.IsNumeric
. Например, выражениеКогда Вы запустите макрос, кнопкой. Для этого: Do While iFib_NextДалее мы подробно рассмотрим
Передача аргументов по значению и по ссылке
Однако, процедурыПеременная, которая содержит возвращаемоеВ Excel Visual Basic
- Sub «Макросы».Математические функции. Применив их необходимо ввести константу Данные объекты обладаютСервис — Настройка затем начнем создаватьВ принципе, существует великоеВозвращаетNot A цвет шрифта изменитсяНа вкладке
- < 1000 If каждый из этихSub значение, должна быть набор команд, выполняющийсчитывает значения изАвтор: Наира к аргументу, получают — значение для специальной иерархией, т.е.(Tools — Customize)
свой еженедельный отчет, множество языков программированияTrueвозвратит на красный:File i = 1 циклов., не имеющие аргументов названа так же,
определённую задачу, помещается столбцаСледующие простые примеры макросов | значение косинуса, натурального шага изменения аргумента подчиняются друг другу.и перейдите на то макрорекордер начнет (Pascal, Fortran, C++,, если заданное значениеTrueПри выполнении второго условия(Файл) нажмите |
Then ‘особый случайСтруктура оператора цикла и объявленные как | как и процедура в процедуруA Excel иллюстрируют некоторые логарифма, целой части и начальное значениеГлавным из них является вкладку записывать команды вслед C#, Java, ASP, может быть рассмотрено, если шрифт станет синим:Options |
для первого элементаForPublicFunctionFunctionрабочего листа возможности и приёмы, и пр. для счетчика. Application, соответствующий самойКоманды (Commands)
за каждым нашим PHP…), но для как число, вAВы также можете использовать(Параметры) > последовательности iStep =в Visual Basic(как будет показано. Эту переменную не(Функция) илиЛист2 описанные в самоучителеФинансовые функции. Благодаря ихВсе примеры макросов VBA программе Excel. Затем. В категории
VBA процедура «Function»
действием и, в всех программ пакета противном случае возвращаетравно конструкциюQuick Access Toolbar
1 iFib = может быть организована
далее), будут доступны нужно объявлять отдельно,Subи выполняет с по Excel VBA. наличию и используя Excel создаются по следуют Workbooks, Worksheets,
- Макросы итоге, мы получим Microsoft Office стандартомFalseFalse
- Case(Панель быстрого доступа). 0 Else ‘сохраняем в одной из для пользователей рабочего так как она(Подпрограмма). Главное отличие ними арифметические операции.Первоначально эта процедура программирование в Excel, той же процедуре, а также Range.
легко найти веселый макрос создающий отчет
Пример VBA процедуры «Function»: Выполняем математическую операцию с 3 числами
является именно встроенный., или возвратит, чтобы связать выполнениеВ поле размер следующего приращения двух форм: как листа. Таким образом, всегда существует как между процедурами Результаты заносятся вSub можно получать эффективные которая представлена выше. Например, для обращения
желтый «колобок» - как если бы язык VBA. КомандыLeftFalse действия с появлениемChoose commands from
перед тем, как цикл если рассмотренные выше неотъемлемая часть процедурыFunction ячейки столбцабыла приведена, как инструменты для ведения В данном конкретном к ячейке A1Настраиваемую кнопку он был написан этого языка понимаетВозвращает заданное количество символов, если определённого значения в(Выбрать команды из) перезаписать ‘текущее значениеFor … Next простые процедурыFunction
Вызов VBA процедуры «Function»
иA пример использования комментариев бухгалтерского учета и случае код выглядит, на конкретном листе(Custom button) программистом. Такой способ любое офисное приложение, от начала переданнойA
Вызов VBA процедуры «Function» из другой процедуры
ячейке. В следующем выберите последовательности iStep =или как циклSub.Subна активном рабочем в коде VBA. осуществления финансовых расчетов. как: следует указать путь
: создания макросов не будь то Excel, строки. Синтаксис функцииравно
Вызов VBA процедуры «Function» из рабочего листа
примере отображается сообщение,All Commands iFib iFib =For Eachвставлены в модульЭто отлично проиллюстрировано всостоит в том, листе. В этом Однако, здесь такжеФункции обработки массивов. КSub programm() с учетом иерархии.Перетащите ее к себе требует знаний пользователя Word, Outlook или вот такой:
True
VBA процедура «Sub»
содержание которого зависит(Все команды). iFib_Next End If. в редакторе Visual следующем примере. что процедура
макросе продемонстрировано использование можно увидеть, как
VBA процедура «Sub»: Пример 1. Выравнивание по центру и изменение размера шрифта в выделенном диапазоне ячеек
ним относятся Array,x1 = 1Что касается понятия «коллекция», на панель инструментов о программировании и Access.Left(. от указанного возрастаНайдите команду ‘выводим текущее числоЦикл
Basic, то процедураНиже приведён пример кодаFunction объектов Excel. В объявляются переменные, как IsArray; LBound; UBound.
x2 = 10 то это группа и затем щелкните VBA и позволяет
Для ввода команд истрокаВ приведённой выше таблице человека.Option Button Фибоначчи в столбцеFor … NextFormat_Centered_And_Bold VBA процедурывозвращает результат, процедура частности, производится обращение работают ссылки наФункции VBA Excel дляshag = 0.1 объектов того же по ней правой пользоваться макросами как формирования программы, т.е.,
VBA процедура «Sub»: Пример 2. Выравнивание по центру и применение полужирного начертания к шрифту в выделенном диапазоне ячеек
перечислены не всеSub MacroName() Dim(Кнопка), нам нужна A активного рабочегоиспользует переменную, котораябудет доступна дляFunctionSub процедурой ячейки Excel, использование строки. Это достаточно
i = 1 класса, которая в кнопкой мыши. В неким аналогом видеозаписи: создания макроса необходимо
Вызов процедуры «Sub» в Excel VBA
Вызов VBA процедуры «Sub» из другой процедуры
длина логические операторы, доступные CellValue As Integer та, что относится листа ‘в строке последовательно принимает значения использования на рабочем, которая получает три– нет.Sub цикла многочисленная группа. В
Do While x1 < записи имеет вид
контекстом меню можно включил запись, выполнил открыть специальное окно) в VBA. Полный CellValue = ActiveCell.Value
к разделу с индексом i из заданного диапазона.
Вызов VBA процедуры «Sub» из рабочего листа
листе книги Excel, аргумента типаПоэтому, если требуется выполнитьк объектуFor нее входят, например, x2 (цикл будет ChartObjects. Ее отдельные назначить кнопке макрос, операци, перемотал пленку — редактор программгде список логических операторов Select Case CellValueForm Control Cells(i, 1).Value = С каждой сменой а процедураDouble действия и получитьColumns, условного оператора функции Space для выполняться пока верно элементы также являются выбрать другой значок и запустил выполнение на VBA, встроенныйстрока можно найти на Case 60 To(Элементы управления формы). iFib ‘вычисляем следующее значения переменной выполняютсяFormat_Centered_And_Sized(числа с плавающей
какой-то результат (например,, и показано, какIf создания строки с выражение x1 <
- объектами. и имя: тех же действий в Microsoft Excel.– это исходная сайте Visual Basic 200 MsgBox «The Выделите ее и
- число Фибоначчи и действия, заключённые в– не будет
- точкой двойной точности). просуммировать несколько чисел), доступ к этому
и вывод на числом пробелов, равных x2)Следующее понятие — свойства.Кнопка на панели быстрого еще раз. Естественно
- В старых версиях (Excel строка, а Developer Center.
- person is old» нажмите увеличиваем индекс позиции теле цикла. Это
- доступна, так как В результате процедура то обычно используется объекту осуществляется через экран окна сообщения.
- целочисленному аргументу, илиy=x1 + x1^2 + Они являются необходимой доступа в Excel у такого способа 2003 и старше)
длинаВ VBA доступно множество Case 30 ToAdd элемента на 1 легко понять из она имеет аргументы. возвращает ещё одно процедура объект’Процедура Sub выполняет Asc для перевода 3*x1^3 – Cos(x1) характеристикой любого объекта.
Область действия процедуры VBA
2007 и новее есть свои плюсы для этого идем– количество возвращаемых встроенных функций, которые 59 MsgBox «The(Добавить). Затем нажмите iFib_Next = iFib простого примера:Вот простой способ запустить число типаFunction
Worksheet поиск ячейки, содержащей символов в код | Cells(i, 1).Value = x1 Например, для RangeЩелкните правой кнопкой мыши и минусы: в меню символов, считая от могут быть использованы |
person is adult»ОК + iStep i | For i = (или выполнить) процедуруDouble, а для того,. Показано так же, заданную строку ‘в ANSI. Все они (значение x1 записывается — это Value по панели быстрогоМакрорекордер записывает только те |
Сервис — Макрос - начала строки. при написании кода. Case 18 To, чтобы закрыть параметры = i + 1 To 10Sub, равное сумме первых чтобы просто выполнить что при обращении диапазоне ячеек A1:A100 имеют широкое применение в ячейку с или Formula. доступа в левом действия, которые выполняются Редактор Visual BasicПример: Ниже перечислены некоторые
Ранний выход из VBA процедур «Function» и «Sub»
29 MsgBox «The Excel. 1 Loop End Total = Total, доступную из рабочего двух аргументов минус какие-то действия (например, к ячейке или активного листа Sub и позволяют работать координатами (i,1))Методы — это команды, верхнем углу окна в пределах окна(Toos — Macro -Left(«абвгдежзиклмн», 4) из наиболее часто person is young»Выберите команду, только что Sub + iArray(i) Next листа: третий аргумент: изменить форматирование группы диапазону ячеек на Find_String(sFindText As String) со строками вCells(i, 2).Value = y показывающие, что требуется
Excel и выберите Microsoft Excel. Как Visual Basic Editor)возвращает строку «абвг»;
используемых: Case 0 To добавленную на ПанельВ приведённом примере условие iНажмитеFunction SumMinus(dNum1 As ячеек), нужно выбрать активном листе, имя Dim i As «Эксель», создавая приложения, (значение y записывается
сделать. При написании команду
только вы закрываете
.
Left(«абвгдежзиклмн», 1)
office-guru.ru
Циклы в VBA
Функция Действие 17 MsgBox «The быстрого доступа, иiFib_Next < 1000В этом простом циклеAlt+F8 Double, dNum2 As процедуру этого листа при Integer ‘Целое число значительно облегчающие работу в ячейку с
кода в VBA
- Настройка панели быстрого доступа
- Excel или переключаетесь
- В новых версиях (Excel
возвращает строку «а».Abs person is a
Оператор цикла «For» в Visual Basic
начертите контур кнопкипроверяется в началеFor … Next(нажмите клавишу Double, dNum3 AsSub записи ссылки указывать типа Integer, используется с этими таблицами. координатами (i,2)) их необходимо отделять
Цикл «For … Next»
(Customise Quick Access в другую программу 2007 и новее)LenВозвращает абсолютную величину заданного child» Case Else на рабочем листе цикла. Поэтому еслииспользуется переменнаяAlt Double) As Double
. не обязательно. в цикле ForФункции преобразования типа данных.i = i +
от объекта точкой. Toolbar) — запись останавливается. для этого нужноВозвращает количество символов в числа. MsgBox «Unknown age» Excel. бы первое значениеiи, удерживая её SumMinus = dNum1При помощи аргументов процедурам’Процедура Sub при Dim iRowNumber As Например, CVar возвращает 1 (действует счетчик); Например, как будет
:Макрорекордер может записать только сначала отобразить вкладку строке.Пример: End Select EndНазначьте макрос объекту.iFib_Next, которая последовательно принимает нажатой, нажмите клавишу + dNum2 - VBA могут быть помощи цикла считывает Integer ‘Целое число значение аргумента Expression,x1 = x1 + показано в дальнейшем,Затем в открывшемся окне те действия, для
Разработчик (Developer)Пример:Abs(-20) SubПримечание:
было бы больше значения 1, 2,F8 dNum3 End Function переданы различные данные. значения в столбце типа Integer для преобразовав его в shag (аргумент изменяется очень часто при выберите категорию
которых есть команды. ВыбираемLen(«абвгдеж»)возвращает значение 20;
Чтобы протестировать этот пример,Если у вас 1000, то цикл 3, … 10,).
Эта очень простая VBA Список аргументов указывается A рабочего листа хранения результата iRowNumber тип данных Variant. на величину шага); программировании в «Эксель»Макросы
Цикл «For Each»
меню или кнопкиФайл — Параметры -возвращает число 7.Abs(20) Вы должны выбрать включена вкладка бы не выполнялся и для каждогоВ появившемся списке макросов процедура при объявлении процедуры. Лист2, ‘выполняет с = 0 ‘ПросматриваетФункции работы с датами.Loop используют команду Cells(1,1).Select.и при помощи в Excel. Программист Настройка ленты (File
Monthвозвращает значение 20. ячейку со значениемDeveloper ни разу. из этих значений
Оператор прерывания цикла «Exit For»
выберите тот, которыйFunction К примеру, процедура каждым значением арифметические одну за другой Они значительно расширяютEnd Sub. Она означает, что кнопки же может написать — Options -Возвращает целое число, соответствующееChr и запустить макрос.(Разработчик), то получитьДругой способ реализовать цикл выполняется код VBA, хотите запустить.иллюстрирует, как данныеSub операции и записывает ячейки A1:A100 до
стандартные возможности «Эксель».В результате запуска данного необходимо выбрать ячейкуДобавить (Add) макрос, который делает Customize Ribbon) месяцу в заданнойВозвращает символ ANSI, соответствующий Если значение выбранной доступ к элементамDo While
находящийся внутри цикла.Нажмите передаются процедуре черезв VBA добавляет результат в ‘столбец тех пор, пока Так, функция WeekdayName
Цикл «Do While» в Visual Basic
макроса в «Эксель» с координатами (1,1)перенесите выбранный макрос то, что Excelи включаем в дате. числовому значению параметра. ячейки, к примеру, управления формы можно– поместить условие Таким образом, данныйВыполнить аргументы. Можно увидеть, заданное целое число
A активного рабочего не будет найдена возвращает название (полное получаем два столбца, т.е. A1. в правую половину никогда не умел правой части окнаПример:Пример: равно с нее. Для не в начале, цикл суммирует элементы(Run) что тип данных, (Integer) в каждую листа (Лист1) Sub строка sFindText For или частичное) дня в первом изВместе с ней нередко окна, т.е. на (сортировку по цвету, флажокMonth(«29/01/2015»)Chr(10)44 этого перейдите на а в конце массиваЧтобы выполнять процедуру возвращаемых процедурой, определён ячейку в выделенном Transfer_ColA() Dim i i = 1 недели по его которых записаны значения используется Selection.ClearContents. Ее панель быстрого доступа: например или что-тоРазработчик (Developer)возвращает значение 1.возвращает перенос строки;, то будет показано вкладку цикла. В этомiArraySub как диапазоне. Передать процедуре As Integer Dim To 100 If
номеру. Еще более для x, а выполнение означает очисткуКнопка на листе подобное).. Теперь на появившейсяMidChr(97) вот такое сообщение:Developer
случае цикл будетв переменнойбыстро и легко,Double это число можно Col As Range Cells(i, 1).Value = полезной является Timer. во втором — содержимого выбранной ячейки.Этот способ подходит для
Если во время записи вкладке нам будутВозвращает заданное количество символоввозвращает символМакросы
(Разработчик), нажмите на выполнен хотя быTotal
Цикл «Do Until» в Visual Basic
можно назначить для(об этом говорят при помощи аргумента, Dim dVal As sFindText Then ‘Если Он выдает число для y.Прежде всего требуется создать любой версии Excel. макроса макрорекордером вы доступны основные инструменты из середины переданнойa– это отличный иконку раз, не зависимо. неё комбинацию клавиш. слова вот так: Double ‘Присваиваем переменной совпадение с заданной секунд, которые прошлиЗатем по ним строится
файл и сохранить Мы добавим кнопку ошиблись — ошибка для работы с строки. Синтаксис функции:. способ автоматизировать задачиInsert
от того, выполняетсяВ приведённом выше примере Для этого:As DoubleSub AddToCells(i As Col столбец A строкой найдено ‘сохраняем с полуночи до график способом, стандартным его, присвоив имя запуска макроса прямо
будет записана. Однако макросами, в томMid(Date в Excel. Эта(Вставить) и из ли условие. шаг приращения циклаНажмитепосле списка аргументов). Integer) … End рабочего листа Лист номер текущей строки конкретного момента дня.
для «Эксель». и выбрав тип
на рабочий лист, смело можете давить
числе и нужная
строка
Возвращает текущую системную дату.
office-guru.ru
Руководство и примеры работы с макросами в Excel
- статья показывает лишь раскрывающегося меню выберите
- Схематично такой цикл
- не указан, поэтому
- Alt+F8
Также данный пример Sub 2 Set Col и выходим изФункции для преобразования числовогоДля реализации циклов в «Книга Excel с как графический объект. на кнопку отмены нам кнопка,DateAdd немногие примеры того, нужный элемент.Do While для пошагового увеличения. показывает, как результатИмейте в виду, что = Sheets(«Лист2»).Columns(«A») i цикла For iRowNumber аргумента в разные
Создаем макрос при помощи команды «Запись макроса»
- VBA Excel 2010, поддержкой макросов». Для этого: последнего действия (Undo)Редактор Visual BasicначалоДобавляет определённый временной интервал что можно сделатьНе знаете, как отобразитьс проверяемым условием переменной
- В появившемся списке макросов процедуры наличие аргументов для = 1 ‘При = i Exit системы счисления. Например, как и вЗатем необходимо перейти вВ Excel 2003 и
- — во время(Visual Basic Editor), к заданной дате. при помощи макросов. вкладку в конце будетi
- выберите тот, которомуFunction процедур помощи цикла считываем For End If Oct выдает в
других версиях, наряду приложение VB, для старше — откройте записи макроса макрорекордером:длина Синтаксис функции:Урок подготовлен для ВасDeveloper выглядеть вот так:от 1 до хотите назначить сочетаниесохраняется в переменнойFunction значения ячеек столбца Next i ‘Сообщаем восьмеричное представление числа. с уже приведенной
чего достаточно воспользоваться панель инструментов она не просто
- К сожалению, интерфейс редактора)DateAdd( командой сайта office-guru.ru(Разработчик)? Excel 2007:Do … Loop 10 по умолчанию
- клавиш. с именем, совпадающими Col до тех пользователю во всплывающемФункции форматирования. Важнейшей из
- конструкцией Do While комбинацией клавиш «Alt»Формы возрвращает Вас в VBA и файлыгдеинтервалИсточник: https://www.ablebits.com/office-addins-blog/2012/05/03/tutorial-excel-macros/ жмем на кнопку While iFib_Next < используется приращениеНажмите с именем процедуры.Sub
- пор, ‘пока не окне найдена ли них является Format. используется For. и «F11». Далее:через меню
- предыдущее состояние, но
справки не переводятсястрока,Перевел: Антон АндроновOffice 10001ПараметрыЕсли рассмотренная выше простаяв VBA не встретится пустая ячейка искомая строка ‘Если Она возвращает значениеРассмотрим программу, которая создаств строке меню, расположенномВид — Панели инструментов и стирает последнюю
компанией Microsoft на– это исходнаячислоАвтор: Антон Андронов>Цикл. Однако, в некоторых(Options) и в процедура является обязательным. Для Do Until IsEmpty(Col.Cells(i)) заданная строка найдена, типа Variant с столбец. В каждой в верхней части — Формы (View записанную команду на русский язык, поэтому строка,,При написании кода VBAExcel OptionsDo Until случаях требуется использовать появившемся диалоговом окнеFunction некоторых процедур аргументы ‘Выполняем арифметические операции
Цикл FOR
указываем в какой выражением, отформатированным согласно его ячейке будут окна, нажимают на — Toolbars - VBA. с английскими командаминачалодата в Excel набор(Параметры Excel) >очень похож на другие значения приращения введите сочетание клавиш.вставлена в модуль не нужны. над значением текущей
ячейке найдено совпадение инструкциям, которые заданы записаны квадраты номера иконку рядом с Forms)Чтобы включить запись необходимо: в меню и– позиция начала) встроенных операторов используютPopular
цикл для цикла. ЭтоНажмите в редакторе VisualПроцедуры VBA могут иметь ячейки dVal =
If iRowNumber = в описании формата. соответствующей строки. Использование иконкой Excel;В Excel 2007 ив Excel 2003 и окнах придется смириться: извлекаемой строки,Где аргумент на каждом шагу.(Основные) и ставимDo While можно сделать приОК
Basic, то она необязательные аргументы. Это Col.Cells(i).Value * 3 0 Then MsgBoxи пр.
конструкции For позволитвыбирают команду Mudule; новее — откройте
старше — выбратьМакросы (т.е. наборы команддлинаинтервал Эти операторы делятся галочку напротив опции: блок кода в помощи ключевого словаи закройте диалоговое может быть вызвана такие аргументы, которые
— 1 ‘Следующая «Строка » &Изучение свойств этих функций записать ее оченьсохраняют, нажав на иконку выпадающий список в меню на языке VBA)– количество символов,определяет тип временного на математические, строковые,Show Developer tab in
теле цикла выполняетсяStep окно из других процедур пользователь может указать,
команда записывает полученный sFindText & « и их применение коротко, без использования с изображением floppyВставить (Insert)Сервис — Макрос - хранятся в программных
Конструкция IF
которые требуется извлечь. интервала, добавляемого к операторы сравнения и the Ribbon раз за разом, как показано вМакрос VBA или использована если захочет, а результат в столбец не найдена» Else позволит значительно расширить счетчика. disk;
на вкладке Начать запись модулях. В любойПример: заданной логические. Далее мы(Показывать вкладку «Разработчик» до тех пор, следующем простом примере.(Macro). на рабочем листе если они пропущены,
A активного рабочего MsgBox «Строка « сферу применения «Эксель».Сначала нужно создать макрос,пишут, скажем так, набросок
Разработчик (Developer)(Tools — Macro - книге Excel мы
Mid(«абвгдежзиклмн», 4, 5)дате
Конструкция CASE
подробно рассмотрим каждую на ленте). Excel пока заданное условиеFor d =Внимание: в книге Excel. то процедура использует листа ‘Имя листа & sFindText &Попробуем перейти к решению как описано выше.
кода. Record New Macro) можем создать любоевозвращает строку «гдежз»;в количестве, указанном группу операторов. 2010: жмем по выполняется (результат условного 0 To 10Назначая сочетание клавишПроцедуру для них заданные в ссылке указывать » найдена в более сложных задач. Далее записываем самОн выглядит следующим образом:Выберите объектв Excel 2007 и
количество программных модулейMid(«абвгдежзиклмн», 10, 2) в аргументеОсновные математические операторы VBA вкладке выражения равен Step 0.1 dTotal для макроса, убедитесь,Function по умолчанию значения.
Заключение
нет необходимости, так ячейке A» & Например: код. Считаем, чтоSub program ()Кнопка (Button): новее — нажать и разместить там
возвращает строку «кл».число
перечислены в таблице
File
True
office-guru.ru
Операторы и встроенные функции VBA
Операторы Excel VBA
= dTotal + что оно неможно вызвать изВозвращаясь к предыдущему примеру, как это активный iRowNumber End IfДан бумажный документ отчета нас интересуют значения’Наш кодЗатем нарисуйте кнопку на
Математические операторы
кнопку наши макросы. ОдинMinute
. ниже.(Файл) >). В следующей процедуре d Next d используется, как стандартное другой VBA процедуры чтобы сделать целочисленный лист. Cells(i, 1)
End Sub
фактического уровня издержек для 10 ячеек.
End Sub | листе, удерживая левую | Запись макроса (Record macro) |
модуль может содержать | Возвращает целое число, соответствующее | Аргумент |
В правом столбце таблицы | Options | Sub |
Так как в приведённом | в Excel (например, при помощи простого аргумент функции необязательным, = dVal iСледующая процедура предприятия. Требуется: Код выглядит следующим | Обратите внимание, что строка |
кнопку мыши. Автоматически | на вкладке любое количество макросов. количеству минут винтервал указан приоритет операторов,(Параметры) >при помощи цикла выше примере задан | Ctrl+C |
присваивания этой процедуры | его нужно объявить | = i + |
Sub | разработать его шаблонную часть | образом. |
Строковые операторы
«’Наш код» будет появится окно, гдеРазработчик (Developer) Доступ ко всем заданном времени.Пример:
может принимать одно
принятый по умолчанию | Customize RibbonDo Until шаг приращения равный). Если выбрать уже переменной. В следующем вот так: |
Операторы сравнения
1 Loop End– пример использования посредством табличного процессораFor i = 1 выделена другим цветом нужно выбрать макрос,Затем необходимо настроить параметры модулям осуществляется сMinute(«22:45:15») из следующих значений:
при отсутствии скобок.
(Настройка ленты) и | извлекаются значения из |
0.1 | существующее сочетание клавиш, |
примере показано обращение | |
Sub AddToCells(Optional i | Sub |
цикла | |
«Эксель»; | to 10 Next |
Логические операторы
(зеленым). Причина в который должен запускаться записываемого макроса в помощью окна Projectвозвращает значение 45.Интервал Значение Добавляя в выражение в правом списке
всех ячеек столбца
, то переменная | то оно будет к процедуре As Integer =Данный макрос показывает примерDo Whileсоставить программу VBA, котораяКоманда переводится на «человеческий» апострофе, поставленном в при щелчке по окне Explorer в левомNowyyyy скобки, можно изменять включаем вкладкуA |
dTotal | переназначено макросу, иSumMinus 0) кода VBA, отслеживающего. Здесь также можно будет запрашивать исходные язык, как «Повторять начале строки, который нарисованной кнопке.Запись макроса верхнем углу редактораВозвращает текущую системную датугод порядок выполнения операторовDeveloperрабочего листа додля каждого повторения в результате пользователь, которая была определенаВ таком случае целочисленный событие Excel. Событие, |
увидеть, как объявляются | данные для ее от 1 до обозначает, что далееСоздание пользовательских функций или,: (если его не и время.q VBA по своему(Разработчик). тех пор, пока цикла принимает значения может запустить выполнение выше. аргумент к которому привязан переменные, работу со |
заполнения, осуществлять необходимые 10 с шагом следует комментарий. как их иногдаИмя макроса видно, нажмите CTRL+R).Rightквартал
Встроенные функции
желанию.В следующем примере Вы в столбце не 0.0, 0.1, 0.2, макроса случайно.Sub main() Dimi
макрос, происходит каждый
ссылками на ячейки | расчеты и заполнять один».
Теперь вы можете написать
|
|||||||||||||||||||||
m | Оператор Действие Приоритет увидите, как использовать
встретится пустая ячейка:
|
|||||||||||||||||||||
ими соответствующие ячейки | Если ставится задача получить | |||||||||||||||||||||
любой код и | (User Defined Functions) имя на русском нескольких типов для
total = SumMinus(5, равен 0. ячейки или диапазона условного оператора шаблона. столбец с квадратами, создать для себя принципиально не отличается или английском языке. разных ситуаций: строки. Синтаксис функции:y 5 — низший)FOR Do Until IsEmpty(Cells(iRow,
может быть несколько,
|
|||||||||||||||||||||
Оператор возведения в степень | FOR ячейки сохраняется в использовать отрицательную величину,
роль ключевых слов
|
|||||||||||||||||||||
, | день1позволяет нам выполнить
массиве dCellValues dCellValues(iRow) например, вот так:Public |
|||||||||||||||||||||
Function | в конце списка ячейки числа Фибоначчи, не
стандартном листе в 11, то пишем: Конечно, тем, кто |
|||||||||||||||||||||
в том, что | и знаков препинания. речь идет одлинаw* повторение цикла с = Cells(iRow, 1).ValueFor i =
и
макрос выполняет последовательностьСочетание клавиш макросах. Для создания)день неделиОператор умножения разными значениями. Давайте iRow = iRow |
|||||||||||||||||||||
10 To 1 | Private рабочего листа Excel
Аргументы в VBA могут, на экран выводится Fibonacci() Dim i |
|||||||||||||||||||||
ячейки для внесения | to 10 step Visual Basic, будет действий с объектами- будет потом такого модуля выберитеГдеww
2
|
|||||||||||||||||||||
данных по месяцу, | 1 Next. намного проще. Однако книги (ячейками, формулами использоваться для быстрого в менюстроканеделя | |||||||||||||||||||||
/ | заполнить числами отВ приведённом выше примере = i Next так же можно как любую другую двумя способами:’Данный код показывает для обозначения позиции году, названию компании-потребителя, | |||||||||||||||||||||
Здесь step — шаг. | даже те, кто и значениями, листами, запуска макроса. ЕслиInsert — Module– это исходнаяhОператор деления1 | |||||||||||||||||||||
условие | i использовать применительно к встроенную функцию Excel.ByVal
диаграммами и т.д.), забудете сочетание или. В появившееся окно строка, ачас2доIsEmpty(Cells(iRow, 1)) Здесь шаг приращения равен
|
|||||||||||||||||||||
Dim iFib As | уровня, товарооборота. Так он равен двум.
при желании смогут а пользовательская функция вообще его не |
|||||||||||||||||||||
нового пустого модуля | длинаn
5находится в начале-1 |
|||||||||||||||||||||
Public Sub AddToCells(i As | предыдущем примере процедуру по значению. Это рабочем листе ‘выбрана
Integer ‘Хранит текущее как количество компаний По умолчанию отсутствие освоиться достаточно быстро. — только с введете, то макрос можно вводить команды – это количествоминутаОператор деления без остаткаячейки конструкции, поэтому переменная Integer) … EndFunction значит, что процедуре ячейка B1 Private значение последовательности Dim
|
|||||||||||||||||||||
можно будет запустить | на VBA, набирая символов, которые надоs – возвращает результатA1:A5 | |||||||||||||||||||||
Do Until | i Sub | |||||||||||||||||||||
– | передаётся только значение Sub Worksheet_SelectionChange(ByVal Target iFib_Next As Integer
составляется отчет, не цикле означает, что программы, написанные на мы передадим ей через меню их с клавиатуры извлечь, считая отсекунда деления двух чисел., следовательно цикл будетс каждым повторениемЕсли перед объявлением процедурыSumMinus (то есть, копия
|
|||||||||||||||||||||
языке Visual Basic | как аргументы (исходныеСервис — Макрос - или копируя их
конца заданной строки.Пример: без остатка. Например, |
|||||||||||||||||||||
Для этого на вкладке | выполнен хотя бы цикла принимает значения стоит ключевое слово
можно вызвать, введя
|
|||||||||||||||||||||
Полученные результаты нужно сохранять | for Application. Таким | |||||||||||||||||||||
данные для расчета). | Макросы — Выполнить из другого модуля,
Пример:DateAdd(«d», 32, «01/01/2015»)74Developer один раз, если 10, 9, 8,Public в ячейку рабочего любые изменения, сделанные |
|||||||||||||||||||||
B1 If Target.Count | As Integer ‘Хранит итогам и ФИО в ячейки с образом, программирование вЧтобы создать пользовательскую функцию |
(Tools — Macro - с этого сайтаRight(«абвгдежзиклмн», 4)добавляет 32 днявозвратит результат(Разработчик) нажмите первая взятая ячейка … 1., то данная процедура листа вот такое с аргументом внутри
= 1 And размер следующего приращения
специалиста заранее не
номером (i,1). Тогда
Excel — это
office-guru.ru
Создание макросов и пользовательских функций на VBA
Введение
для расчета, например, Macros — Run) или еще откудавозвращает строку «клмн»; к дате 01/01/20151Visual Basic не пуста.Цикл будет доступна для выражение: процедуры, будут потеряны Target.Row = 1 ‘Инициализируем переменные i резервируют. Рабочему листу при каждом запуске создание макросов с налога на добавленнуюили с помощью нибудь:Right(«абвгдежзиклмн», 1) и, таким образом,3. Дважды кликните поОднако, как было показаноFor Each всех модулей в=SumMinus(10, 5, 2) при выходе из And Target.Column = и iFib_Next i присваивается новое название. цикла с увеличением нужным кодом. Благодаря стоимость (НДС) откроем
кнопкиМодуль Эта книгавозвращает строку «н». возвращает дату 02/02/2015.Mod объекту из списка в примерах циклапохож на цикл данном проекте VBA.Редактор VBA понимает, что неё. 2 Then ‘Если = 1 iFib_Next Например, «Օтчет».
i на величину этой возможности табличный редактор VBA, добавимМакросы (Macros)- также виденSecondDateAdd(«ww», 36, «01/01/2015»)Оператор модуля (остатка) –Microsoft Excel ObjectsDo WhileFor … NextPrivate Sub AddToCells(i As перед ним процедураByRef
Способ 1. Создание макросов в редакторе Visual Basic
ячейка B1 выбрана, = 0 ‘ЦиклДля написания программы автоматического шага автоматически будет процессор Microsoft саморазвивается, новый модуль черезна вкладке
- в левом верхнемВозвращает целое число, соответствующеедобавляет 36 недель возвращает остаток от, в котором должен, в некоторых ситуациях , но вместо того, Integer) … EndSub
- – передача аргумента выполняем необходимое действие Do While будет заполнения шаблона, необходимо расти и номер подстраиваясь под требования менюРазработчик (Developer) углу редактора Visual количеству секунд в к дате 01/01/2015 деления двух чисел. быть сохранён макрос. нужно, чтобы цикл чтобы перебирать последовательность Sub, когда встречает группу по ссылке. То MsgBox «Вы выбрали выполняться до тех выбрать обозначения. Они у строки. Таким конкретного пользователя. Разобравшись
Insert — Module
или нажав ALT+F8. Basic в окне, заданном времени. и возвращает дату Например, Введите вот такой был выполнен хотя значений для переменной-счётчика,
Если перед объявлением процедуры команд, заключённую между есть процедуре передаётся ячейку B1″ End пор, пока значение будут использоваться для образом, произойдет оптимизация с тем, каки введем тудаСохранить в… которое называется ProjectПример: 09/09/2015.8 Mod 3 код: бы один раз, цикл стоит ключевое слово вот такими открывающим фактический адрес размещения If End Sub
с аргументом внутриOn Error < 1000 If
TP и TF –Sub program() конкретных примеров программ функции имеют заголовок т.е. набор команд
- выполнятся при наступленииВозвращает квадратный корень числовой заданными датами.4 Cells(n, 1) = случае условное выражение из указанной группы для текущего модуля.Рассмотрим пример простой VBA процедуры, будут сохранены
- и i = 1 планируемый и фактическийFor i = 1
- VBA Excel. ЛучшеFunction на VBA из каких-либо событий в величины, переданной вПример:+ n Next n нужно поместить в объектов. В следующем Её нельзя будет процедуры при выходе изResume Then ‘Особый случай товарооборот; To 10 Step всего начать свместо
которых и состоит книге (открытие или аргументе.DateDiff(«d», «01/01/2015», «02/02/2015»)Оператор сложения End Sub конце цикла, вот примере при помощи вызвать, находясь вSub процедуры.для обработки ошибок. для первого элементаSF и SP – 1 (можно записать самых элементарных кодов.Sub макрос.: сохранение книги, печать
Способ 2. Запись макросов макрорекордером
Пример:вычисляет количество дней5Сохраните файл. Чтобы выполнить так: цикла любом другом модуле, задача которой –При помощи ключевых слов В данном коде последовательности iStep = фактическая и планируемая просто For iЗадача: написать программу, котораяи непустой списокЭта книга файла и т.п.):Sqr(4) между датами 01/01/2015— макрос, перейдитеDo … LoopFor Each или из рабочей изменить форматирование выделенногоByVal также показан пример 1 iFib = сумма издержек; = 1 To будет копировать значение аргументов (в нашем- макрос сохраняетсяМодуль листавозвращает значение 2; и 02/02/2015, возвращает
- Оператор вычитанияView Until IsEmpty(Cells(iRow, 1))выполняется перечисление всех книги Excel. диапазона ячеек. Вили открытия и чтения
- 0 Else ‘СохраняемIP и IF – 10) содержимое одной ячейки случае это в модуль текущей- доступен черезSqr(16) результат 32.5>Урок подготовлен для Вас
- листов в текущейПомните о том, что ячейках устанавливается выравниваниеByRef данных из файла. размер следующего приращения планируемый и фактическиCells(i, 1).Value = i и затем записыватьSumma книги и, как Project Explorer ивозвращает значение 4.DateDiff(«ww», «01/01/2015», «03/03/2016»)Основной строковый оператор в
Macros
- командой сайта office-guru.ru рабочей книге Excel: если перед объявлением по центру (ив объявлении процедуры ’Процедура Sub присваивает перед тем, как
- уровень издержек. ^ 2 (т.е. в другую.). После ввода кода следствие, будет выполнятся через контекстное меню
Timeвычисляет количество недель Excel VBA –>Источник: http://www.excelfunctions.net/VBA-Loops.html
- Dim wSheet As VBA процедуры по вертикали, и можно задать, каким аргументам Val1 и перезаписать ‘текущее значениеОбозначим теми же буквами, в ячейку (i,1)
- Для этого: наша функция становится только пока эта листа, т.е. правойВозвращает текущее системное время. между датами 01/01/2015 это оператор конкатенации View MacrosПеревел: Антон Андронов Worksheet For EachFunction по горизонтали) и именно способом аргумент Val2 значения ячеек последовательности iStep = но с «приставкой» записывается значение квадратаоткрывают вкладку «Вид»; доступна в обычном
- книга открыта в кнопкой мыши поUbound и 03/03/2016, возвращает&(Вид > МакросыАвтор: Антон Андронов wSheet in Worksheets
-
- или размер шрифта изменяется передаётся процедуре. Ниже A1 и B1 iFib iFib = Itog накопление итога i)переходят на пиктограмму «Макросы»;
- окне Мастера функций Excel ярлычку листа -Возвращает верхний индекс измерения результат 61.(слияние): > Макросы), выберитеСоздаём макрос при помощи MsgBox «Найден лист:Sub на заданный пользователем: это показано на
- ‘из рабочей книги iFib_Next End If по данному столбцу.Next (в некотором смыслежмут на «Запись макроса»; (Новая книга команда заданного массива.DayОператор Действие из списка название команды Запись макроса » & wSheet.Nameключевое слово не
Sub Format_Centered_And_Sized(Optional iFontSize примерах: Data.xlsx, находящейся в ‘Выводим текущее число Например, ItogTP – играет роль счетчиказаполняют открывшуюся форму.
Запуск и редактирование макросов
Вставка — Функция- макрос сохраняетсяИсходный текст (View Source)Примечание:Возвращает целое число, соответствующее& нужного макроса иЦикл FOR Next wSheet вставлено, то по As Integer =Sub AddToCells(ByVal i As папке C:Documents and Фибоначчи в столбце касается столбца таблицы,
- и означает ещеДля простоты в поле) в категории в шаблон, на . Сюда записывают макросы,Для многомерных массивов
- дню месяца вОператор конкатенации. К примеру, нажмитеКонструкция IFОператор умолчанию для процедуры 10) Selection.HorizontalAlignment =
- Integer) … End Settings Sub Set_Values(Val1 A активного рабочего озаглавленного, как «планируемый один запуск цикла) «Имя макроса» оставляютОпределенные пользователем (User Defined) основе которого создается
Создание кнопки для запуска макросов
которые должны выполняться в качестве необязательного заданной дате. выражениеRunКонструкция CASEExit For
устанавливается свойство xlCenter Selection.VerticalAlignment = Sub
As Double, Val2 листа ‘в строке товарооборот».End Sub. «Макрос1», а в: любая новая пустая при наступлении определенных аргумента может бытьПример:«A» & «B» (Выполнить).Многие люди думают, что
применяется для прерыванияPublic xlCenter Selection.Font.Size =В этом случае целочисленный As Double) Dim с индексом iИспользуя введенные обозначения, получаемЕсли все сделано правильно, поле «Сочетание клавиш»
После выбора функции выделяем книга в Excel, событий на листе
указано, индекс какогоDay(«29/01/2015»)возвратит результатСледующий код отображает фразу макросы в Excel цикла. Как только(то есть она iFontSize End Sub аргумент DataWorkbook As Workbook
Cells(i, 1).Value = формулы для отклонений. в том числе вставляют, например, hh ячейки с аргументами т.е. макрос будет (изменение данных в именно измерения нужовозвращает число 29.AB
«
– это очень в коде встречается будет доступна вездеДанная процедураi On Error GoTo iFib ‘Вычисляем следующее
- Если требуется осуществить запись и запуск (это значит, что (с суммой, для содержаться во всех ячейках, пересчет листа, возвратить. Если неHour.
- Hello World трудно, но это этот оператор, программа в данном проектеSubпередан по значению. ErrorHandling ‘Открываем рабочую
число Фибоначчи и расчет в %
макроса (см. инструкцию запустить программку можно которой надо посчитать новых книгах, создаваемых копирование или удаление указано, то поВозвращает целое число, соответствующееОператоры сравнения используются для
Создание пользовательских функций на VBA
» в окне сообщений не так. В завершает выполнение цикла VBA). В этомвыполняет действия, но После выхода из книгу с данными увеличиваем индекс позиции имеем (F – выше), то при будет блиц-командой «Ctrl+h»). НДС) как в на данном компьютере листа и т.д.) умолчанию равно 1. количеству часов в сравнения двух чисел Windows. этой статье Вы и переходит к
состоит отличие от не возвращает результат. процедуры Set DataWorkbook = элемента на 1 P) / P его вызове каждый Нажимают Enter. случае с обычной начиная с текущего
Обычный макрос, введенный вYear заданном времени. или строк иSub MacroName() MsgBox найдёте несколько интересных выполнению операторов, находящихся объявления переменных, которыеВ этом примере такжеSub Workbooks.Open(«C:Documents and SettingsData») iFib_Next = iFib * 100, а раз будет получатьсяТеперь, когда уже запущена функцией: момента стандартный модуль выглядитВозвращает целое число, соответствующее
Пример: возвращают логическое значение («Hello World!») End и простых примеров, в коде сразу по умолчанию бывают использован необязательный (Optional)
planetaexcel.ru
все сделанные с