按日期和Excel中的ID汇总数字

时间:2013-02-07 02:07:49

标签: excel vba

我有一个非常大的(比方说,100,000行)excel表,其中包含 some (还有其他)列:

Person ID |   Date   | Number |
0043       03/20/2006  6
0043       03/20/2006  3.21
1478       04/01/2006  9.87
0021       04/12/2006  0.23
0101       04/12/2006  3.14
1042       04/12/2006  11.13

我想要做的是查看表格,并按日期为给定的人员ID添加数字。含义:现在有些条目在同一天被列出两次,但我真的很想在那个日期对那个人的那些数值进行“总和”(而不是两个单独的行)。

稍后,我将对那些“总结结果”进行一些分析,比如“有多少人有超过3但超过6的数字”等等。

是否有一个我可以运行的简单函数,它将按人员ID按日期汇总值,并给我一个新列来显示结果总和?或者,有一个VB程序可以轻松完成吗?

最终,我希望有一个新列来显示结果,这个新表将如下所示:

Person ID |   Date   | Number | Total Per ID Per Date |
0043       03/20/2006  6        9.21
0043       03/20/2006  3.21     N/A
1478       04/01/2006  9.87     9.87
0021       04/12/2006  0.23     0.23
0101       04/12/2006  3.14     3.14
1042       04/12/2006  11.13    11.13

有什么想法/建议? Visual Basic还是链接一个excel函数?为了简化给定的答案,我们假设列(人员ID,日期等)是A-C(或者在结果表的情况下为A-D),当然还有行1-7。

谢谢!

1 个答案:

答案 0 :(得分:1)

根据Doug Glancy的建议,您正在寻找的是使用数据透视表生成相对容易的东西。这是一种方法。

首先,要保留数据的原始顺序,请在E列中添加标记为Sort的列,例如在E列中,并添加一个升序索引号,每个新PersonID递增1。因此,单元格E2&中的排序数量。 E3将为1,E4将为2,等等。这很容易用公式完成,例如,“如果此行中的PersonID =前一行中的人员ID,则此行中的排序编号=上一行中的排序编号,否则排序第n行=前一行的排序数+ 1。

为您的数据创建数据透视表。这可以通过选择数据表中的一个单元格,然后从功能区中选择“插入”,“透视表”来完成。将数据透视表放在新工作表中。

在新工作表的“数据透视表字段列表”中,将Sort,PersonID,Date和Number设置为Row Labels,并将Number设置为Values字段(这应该在数据透视表中显示为'Number of Number'列)。

从数据透视表工具栏的“设计”选项卡中:

  • 将数据透视表设置为“表格形式”(报告布局)
  • 关闭小计(小计)

通过右键单击数据透视表中的这些列并在“字段设置”/“布局和打印”中选择相应的选项,使PersonID和Date字段重复。

您可以通过一些技巧获得所需的最终总计列:

  • 设置“数字总和”列,将值显示为行总数的百分比(在列中右键单击并选择该选项)。
  • 在单元格F3中输入标签“每个日期的每个ID总计”,向数据透视表中添加一个新列。 (默认情况下,数据透视表位于B3:E9)。
  • 在单元格F4中,输入以下公式,然后将其复制到单元格F9。

    = IF(AND(B4 = B3,C4 = C3), “NA”,D4 / E4)

    此公式计算每个PersonID的总计,如果PersonID和Date重复,则返回“NA”。

  • 最后,隐藏Sort列和Number of Number列。