VBA Excel在两个阵列上执行操作

时间:2011-03-10 20:09:35

标签: excel vba multidimensional-array

我在程序中遇到for循环问题。现在我有两个填充了任意数字的数组。这两个数组大小相同。基本上我希望用户指定他们想要在阵列上完成什么样的操作,然后我将执行它们(假设数组的尺寸相同)。下面是我尝试使用原始两个数组之间的差异填充答案数组的代码:

If (LCase(diffOrPercent = "difference")) Then
    For iRow = 1 To totalRow
        For iCol = 1 To totalCol
            answerArray(iRow, iCol) = s2Array(iRow, iCol) - s3Array(iRow, iCol)
        Next iCol
    Next iRow
End If

我遇到的问题是当我尝试打印出来时,answerArray完全是空白的。有谁知道发生了什么事?

注意:如果for循环从0变为end - 1,当我输入以下内容时会发生同样的错误:

answerArray(iRow, iCol) = s2Array(iRow, iCol).Value2 - s3Array(iRow, iCol).Value2

当我把Value而不是Value2时。

谢谢,

Jesse Smothermon

2 个答案:

答案 0 :(得分:2)

我想通了,if语句写得不正确,所以代码的操作部分甚至没有被命中。我搞砸了LCase上的括号,所以校正低于

If (LCase(diffOrPercent) = "difference") Then
    For iRow = 1 To totalRow
        For iCol = 1 To totalCol
            answerArray(iRow, iCol) = s2Array(iRow, iCol) - s3Array(iRow, iCol)
        Next iCol
    Next iRow
End If

这使得变量diffOrPercent将全部小写而不是......好吧我认为当我的原始if语句被实现时没有任何事情发生,因为if语句中的任何内容都没有被触发。对不起,我完全浪费了每个人的时间,但我非常感谢所有的快速回复

答案 1 :(得分:0)

跳出来的第一件事是假设数组的起始索引为1.除非你明确声明某处(在声明数组或使用Option Base 1时),否则数组中的第一项索引为0.

如果在运行时之前不知道数组边界,使用LBoundUBound函数以编程方式确定边界通常会更安全:

If (LCase(diffOrPercent) = "difference") Then
    For iRow = LBound(s2Array, 1) To UBound(s2Array, 1)
        For iCol = LBound(s2Array, 2) To UBound(s2Array, 2)
            answerArray(iRow, iCol) = s2Array(iRow, iCol) - s3Array(iRow, iCol)
        Next iCol
    Next iRow
End If

请注意,我在此假设s2Arrays3ArrayanswerArray都具有相同的尺寸。因此,我只检查s2Array

的范围