VBA Excel在两个arrays上执行操作

我在我的程序中遇到了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 

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

注意:如果for循环从0到结束-1,当我把以下内容发生同样的错误:

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

以及当我把价值而不是价值2。

谢谢,

Jesse Smothermon

我明白了,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 

这使得variablesdiffOrPercent将全部小写,而不是…..好吧,我不认为任何事情发生时,我的原始if语句被实现,这是有道理的,因为没有任何内部的if语句被击中。 对不起,我完全浪费每个人的时间,但我真的很感激所有的快速反应

跳出的第一件事就是假设数组的起始索引为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的界限。