我试图编写一个函数,将一个应该包含在其单元格中的方阵作为输入
在对角线上方(从左下方到右上方)正数,
在对角线空单元下面,
喜欢这个3 x 3矩阵(第一个单元格包含#10,第二个单元格#5等):
10 5 1
9 6
4
在我对此矩阵执行任何操作之前,我需要验证对角线上方和上方的单元格是否包含正数,而其他单元格是否为空。我写了下面的代码。
问题是它在第二个For循环中给了我一个溢出错误,对于我的生命,我不明白为什么。 对于3×3矩阵(即,n = 3,p = 3),第二个For循环的第一行将是:对于i = 3到2步-1。这有什么问题?
Option Base 1
Private Sub triangle1()
Dim y As Variant
y = Application.InputBox( _
Prompt:=" Choose a square matrix in a worksheet : ", Type:=8)
Dim i As Byte, j As Byte, n As Byte, p As Byte, s As Byte
n = UBound(y, 1)
p = UBound(y, 2)
Debug.Print LBound(y, 1), n, p
s = 1
If n <> p Then
Debug.Print "False"
Exit Sub
Else
' First For loop
For i = 1 To n
For j = 1 To p
If y(i, j) <= 0 Or Not IsNumeric(y(i, j)) Then
Debug.Print "False"
Exit Sub
End If
Next
p = p - 1
Next
' Second For loop
For i = n To 2 Step -1
s = s + 1
For j = s To p
If Not IsEmpty(y(i, j)) Then
Debug.Print "False"
Exit Sub
End If
Next
Next
Debug.Print "True"
End If
End Sub
答案 0 :(得分:2)
问题在于byte
类型。如果您将其替换为Integer
或Long
,则应该运行。
原因是byte
无法处理负数(只有整数0-255),因此它不知道如何处理Step -1
,因为该步骤的类型与迭代器。