1

我需要计算每列中值的总和并将其存储在一个数组中。请注意,列数不是固定的。它动态变化。这是我完全卡住的地方。这只是我正在编写的一个巨大功能的一部分。

在下面的代码中,我求和的“H 列”是一个变量。我的意思是计算总和的列数基于 Val(i) 的值。例如:如果 Val(0) = 10,那么我需要计算从 H 列到 Q 列的所有数字的总和,并将每列的总和存储在一个数组中,iesum(0) = H 列的总和;sum(1) = 第 I 列的总和;等等。

我被卡住的地方是增加列,即在下一次迭代中对“列 H”求和后,它应该对“列 I”中的元素求和----> (Sum(i + k) = Application.WorksheetFunction.Sum (范围(“H2”))

我尝试过类似下面的方法:

Dim i, j, k, l, MaxVal As Integer
Dim objNewSheet As Worksheet
Dim Sum(0 To 1000) As Double

k = 0
For i = 0 To (MaxVal-1)
    Set objNewSheet = ActiveWorkbook.Sheets("Sheet" & (i+1))
    objNewSheet.Select
    For j = 0 To Val(i)
        Sum(i + k) = Application.WorksheetFunction.Sum(Range("H2"))
        k = k + j
    Next j
Next i
4

1 回答 1

0

正如 Tim 所提到的,您可以使用该Resize方法来修改 Range 的大小。

Dim rng as Range: Set rng = Range("H2")
Sum(i + k) = Application.WorksheetFunction.Sum(rng.Resize(1, j))

上面应该创建一个j列宽的新范围。

我添加了一个Range变量,因为它们更容易使用(IMO),就像常量一样Range("H2")。您可以使用MsgBox rng.Resize(1,j).Address来查看新范围的地址。

以下是您可能需要考虑的其他几点:

  • 你没有正确声明你的变量,除非你真的打算为i, j, k, l as Variant. 你可以这样做:

    Dim i#, j#, k#, l#, MaxValue#(速记符号)或

    Dim i as Integer, j as Integer, k as Integer, l as Integer, MaxValue as Integer

    否则,除非您为每个变量指定类型,否则它们将是 Variant。

  • 为了可读性,您可能希望避免在保留或半保留关键字或现有函数(如Sum. 我会将该变量重命名为mySumsumArray其他名称,这显然会向未来的用户表明这是一个变量,而不是一个函数。

  • 我在上面的评论中提到,最初使用 1000 的上限来确定数组变量的尺寸有点笨拙,如果您遇到需要更大数组的情况,显然会失败。情况可能并非如此,但它仍然是一种笨拙的数组标注方式。我会建议Dim mySum() as Double,然后ReDim在代码中稍后使用变量,ReDim Preserve如果它需要在运行时真正动态,可能会使用。

更新

这是一个简单的例子,你的代码只是一个片段/不完整的,所以我不能使用它,但这个例子应该说明它是如何工作的。

Option Base 1
Sub Test()
    Dim i As Integer
    Dim rng As Range
    Dim mySum() As Double

    '## The initial range ##'
    Set rng = Range("H2")

    '## Do an iterative loop ##'
    For i = 1 To 4

        '## Resize the range within the iteration ##'
        Set rng = rng.Resize(1, i)  '<-- change the 1 in this line to the number of rows in the column that needs to be summed'
        '## Ensure the array is properly dimensioned ##'
        ReDim Preserve mySum(i)
        '## Store the calculation in the array ##'
        mySum(i) = Application.WorksheetFunction.Sum(rng)

    Next

End Sub
于 2013-05-14T01:51:00.677 回答