При помощи датчика случайных чисел получить прямоугольную матрицу A, имеющую три столбца и N строк (N – целое случайное число в диапазоне от 9 до 20). Первые два столбца заполнить натуральными случайными числами в диапазоне от 30 до 400. В третий столбец записать наибольший общий делитель двух чисел, стоящих в первом и втором столбцах. Полученную матрицу вывести в окно отладки.
Sub массив()
Sheets("Лист1").Select
Sheets("Лист1").Range("a1:Q100").Clear
Dim a() As Byte, i As Byte, j As Byte, n As Byte, m As Byte
n = InputBox("Введите количество строк"): m = InputBox("Введите количество столбцов")
ReDim a(n, m)
Randomize Timer
For i = 1 To n
For j = 1 To m
a(i, j) = Rnd * 9 + 6
Next j: Next i
For i = 1 To n
For j = 1 To m
Cells(i + 1, j + 1) = a(i, j)
If a(i, j) Mod 5 = 0 Then Cells(i + 1, j + 1).Interior.ColorIndex = 33
Next j: Next i
End Sub
В каких строках допущены ошибки??
Модератор: Naeel Maqsudov
Ваш код малость от другой задачи. У меня получилось так:
Код: Выделить всё
Sub массив()
Dim A() As Integer, i As Byte, j As Byte, m As Byte
Randomize Timer
m = Rnd * 12 + 9
ReDim A(3, m)
For j = 1 To m
For i = 1 To 2
A(i, j) = Rnd * 371 + 30
Next i
A(3, j) = NOD(A(1, j), A(2, j))
Debug.Print A(1, j), A(2, j), A(3, j)
Next j
Sheets("Лист1").Range("A1:C1").Clear
End Sub
Function NOD(x As Integer, y As Integer) As Integer
Sheets("Лист1").Range("A1") = x
Sheets("Лист1").Range("B1") = y
Sheets("Лист1").Range("C1").FormulaR1C1 = "=НОД(RC[-2],RC[-1])"
NOD = Sheets("Лист1").Range("C1").Value
End Function
Или проще:
в первом случае подключен "пакет анализа".
во втором "ANALYSIS TOOLPAK - VBA" и в Tools->References установите флажок на atpvbaen.xls
Код: Выделить всё
Sub Массив()
Dim A() As Integer, j As Byte, m As Byte
Randomize Timer
m = Rnd * 12 + 9
ReDim A(3, m)
For j = 1 To m
A(1, j) = Rnd * 371 + 30
A(2, j) = Rnd * 371 + 30
A(3, j) = gcd(A(1, j), A(2, j))
Next j
For j = 1 To m
Debug.Print A(1, j), A(2, j), A(3, j)
Next j
End Sub
во втором "ANALYSIS TOOLPAK - VBA" и в Tools->References установите флажок на atpvbaen.xls