Автор Тема: VBA: Произведение элементов массива, замена чётных элементов на произведение.  (Прочитано 1771 раз)

Онлайн Администратор

  • Administrator
  • Сообщений: 1547
Задание
  • Ввести массив a(n);
  • найти произведение элементов массива;
  • чётные элементы массива заменить на произведение.
Решение

Пример работает с программой "Excel".
Перед запуском макроса отобразите на мониторе ненужный эксель-лист, чтобы не испортить какие-нибудь свои данные, т.к. макрос вставляет результат на активный лист, в столбец B.

Макрос:
Sub Main()
   
    ' Создание в оперативной памяти компьютера области - массива "a".
        ' Массив можно мысленно представить как обычную таблицу, состоящую из строк и столбцов.
        ' В данной задаче массив представляет собой таблицу, состоящую из одной строки и одного
        ' или нескольких столбцов.
        ' Массивы нужны, чтобы в них что-нибудь записывать.
        ' Double означает, что в массиве могут быть только числа (и целые, и дробные).
    Dim a() As Double
    ' Создание в оперативной памяти компьютера области - переменной "n".
        ' Переменную можно сравнить с обычным файлом, но переменная находится
        ' в оперативной памяти компьютера, а файл - на жёстком диске компьютера.
        ' Переменные нужны, чтобы в них что-нибудь записывать.
        ' Long означает, что в переменной могут быть только целые числа (бывают ещё дробные числа).
    Dim n As Long
    Dim dblProd As Double, i As Long
   
   
    '1. Запись в переменную "n", сколько элементов (другими словами - ячеек) должно быть в массиве "a".
        ' InputBox отображет диалоговое окно, куда можно вводить данные.
    n = VBA.InputBox("Укажите, сколько должно быть элементов в массиве a:")
   
    '2. Создание элементов в массиве "a".
    ' "1 To" означает, что порядковый номер первого элемента будет 1.
        ' Если это не указывать, то по умолчанию будет 0, что неудобно.
    ReDim a(1 To n)
   
    '3. Задание 1: ввести массив a(n).
    ' Запись в массив чисел из активного эксель-листа, из столбца A.
    ' For ... To ... Step ... Next - называется "цикл". Цикл используется
        ' чтобы делать одну команду несколько раз.
    For i = 1 To n Step 1
        a(i) = Cells(i, "A").Value
    Next i
   
    '4. Задание 2: найти произведение элементов массива.
    ' UBound(a) - это порядковый номер последнего элемента массива.
        ' То есть можно сказать, что это кол-во элементов в массиве.
    ' Запись в переменную "dblProd" числа 1, чтобы в первом витке цикла не было нуля.
        ' В переменной "dblProd" по умолчанию будет ноль, поэтому при умножении на ноль будет ноль
        ' и во всех остальных витках цикла так и будет ноль.
    dblProd = 1
    For i = 1 To UBound(a) Step 1
        dblProd = dblProd * a(i)
    Next i
   
    '5. Задание 3: чётные элементы массива заменить на произведение.
    ' Step 2 позволяет двигаться по элементам массива через 1.
        ' Таким образом цикл будет только по чётным элементам.
    For i = 2 To UBound(a) Step 2
        a(i) = dblProd
    Next i
   
    '6. Вывод результата в эксель, в столбец B.
    ' Очистка столбца B от старых данных.
    Columns("B").Value = ""
    ' Запись результата.
    For i = 1 To UBound(a) Step 1
        Cells(i, "B").Value = a(i)
    Next i
   
End Sub