Переменные и константы
Переменные
Под переменнойв программировании понимается поименованная область памяти, в которой хранится некоторое значение, причём это значение может изменяться в ходе выполнения программы. Для объявления переменных используется операторDim.
Dim<имя> [As<тип>]
DimnAsInteger
Dimi,j,kAsInteger'Только переменная k имеет тип Integer!
Dim i As Integer, j As Integer, k As Integer 'Теперь все переменные имеют тип Integer
Необъявленные переменные и переменные, в объявлении которых не указан тип, имеют тип Variant. Однако использование типаVariantявляется не самым лучшим решением, и, кроме того, необъявленные переменные могут приводить к ошибкам. Если вы неверно напишите имя переменной, то компилятор сочтёт это имя как имя новой переменной, и программа будет работать не так, как задумано. Чтобы избежать подобных ошибок, можно потребовать явного объявления всех переменных. Для этого необходимо включить следующую строку в качестве первой инструкции в модуле VBA:
Option Explicit
Константы
Если некоторое значение используется несколько раз, лучше не вставлять его в несколько инструкций, а объявить в виде константы. Такое объявление позволит, во-первых, задать значению символическое имя, что улучшит читабельность программы, а во-вторых, упростит изменение значения – новое значение необходимо будет ввести только один раз.
Const<имя> [As<тип>] = <значение>
Const count As Integer = 255
Const tax = 0.13, expDate = #12/31/2012#
Массивы
Массив– это переменная, состоящая из нескольких элементов одного типа, для доступа к которым используется один или несколько индексов.
Dim<имя> (<начальный индекс>To<конечный индекс>)As<тип>
Dim a (1 To 100) As Integer
Dim b (1 To 10, 1 To 10) As Double
a(3) = 7
b(5, 2) = -3.568
Динамические массивы– это массивы, которые не имеют предопределённого количества элементов. Для объявления такого массива используются пустые круглые скобки. Однако, прежде чем использовать такой массив, необходимо задать его размер с помощью оператораReDim. В отличие от обычного объявления, в котором можно использовать только константы, в оператореReDimможно использовать переменных для указания границ индексов.
Dim a() As Integer
...
ReDim a(1 To n)
Объектные переменные
Объектная переменная– это переменная, представляющая собой объект VBA, например, диапазон или рабочий лист. Объектные переменные важны по следующим причинам:
они упрощают программу;
они ускоряют выполнение программы.
Объектные переменные объявляются так же, как и обычные, – с помощью оператора Dim. Для присваивания объекта переменной необходимо использовать операторSet.
DimMyCellAsRange
Set MyCell = Worksheets("Лист1").Range("A1")
MyCell.Value = 125
MyCell.Font.Bold = True
MyCell.Font.Italic = True
MyCell.Font.Size = 14
MyCell.Font.Name = Cambria
Управляющие конструкции
Условный оператор
Условный операторпозволяет осуществлятьвыбордействий, которые надо выполнить, в зависимости от некоторого условия.
If<условие>Then
<инструкции1>
[Else
<инструкции2>]
End If
If k <> 0 Then
s = s / k
End If
If k <> 0 Then s = s/ k
If x > y Then
s = s + x
Else
s = s + y
End If
If<условие1>Then
<инструкции1>
Elseif<условие2>Then
<инструкции2>
...
Elseif<условиеn>Then
<инструкцииn>
Else
<инструкцииn+1>
End If
Dim quantity As Integer, discount As Double
If quantity > 100 Then
discount = 0.25
ElseIf quantity > 75 Then
discount = 0.2
Elseif quantity > 50 Then
discount = 0.1
Else
discount = 0
End If
Циклы
Циклыпозволяютмногократновыполнять некоторую последовательность действий, используя логические выражения для определения момента прекращения выполнения цикла. Наиболее часто используемым являетсяпараметрический цикл. Параметрический цикл имеет следующий синтаксис (по умолчанию шаг равен 1).
For<счётчик> = <начальное значение>To<конечное значение> [Step<шаг>]
<инструкции>
[ExitFor]
<инструкции>
Next<счётчик>
'Сумма квадратов всех чисел от 1 до 100
Dim sum As Double, i As Integer
sum = 0
For i = 1 to 100
sum = sum + sqr(i)
Next i
'Сумма квадратов чисел, кратных 3, от 3 до 100
Dim sum As Double, i As Integer
sum = 0
For i = 3 to 100 Step 3
sum = sum + sqr(i)
Next i
'Удаляем чётные строки с номерами от 2 до 10
Dim r As Long
For r = 10 To 2 Step -2
Rows(r).Delete
Next r
'Сумма квадратов чисел от 1 до 100. Выходим, если сумма превышает пороговое значение
Dim sum As Double, threshold As Double, i As Integer
sum = 0
threshold = 100
For i = 1 To 100
sum = sum + sqr(i)
If sum > threshold
Exit For
End If
Next i
'Сумма значений ячеек диапазона
Dim r as Range
Dim sum As Double
Dim i As Integer, j As Integer
sum = 0
For i = 1 To r.Rows.Count
For j = 1 To r.Columns.Count
sum = sum + r.Cells(i, j)
Next j
Next i
'Количество положительных значений в ячейках диапазона
Dim r as Range
Dim k As Integer
Dim i As Integer, j As Integer
k = 0
For i = 1 To r.Rows.Count
For j = 1 To r.Columns.Count
If r.Cells(i, j) > 0 Then k = k + 1
Nextj
Nexti
В языке VBA можно также использовать ещё четыре разновидности цикла.
Do [{While | Until} <условие>]
<инструкции>
[Exit Do]
<инструкции>
Loop
Do
<инструкции>
[Exit Do]
<инструкции>
Loop [{While | Until} <условие>]