在函数中将输入范围转换为数组

时间:2017-11-14 01:41:58

标签: vba excel-vba loops excel

所以我现在已经学习VBA一个月了,并且认为我已经掌握了它,但由于某种原因,这个基本任务正在​​逃避我。我正在尝试创建一个函数,我在其中选择数字的输入区域(实际上只有一行或一列),然后输出单元格中数字的总和。这是我的代码:

for i in r:
  key= n[i]
  print key

尽管我知道如何在子程序中实现这一点,但是我从函数输入中获取数据的事实让我失望了。我该如何完成这项任务?我非常感谢你的一些建议。

1 个答案:

答案 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(),而不是从01开始,以避免编码错误。有些人更喜欢Option Base 0,有些人更喜欢Option Base 1。虽然两者都不会对上面的内容产生影响(因为范围总是产生一个以1开头的数组),但是将来防止错误只是一种很好的编码实践。