分别求指定范围的汇总值

最近,接到一名网友的问题,大致要实现如下要求:

  • 在A列中有一系列值,在B列中是0-365及以上的数值,但B列中的数值不是按0,1,2…等顺序排列的,而是较凌散,且A列和B列中的数据都存在空行。要求将B列中0-30的数值所对应的A列中的数值汇总、B列中31-60的数值所对应的A列中的数值汇总,即将B列中按顺序的每30个数字所对应的A列中的数据汇总。

如下图所示:
SampleDatas
其中,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

为了简单起见,没有声明具体的数据类型。并且,在代码中的变量初始值可以根据具体的工作表中的值来作出改变,以适应具体的工作环境。


提示:您可以在评论中使用HTML标签,且任何与HTML标签相同的符号都会被理解为HTML标签并以相应的格式显示.如果您的评论中有代码,可以使用相应的标签,例如,如果有VB或VBA代码,则可以使用[vb]标签,即[vb]放置的代码[/vb],这样会很清晰地显示代码.

发表评论