我需要计算每列中的值的总和并将其存储在数组中。请注意,列数不固定。它动态变化。这是我完全卡住的地方。这只是我写的一个巨大功能的一部分。
在下面的代码中,我正在求和的“H列”是一个变量。我的意思是计算总和的列数基于Val(i)的值。 对于Eg:如果Val(0)= 10,那么我需要计算从列H到列Q的所有数字的总和,并且将每列的总和存储在一个数组中,即,(0)=列H的总和; sum(1)=第I列的总和;等等。
我被卡住的点是增加列,即在下一次迭代中对“列H”求和之后它应该对“列I”中的元素进行求和----> (Sum(i + k)= Application.WorksheetFunction.Sum(Range(“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
答案 0 :(得分:0)
Tim提到,您可以使用Resize
方法修改范围的大小。
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
)之后命名变量。我会将该变量重命名为mySum
或sumArray
或其他显然会向未来用户表明这是变量而非函数的变量。
我在上面的评论中提到,最初使用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