所以我现在已经学习VBA一个月了,并且认为我已经掌握了它,但由于某种原因,这个基本任务正在逃避我。我正在尝试创建一个函数,我在其中选择数字的输入区域(实际上只有一行或一列),然后输出单元格中数字的总和。这是我的代码:
for i in r:
key= n[i]
print key
尽管我知道如何在子程序中实现这一点,但是我从函数输入中获取数据的事实让我失望了。我该如何完成这项任务?我非常感谢你的一些建议。
答案 0 :(得分:1)
总结一下上述评论,请尝试以下代码:
Option Explicit
Function CashFlow(CashArray As Excel.Range)
Dim sum As Double
Dim x As Long, y As Long
Dim cashflows() As Variant
cashflows = CashArray.Value
sum = 0
For y = LBound(cashflows, 1) To UBound(cashflows, 1)
For x = LBound(cashflows, 2) To UBound(cashflows, 2)
sum = sum + cashflows(y, x)
Next x
Next y
CashFlow = sum
End Function
请注意,此代码汇总了给定范围内的所有单元格(即使该范围内有多行和列)。基本上,范围存储在数组cashflows
中。正如评论中所提到的,这将产生一个二维数组。函数LBound(cashflows)
将为您提供该阵列的 L \ strong Bound ary。通过指定LBound(cashflows, 1)
我特别要求第一个维度的下边界(在这种情况下是行)。 UBound
为指定的维度返回该数组的 U pper Boun ary。类似UBound(cashflows, 2)
返回给定数组的最后一列(第二维)。
备注:我始终在代码中使用LBound()
和UBound()
,而不是从0
或1
开始,以避免编码错误。有些人更喜欢Option Base 0
,有些人更喜欢Option Base 1
。虽然两者都不会对上面的内容产生影响(因为范围总是产生一个以1
开头的数组),但是将来防止错误只是一种很好的编码实践。