Другие языки программирования и технологии
Помогите с кодом для VBA в Excelе
В матрице Д(7,9) найти номер столбца с максимальным количеством отрицательных элементов и распечатать индексы всех положительных элементов матрицы. Выдает ошибку пишет: Subscript out of range Option Explicit Dim i As Integer Dim m As Integer Dim n As Integer Dim x As Integer Dim y As Integer Dim s As Integer Dim A() As Double Dim j As Integer Dim f As Single Dim r As Single Private Sub CommandButton1_Click() m = Mrow n = Ncol 'MsgBox m 'MsgBox n ReDim A(1 To m, 1 To n) TabA m, n, A() 'MsgBox A(1, 1) For i = 1 To m For j = 1 To n A(i, j) = Cells(i, j) Next j Next i For i = 1 To m For j = 1 To n A(i, j) = Rnd() * 100 - 60 Cells(i + 1, j + 1) = A(i, j) If A(i, j) > 0 Then x = 1 y = 24 Cells(24, 1) = "i" Cells(24, 2) = "j" End If Next j Next i x = 1 For j = 1 To m For i = 1 To n If A(i, j) < 0 Then f = f + 1 End If Next i Next j End Sub Sub TabA(m As Integer, n As Integer, A() As Double) For i = 1 To m For j = 1 To n A(i, j) = Cells(i, j).Value Next j Next i End Sub Function Mrow() As Integer Dim i As Integer i = 1 Do Until IsEmpty(Cells(i, 1)) i = i + 1 Loop Mrow = i - 1 End Function Function Ncol() As Integer Dim j As Integer j = 1 Do Until IsEmpty(Cells(1, j)) j = j + 1 Loop Ncol = j - 1 End Function
Во-первых, следи за переменными!
If A(i, j) > 0 Then
x = 1 - это зачем?
y = 24 - и это тоже зачем?
Cells(24, 1) = "i"
Cells(24, 2) = "j"
End If
Дальше
x = 1 - объявил счетчиком х
For j = 1 To m
For i = 1 To n
If A(i, j) < 0 Then
f = f + 1 - а считаешь в f
End If
Next i
Next j
И научись If записывать в 1 строку:
If A(i, j) < 0 Then f = f + 1
Дальше. Сначала запускаешь функцию TabA, а потом повторяешь ее же в основной программе.
TabA m, n, A() - кстати, параметры надо писать в скобках, TabA (m, n, A())
'MsgBox A(1, 1)
For i = 1 To m
For j = 1 To n
A(i, j) = Cells(i, j)
Next j
Next i
Sub TabA(m As Integer, n As Integer, A() As Double)
For i = 1 To m
For j = 1 To n
A(i, j) = Cells(i, j).Value
Next j
Next i
End Sub
А вот где происходит выход за рамки массива (Subscript out of range), я так и не понял.
Видимо, что-то неявное.
If A(i, j) > 0 Then
x = 1 - это зачем?
y = 24 - и это тоже зачем?
Cells(24, 1) = "i"
Cells(24, 2) = "j"
End If
Дальше
x = 1 - объявил счетчиком х
For j = 1 To m
For i = 1 To n
If A(i, j) < 0 Then
f = f + 1 - а считаешь в f
End If
Next i
Next j
И научись If записывать в 1 строку:
If A(i, j) < 0 Then f = f + 1
Дальше. Сначала запускаешь функцию TabA, а потом повторяешь ее же в основной программе.
TabA m, n, A() - кстати, параметры надо писать в скобках, TabA (m, n, A())
'MsgBox A(1, 1)
For i = 1 To m
For j = 1 To n
A(i, j) = Cells(i, j)
Next j
Next i
Sub TabA(m As Integer, n As Integer, A() As Double)
For i = 1 To m
For j = 1 To n
A(i, j) = Cells(i, j).Value
Next j
Next i
End Sub
А вот где происходит выход за рамки массива (Subscript out of range), я так и не понял.
Видимо, что-то неявное.
отладчиком пройдя по коду, не имея таблицы данных, ваша ошибка получается из-за
1)
Function Mrow() As Integer
Dim i As Integer
i = 1
Do Until IsEmpty(Cells(i, 1))
i = i + 1
Loop
Mrow = i - 1
End Function
возвращает 0 который и вызывает вашу ошибку если Cells(1, 1) пустая
итак: простучите отладчиком ваш код начиная от CommandButton1_Click() и вы сами поймаете ошибку
у вас ее создают MROW() возвращая 0
Этим же грешит Ncol()
1)
Function Mrow() As Integer
Dim i As Integer
i = 1
Do Until IsEmpty(Cells(i, 1))
i = i + 1
Loop
Mrow = i - 1
End Function
возвращает 0 который и вызывает вашу ошибку если Cells(1, 1) пустая
итак: простучите отладчиком ваш код начиная от CommandButton1_Click() и вы сами поймаете ошибку
у вас ее создают MROW() возвращая 0
Этим же грешит Ncol()
Книгу мне, влом не форматированный код читать.
Похожие вопросы
- Помогите написать код для VBA
- помогите с простой задачкой на коде на VBA. НЕ ПАСКАЛЬ!
- Помогите с кодом к заданию на VBA.
- помогите решить задачку, на VBA для Excel
- Помогите исправить код чтобы он считал балы теста Pascal
- Помогите составить программу в VBA !!!
- помогите сделать лабу в VBA, по темам, "Матрицы" и "одномерные массывы"
- Help!!! Помогите решить задачу по VBA MS Excel!
- Всем привет, помогите в коде разобраться С++, вылетает ошибка, вроде все правильно..
- Помогите, лёгкий код C++