Автор Тема: VBA Макросы: Вычисление суммы всех нечетных по значению больше трех и меньше 50 чисел в заданном массиве.  (Прочитано 61 раз)

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

  • Administrator
  • Сообщений: 1561
Задача

Создать макрос, вычисляющий сумму всех нечетных по значению больше трех и меньше 50 чисел в заданном массиве и выводящий результат вычисления.


Решение

Макрос
Sub Макрос()

    ' Создание в оперативной памяти компьютера массива 'arr'.
        ' Массив можно мысленно представить как обычную таблицу, состоящую из строк и столбцов.
        ' Variant означает, что в массиве могут быть данные любого вида: текст, числа, даты, булевы, объекты.
    Dim arr() As Variant
    ' Создание в оперативной памяти компьютера переменной 'sum'.
        ' Переменная - это область в оперативной памяти компьютера.
        ' Переменная нужна, чтобы в неё что-нибудь записывать.
        ' Переменную можно сравнить с обычным файлом, но файл находится на жёстком диске,
        ' а переменная в оперативной памяти компьютера.
        ' Double означает, что в переменной могут быть целые и дробные числа.
    Dim sum As Double
    ' Создание в оперативной памяти компьютера переменной 'i'
        ' Long означает, что в переменной могут быть только целые числа.
    Dim i As Long, j As Long
   

    '1. Копирование данных из активного эксель-листа в vba-массив.
        ' С vba-массивом макрос быстрее работает, если много данных.
        ' И может быть удобнее читать и писать код.
        ' CurrentRegion - это фрагмент эксель-листа до первой пустой строки и до первого пустого столбца.
    arr() = Range("A1").CurrentRegion.Value
   
    '2. Вычисление суммы всех нечетных по значению больше трех и меньше 50 чисел в заданном массиве.
    ' Движение по ячейкам массива.
    ' Цикл с переменной 'i' - это движение по строкам массива, сверху вниз.
    For i = 1 To UBound(arr, 1)
        ' Цикл с переменной 'j' - это движение по столбцам массива слева направо.
        For j = 1 To UBound(arr, 2)
            ' Если число нечётное. Если число делится на 2 с остатком, значит число нечётное.
                ' Инструмент 'Mod' делит число на указанное число и выдаёт остаток от деления.
            If arr(i, j) Mod 2 <> 0 Then
                ' Если число больше трёх.
                If arr(i, j) > 3 Then
                    ' Если число меньше 50.
                    If arr(i, j) < 50 Then
                        ' Добавление в переменную 'sum' числа.
                            ' Сначала макрос складывает число из переменной 'sum' с числом из ячейки массива,
                            ' а затем записывает рассчитанное число в переменную 'sum'.
                        sum = sum + arr(i, j)
                    End If
                End If
            End If
        Next j
    Next i
   
    '3. Вывод результата на монитор.
    MsgBox "Сумма: " & sum, vbInformation
   
End Sub