请帮我解决这个问题。我刚刚开始使用VBA,搜索论坛后无法找到解决方案。我的电子表格中有1000个单位数字。每行20行50个数字。我的程序假设找到最大的产品。出于某种原因,我的最终答案是0.我已经做了一些调试,程序按预期完成所有循环和迭代。我怀疑我的函数没有将值传递回我的主
Public Sub problem8()
Dim product, i, j, maxproduct As Long
maxproduct = product = 1
For i = 1 To 20
For j = 1 To 50
product = calcproduct(i, j)
If product > maxproduct Then maxproduct = product
Next j
Next i
Range("AY1").Value = maxproduct
End Sub
Function calcproduct(ByVal a As Long, ByVal b As Long) As Long
Dim i, j, count As Long
counter = calcproduct = 1
For i = a To 20
For j = b To 50
calcproduct = Cells(i, j).Value * calcproduct
counter = counter + 1
If counter = 13 Then Exit Function
Next j
Next i
End Function
答案 0 :(得分:1)
变化:
Dim product, i, j, maxproduct As Long
为:
Dim product as long, i as long, j as long, maxproduct As Long
和
Dim i, j, count As Long
为:
Dim i as long, j as long, count As Long
我曾经认为最后将它应用到行上的所有内容但它没有,我遇到了类似的问题。
我可能会补充一下,你这样做的方式(将i和j分配给新变量a和b然后在第二个例程中使用i和j)非常混乱,我强烈建议不要这样做。
答案 1 :(得分:0)
首先,这是表达你想要完成的事情的错误方式。
maxproduct = product = 1
这表示“maxproduct等于False”。 product 刚刚被声明,所以它的所有意图和目的都是零而不等于 1 。你想说,
maxproduct = 1
product = 1
如果你真的需要将最后两个放在一行,那么使用这样的冒号,
maxproduct = 1: product = 1
对于函数中的类似语法也是如此。
现在了解VBA将 True 视为 -1 并将 False 视为 0 (< EM>零)。由于您实际上是将 maxproduct 和 product 初始化为零,因此您可以将所需的任何内容乘以它,并且最终仍然会为零。同样,对于在函数中处理此类似变量赋值的方式也是如此。
这是我对你的项目的看法。
Option Explicit
Public Const maxA As Long = 20
Public Const maxB As Long = 50
Public Const cntC As Long = 13
Public Sub problem8()
Dim product As Long, i As Long, j As Long, maxproduct As Long
maxproduct = 1: product = 1
For i = 1 To maxA
For j = 1 To maxB
product = calcproduct(i, j)
If product > maxproduct Then maxproduct = product
Next j
Next i
Range("AY1").Value = maxproduct
End Sub
Function calcproduct(ByVal a As Long, ByVal b As Long) As Long
Dim i As Long, j As Long, counter As Long
counter = 1: calcproduct = 1
For i = a To maxA
For j = b To maxB
calcproduct = Cells(i, j).Value * calcproduct
counter = counter + 1
If counter = cntC Then Exit Function
Next j
Next i
End Function
我将限制移动到公共常量,这使得更容易修改不同大小的区域。在你的函数中,你声明了一个 count ,然后开始使用一个名为 counter 的var,所以我改变了它以适应。正如另一篇文章中所提到的,变量声明需要具体,或者你最终得到一堆变体和一些长篇。