Основы работы в VBA. Массивы
5. Примеры решения задач c одномерными мссивами
Пример 1. Ввести массив А из 10 элементов. Найти сумму и произведение элементов массива.
В этом примере используется характерный прием программирования – метод накопления: к переменной S последовательно прибавляются отдельные элементы массива; в результате при выходе из цикла переменная S будет содержать сумму всех перебранных элементов. Аналогично можно найти произведение всех элементов (в этом случае начальное значение P должно равняться не нулю, а единице (P = 1).
Sub primer_1()
Dim a(10) As Single
Dim s As Single
Dim p As Double
Dim i As Integer
For i = 1 To 10
a(i) = Cells(1, i)
Next i
s = 0: p = 1
For i = 1 To 10
s = s + a(i) 'вычисление суммы
p = p * a(i) 'вычисление произведения
Next i
Cells(3, 1) = "Сумма элементов массива = " & s
'вывод суммы в 3 строку 1 столбец активного листа Excel
Cells(4, 1) = "Произведение элементов массива = " & p
'вывод произведения в 4 строку 1 столбец
'активного листа Excel
End Sub
Результат выполнения программы:
Пример 2. Ввести массив А из 10 элементов. Найти максимальный элемент массива и его положение. Если таких элементов несколько, то вывести положение всех.
В этом примере переменная max используется для запоминания текущего максимального элемента с обновлением – в случае необходи-мости – по мере перебора всех элементов, imax – для фиксации положения максимального элемента.
Sub primer_2()
Dim a(10) As Single
Dim i As Byte, max As Single, imax As String
'заполнение массива числами
For i = 1 To 10
a(i) = Cells(1, i)
Next i
'инициализация переменных max, imax
max = a(1): imax = "1"
'поиск максимального элемента и его местоположения
For i = 2 To 10
If a(i) > max Then
max = a(i)
imax = i
ElseIf a(i) = max Then
imax = imax & ", " & i
End If
Next i
'Команда MsgBox... записывается в редакторе VB в одну строку
MsgBox "Максимальный элемент = " & max & ", его местоположение (ия) " & imax, , "Решение задачи"
End Sub
Результат выполнения программы:
Программа для решения этой же задачи, но для любого количества элементов в массиве выглядит так:
Sub primer_2_1()
Randomize Timer
Dim a() As Single
Dim i As Byte, n As Byte, max As Single
Dim imax As String, massiv As String
massiv = " "
n = InputBox("Введите размер массива", "Запрос программы")
ReDim a(n)
'заполнение массива случайными числами
For i = 1 To n
a(i) = 50 - Int(Rnd() * 1000)/10
massiv = massiv & a(i) & Chr(9)
Next i
'инициализация переменных max, imax
max = a(1): imax = "1"
'поиск максимального элемента и его местоположения
For i = 2 To n
If a(i) > max Then
max = a(i)
imax = i
ElseIf a(i) = max Then
imax = imax & ", " & i
End If
Next i
'Команда MsgBox... записывается в редакторе VB в одну строку
MsgBox "Исходный массив:" & Chr(13) & massiv & Chr(13) & "Максимальный элемент = " & max & ", его местоположение (ия) " & imax, , "Решение задачи"
End Sub
Результат выполнения программы: