'операторы
Loop
6. Range - объект для работы с данными в ячейках рабочего листа.
Cells - объект доступа к диапазону ячеек по индексам.
Пример 1 (одномерный массив): заполнить массив случайными вещественными числами, вычислить их сумму, вывести сумму и массив.
Операторы программы | Комментарий |
Option Explicit | |
Public Sub ExecArray() | Начало процедуры |
Const n = 10 | Задание константы |
Dim sngArray(1 To n) As Single | Задание одномерного массива |
Dim i As Integer | Задание счетчика шагов |
Dim mes As String | Задание переменной mes |
Randomize | Активизация генератора случайных чисел |
mes = "V[" | Начальное значение для строки элементов массива |
For i = 1 To n | Начало цикла |
sngArray(i) = Rnd | Получение случайного вещественного числа |
mes = mes & "" & Format(sngArray(i), "###0.00") | Вывод переменной mes с округлением |
Next i | Следующее значение i |
mes = mes + "]" | Конечное значение для строки элементов массива |
Dim s As Single | Задание переменной s |
s = 0 | Начальное значение суммы |
For i = 1 To n | Начало цикла |
s = s + sngArray(i) | Вычисление суммы |
Next i | Следующее значение i |
MsgBox "S=" & s & Chr(10) & Chr(13) & mes, vbInformation, "“ | Вывод результатов в диалог (Chr – управляющие коды для перехода на новую строку) |
End Sub | Окончание процедуры |
Задание:
|
|
1. Изменить имя процедуры на «Massiv».
2. Изменить имя массива на L.
3. Убрать начальное и конечное значение переменной mes.
4. Убрать округление переменной mes.
5. Убрать пиктограмму с «!».
Пример 2 (одномерный массив): создать макрос для ввода с клавиатуры последовательности чисел, выполнить их суммирование до контрольного значения, которое вводится с клавиатуры.
Код макроса | Комментарий |
Option Explicit | |
Public Sub getNumbers() | Начало процедуры |
Dim strN As String, strX As String | Задание переменных |
Dim n As Single, s As Single, x As Single | |
strN = InputBox(“Вв. Предельное число N") | Диалог для ввода предельного числа |
If Not IsNumeric(strN) Then Exit Sub | Если введено не число - выход из программы |
n = CSng(strN) | Преобразование n в число с плавающей запятой |
s = 0 | Начальное значение суммы |
Do While s < n | Начало цикла по логическому условию |
strX = InputBox(“Введите число") | Диалог для ввода числа |
If Not IsNumeric(strX) Then Exit Do | Если введено не число - выход из программы |
x = CSng(strX) | Преобразование x в число с плавающей запятой |
s = s + x | Вычисление суммы |
Loop | Конец |
MsgBox “Получено=" & s & "N=" & n | Вывод результатов в диалог |
End Sub | Окончание процедуры |
Задание:
1. Заполнить два массива случайными числами, вычислить их сумму.
2. Заполнить два массива случайными числами, создать третий массив, элементы которого являются суммами двух предыдущих.
Пример 3 (операции с матрицами): Заполнить квадратные матрицы А и В размера n x n случайными вещественными числами. Получить новую матрицу С по формуле: С(i,j)=A(i,j)+B(i,j).
|
|
Рабочий лист после обработки данных:
1. Создать 3 командные кнопки, изменить имя и заголовок.
2. Ввести операторы программы в окне VBA
Операторы программы | Комментарий |
Const n = 5 | Задание константы |
Dim A(1 To n, 1 To n) As Single | Задание переменных с плавающей запятой |
Dim B(1 To n, 1 To n) As Single | |
Dim cRow As Integer, cCol As Integer | Задание целочисленных переменных |
Кнопка «Ввод» | |
Private Sub cmdInput_Click() | Начало процедуры |
Range("A12:E16").ClearContents | Очистка области вывода нового массива |
cmdExec.Enabled = True | Открыть доступ к кнопке «Вычислить» |
‘Получение исходных матриц | |
Randomize | Активизация генератора случайных чисел |
For i = 1 To n | Начало цикла |
For j = 1 To n | |
A(i, j) = Rnd | Заполнение ячеек случайными числами |
B(i, j) = Rnd | |
Next j | Конец цикла |
Next i | |
‘Вывод исходных матриц на рабочий лист | |
Dim dCol As Integer | |
dCol = 7 | Увеличение № столбца |
cRow = 4 | № первой строки |
For i = 1 To n | |
cCol = 1 | |
For j = 1 To n | |
Cells(cRow, cCol).Value = A(i, j) | |
Cells(cRow, cCol + dCol).Value = B(i, j) | |
cCol = cCol + 1 | |
Next j | |
cRow = cRow + 1 | |
Next i | |
Range("A4:E8").NumberFormat = "0.000" | Форматирование выходных исходных данных |
Range("H4:L8").NumberFormat = "0.000" | |
End Sub | |
Кнопка «Вычислить» | |
Private Sub cmdExec_Click() | |
Dim C(1 To n, 1 To n) As Single | Новая матрица |
For i = 1 To n | |
For j = 1 To n | |
C(i, j) = A(i, j) + B(i, j) | Вычисление элементов матрицы |
Next j | |
Next i | |
cRow = 12 | Первая строка матрицы С |
‘Вывод полученной матрицы | |
For i = 1 To n | |
cCol = 1 | |
For j = 1 To n | |
Cells(cRow, cCol).Value = C(i, j) | |
cCol = cCol + 1 | |
Next j | |
cRow = cRow + 1 | |
Next i | |
Range("A12:E16").NumberFormat = "0.000" | Форматирование чисел вычисленной матрицы |
cmdExec.Enabled = False | Закрыть доступ к кнопке «Вычислить» |
End Sub | |
Кнопка «Сброс» | |
Private Sub cmdClear_Click() | |
‘Очистка областей вывода | |
Range("A12:E16").ClearContents | |
Range("A4:E8").ClearContents | |
Range("H4:L8").ClearContents | |
End Sub | Окончание процедуры |