如何使用宏基于另一列中的同一个月对一列中的数据进行求和

时间:2008-11-25 14:06:52

标签: excel vba excel-vba

我在excel 2007中使用宏来完成我的工作。我正在处理许多数据,我需要根据同一个月对同一列中的2行或更多行进行汇总。但是月份列表示为日期。

例如,我有一系列数据

A            B
2/10/2008    2
2/10/2008    3
4/10/2008    3
5/11/2008    4
5/11/2008    5

我希望结果显示在C和D列中,如下所示

C            D
Oct/08       8
Nov/08       9

如果有人能帮助我,我非常感激。

的问候,

Tifu

4 个答案:

答案 0 :(得分:4)

    A           B       C   D       E       F
1   10/ 1/2008  24106   1   Oct-08  24106   8
2   10/31/2008  24106   7   Nov-08  24107   11
3   11/ 1/2008  24107   8   Dec-08  24108   6
4   11/30/2008  24107   3               
5   12/ 1/2008  24108   2               
6   12/ 2/2008  24108   4               

B1 =MONTH(A1)+YEAR(A1)*12
E1 =MONTH(D1)+YEAR(D1)*12
F1 =SUMIF(B$1:B$6,CONCATENATE("=",E1),C$1:C$6)

我必须克服两个问题来解决这个问题。首先,SUMIF只能进行直接比较,它不能在源位置运行一个函数(范围函数除外,日期和时间函数都没有),所以我不得不添加B列。 E列是可选的,它可以作为F中公式的一部分实现,但为了说明的目的,我将其保留为独立。其次,SUMIF采用描述比较的字符串参数,因此我在运行中构建了必要的字符串(对于F1来说是“= 24106”)。

答案 1 :(得分:1)

使用数组函数: C1:

=date(2008,small(month($A$1:$A$10),1),1)

C2:

=date(2008,small(month($A$1:$A$10),2),1)

右键单击这些单元格并将其格式化为mmm / yy

D1:

=sum(if(month($C1)=month($A$1:$A$10),($B$1:$B$10),0))

确保在完成编写此公式后按ctrl-shift-enter。 然后根据需要将其粘贴下来。

答案 2 :(得分:0)

如果您不熟悉VBA,我会首先在使用“数据”菜单下的“小计”功能(即通过Excel界面)执行您想要执行的操作时录制宏。

记录宏后,您可以查看生成的VBA代码,并根据需要对其进行更改。

答案 3 :(得分:0)

这应该可以使用常规的excel公式:

  • 提取日期月份(某些月份功能)
  • 然后像这样做一个条件和(函数sumwhen(?)):

    = SumWhen(A:B,ReferenceDate,B:B) (参考日期= C2 C3等)

(我所有的都是德语excel,函数名也被翻译了,所以我的函数名可能会被关闭。也许有人可以查看英语excel并在必要时更新。)