Автор Тема: VBA: Массив из n случайных чисел, сумма чётных элементов массива.  (Прочитано 360 раз)

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

  • Administrator
  • Сообщений: 1519
Макрос работает с экселем, с активным листом (это лист, который отображается на мониторе).

Задание. Напишите программу, которая создаёт массив из n случайных чисел (n задаёт пользователь) в диапазоне от -100 до 100, после чего вычисляет сумму чётных элементов массива, абсолютное значение которых превышает 25.

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

    ' Создание в оперативной памяти компьютера поименованной области - массива "arr".
        ' Массив можно мысленно представить как таблицу, состоящую из строк и столбцов.
        ' В нашем случае будет использоваться одномерный массив, его можно сравнить
        ' с таблицей, состоящей из одной строки.
    ' Long означает, что в массиве могут находиться только числа, причём только целые числа
        ' (есть ещё дробные числа).
    Dim arr() As Long
    ' Создание в оперативной памяти компьютера поименованной области - переменной "n".
        ' Переменную можно сравнить с файлом, но файл находится на жёстком диске компьютера,
        ' а переменная - в оперативной памяти.
    Dim n As Long
    ' Double - означает, что в переменной могут быть только числа. При этом числа могут
        ' быть как целые, так и дробные. Используется Double, а не Long, т.к.
        ' в переменную с Double можно записать более большие числа.
    Dim sum As Double
    ' String означает, что в переменной данные будут в виде текста.
    Dim strInputbox As String, i As Long
   
   
    '1. Юзер записывает в переменную "strInputbox" число с помощью InputBox.
    strInputbox = InputBox("Задайте количество случайных чисел:")
    ' Если юзер щёлкнет "Cancel", то в переменной "strInputbox" будет пустая строка.
    ' If ... Then ... End If - используется для выбора действия.
    If strInputbox = "" Then
        ' Выход из процедуры "Макрос" и таким образом завершение работы макросы.
        Exit Sub
    End If
   
    '2. Копирование числа из переменной "strInputbox" в переменную "n", чтобы
        ' работать с числом в виде числа, а не в виде текста. Так логичнее.
    n = strInputbox
   
    '3. Создание в массиве "arr" ячеек.
    ' 1 To используется, чтобы порядковый номер первой ячейки был 1.
        ' По умолчанию используется 0, что может быть неудобно непрограммисту.
    ReDim arr(1 To n)
   
    '4. Запись в массив случайных чисел.
    ' For ... To ... Next - это цикл. Цикл используется, чтобы запускать одну
        ' и ту же команду несколько раз.
    For i = 1 To n
        ' Случайные числа генерируются по формуле, которая есть в официальной справке по функции "Rnd".
        arr(i) = Int((100 - (-100) + 1) * Rnd + (-100))
    Next i
   
    '5. Вычисление суммы.
    ' UBound(arr) - это порядковый номер последней ячейки массива "arr".
    ' Step 2 позволяет двигаться по ячейкам через одну, что позволяет
        ' двигаться по чётным ячейкам.
    For i = 2 To UBound(arr) Step 2
        ' Если число в абсолютном виде (то есть без учёта знака "+", "-") больше 25.
        If Abs(arr(i)) > 25 Then
            ' Суммирование. В переменную "sum" записывается сумма чисел из самой переменной "sum" и
                ' из ячейки массива "arr".
            sum = sum + arr(i)
        End If
    Next i
   
    '6. Запись информации в эксель, на активный лист (это лист, который отображается на мониторе),
        ' чтобы мы могли проверить работу макроса.
    ' Очистка листа от старых данных.
    ActiveSheet.usedrange.Clear
    ' Запись случайных чисел.
    For i = 1 To UBound(arr)
        Cells(i, "A").Value = arr(i)
    Next i
    ' Запись суммы.
    Range("B1").Value = sum
   
End Sub