分别求指定范围的汇总值
最近,接到一名网友的问题,大致要实现如下要求:
- 在A列中有一系列值,在B列中是0-365及以上的数值,但B列中的数值不是按0,1,2…等顺序排列的,而是较凌散,且A列和B列中的数据都存在空行。要求将B列中0-30的数值所对应的A列中的数值汇总、B列中31-60的数值所对应的A列中的数值汇总,即将B列中按顺序的每30个数字所对应的A列中的数据汇总。
如下图所示:

其中,E列中的值是运行程序后自动汇总的值。
再详细解释一下,例如,在B列中属于0-30之间的值所在的单元格是B2,其对应的A列中的值是1,因此在这个范围中的数值相加的结果为1;在B列中属性31-60之间的值所在的单元格是B4和B6,所对应的A列中的值分别为5和7,其和为12,……,等等。
下面是程序代码:
Sub test()
Dim numVal(), iMax, iArray, i, j, k, m, lLastRow, rng, rngCal
iMax = WorksheetFunction.Large(Range(”B:B”), 1)
iArray = Int(iMax / 30)
ReDim numVal(0 To iArray)
lLastRow = Range(”B65536″).End(xlUp).Row
Set rng = Range(”B1:” & “B” & lLastRow)
Set rngCal = Range(”A1:” & “A” & lLastRow)
Range(”E2:E65536″).Clear
For i = 2 To lLastRow
j = Int(rng(i) / 30)
k = rng(i) - Int(rng(i) / 30) * 30
If k <> 0 Then
numVal(j) = numVal(j) + rngCal(i)
End If
m = j - 1
If k = 0 And (m = 0 Or m > 0) Then
numVal(m) = numVal(m) + rngCal(i)
End If
Next i
For i = 2 To iArray + 2
Range(”E” & i) = numVal(i - 2)
Next
End Sub
为了简单起见,没有声明具体的数据类型。并且,在代码中的变量初始值可以根据具体的工作表中的值来作出改变,以适应具体的工作环境。

发表评论