Основы работы в 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

 

Результат выполнения программы: