【问题标题】:Excel: Challenging formula sought for counting recordsExcel:寻求计数记录的具有挑战性的公式
【发布时间】:2014-07-01 15:41:44
【问题描述】:

我正在寻求有关公式的帮助。在我的“数据”表上,我有以下格式的数据:

 A B C D E F G H I J
1 UID RecordType HCode AdmittedDate Forename Surname DOB Sex STDate RDate
2 87962 STAsses STIV1 01/01/2012 Mark Jones 13/07/1978 男 09/12/2012
3 89658 转移 GLSI2 01/01/2012 艾莉森·艾特肯 20/12/1956 女 08/07/2013
4 84563 出院 JHOP1 01/01/2012 大卫·贝克汉姆 09/08/1987 男 08/07/2013
5 89654 STAsses STGE1 01/01/2012 安德鲁麦克白 27/09/1976 男 08/07/2012
6 89867 Transfer KIND1 01/01/2012 George Deas 08/05/1989 男 08/07/2013
7 87962 转移 STIV1 01/01/2012 Mark Jones 13/07/1978 男 04/03/2013
8 89654 转移 STGE1 01/01/2012 安德鲁麦克白 27/09/1976 男 12/08/2012

在我的“报告”表上,我设置了下表:

 B C D E F
4 HospCode RecordType Jul-12 Aug-12 Sep-12
5 STGE1 评估
6 次转会
7 放电
8

我想做两件事。

  1. 在 D5、E5、F5 中,需要一个公式从数据表中返回 HCode 'STGE1' 的 'STAssess' 记录数,这些记录在“报告”表的 D4 所示月份(7 月-12)。这些记录的日期在数据表的第一列 - 'STDate'。

我尝试过使用 SUMPRODUCT,它在一定程度上有效,但我很难恢复 7 月份才完成的记录。我需要公式是动态的,因为它只带回在 D4 中输入的月份的结果(因此公式中内置的日期范围不起作用)。

  1. 在 D5、E5、F5 中,我需要从“数据”表中取回记录数,这些记录在 B 列 (RecordType) 中具有“转移”,在 C 列 (HCode) 中具有“STGE1”和日期在“报告”表的 D4 指定的月份(7 月 12 日)中的 J 列(RDate)中。

有人有什么想法吗?数据表实际上将是一个无法操作的外部 .csv 文件。我不介意使用其他隐藏的工作表来进行任何需要完成的排序,只要可以进行设置,以便在引入数据时无需进行额外的工作。

谢谢!

【问题讨论】:

    标签: excel excel-formula formulas


    【解决方案1】:

    对于您的两个问题,您都可以使用COUNTIFS。它更容易理解(对我而言)并且与 Excel 2007 及更高版本兼容。

    第一个问题:

    =COUNTIFS(DATA!B:B,"STAsses",DATA!C:C,$B5,DATA!I:I,">="&D$4,DATA!I:I,"<"&DATE(YEAR(D4),MONTH(D4)+1,1))
    

    第二个问题:

    =COUNTIFS(DATA!B:B,"Transfer",DATA!C:C,$B5,DATA!J:J,">="&D$4,DATA!J:J,"<"&DATE(YEAR(D4),MONTH(D4)+1,1))
    

    这些公式可以在您需要的范围内拖动。

    【讨论】:

    • 嗨!非常感谢您对此的帮助。第一个肯定有效。还不确定第二个,但它看起来很有希望。试图投票,但它不会让我只是还没有(没有足够的声誉!)。您能否简要解释一下第二个公式是如何工作的,以确保它只计算也有相应“STAssess”记录的“转移”记录。 STAssess 记录可以随时完成。
    • 谢谢。如果适合您的需要,您可以标记为答案。这会让其他人知道这对你有用,以防他们有类似的需求。至于具有相应STAssess 记录的Transfer,这是一个棘手的问题(而不是您原始问题的一部分)。我不得不考虑一下,但似乎你需要一些帮助列来实现这一点。为了保持这个问题干净,我会做的是使用这个新要求并创建新问题。
    • 再次感谢。你是绝对正确的。我打算将其作为第三个条件添加到我的第二个问题中,但是在那里重新阅读后,我显然没有。会单独问。
    【解决方案2】:

    这是一个可用于 D5 单元格的示例公式,这是否为您指明了正确的方向?:

    {=SUM(IF($B$2:$B$8=$B14,IF($C$2:$C$8=$A14,IF($D$2:$D$8=C$13,1,0),0),0))}
    

    这是一个数组函数,因此您必须在每端不带 {} 的情况下输入它,并使用 Ctrl + Shift + Enter 输入公式。

    【讨论】:

    • 感谢这个起点。我已经处于类似的阶段,但存在一些问题。例如,您提供的 SUM 函数的最后一部分 - C13 参考是什么?
    • 这里是添加了正确引用的相同公式:=SUM(IF(Data!B2:B8="STAssess",IF(Data!C2:C8=Report!B5,IF(Data!I2 :I8=D4,1,0),0),0)) 我怀疑这是导致结果为 0 的日期范围的最后一部分(它应该是 1)。在数据表上,第 I 列包含格式为 DD/MM/YYYY 的日期列表。该公式应计算在报告表的 D4 中输入的月份(7 月至 12 日)中此列中的日期。
    【解决方案3】:

    如果你的汇总表看起来像

    HospCode    RecordType  12-Jul  12-Aug  12-Sep
    STGE1       STAsses     1       0       0
    STGE1       Transfer    0       1       0
    STGE1       Discharges  0       0       0
    

    您的数据在名为 Table1 的表中,然后在 D5 中

    =SUMPRODUCT((Table1[HCode]=$B5)*(Table1[RecordType]=$C5)*(MONTH(Table1[STDate])=MONTH(D$4)))
    

    我不确定您所说的“带回来”是什么意思,但假设您的意思是当 RecordType = column C 当 RecordType = "Transfer" 和 RDate 时显示它是在正确的月份。那么

    =SUMPRODUCT((Table1[HCode]=$B5)*(Table1[RecordType]=$C5)*(MONTH(Table1[STDate])=MONTH(D$4)))+SUMPRODUCT((Table1[HCode]=$B5)*(Table1[RecordType]="Transfer")*(MONTH(Table1[RDate])=MONTH(D$4)))
    

    【讨论】:

    • 您好,感谢您的帮助。数据不在表格中。它位于名为“数据”的表格中,并且完全未格式化。它是从 .csv 文件复制的,但我希望能够在对公式进行排序后直接引用 .csv 文件。我所说的“带回来”只是指“计数”。我不想要的只是计算 B5 中 HCode 的所有“转移”记录,以及 D4 中显示的月份。我希望它只计算 Report!B5 中显示的 HospCode 的“转移”记录,日期在 Data!J:J = 到 Report!D4 中的日期,并且只有在之前有“STAssess”记录的情况下相同的 UID。
    • 我已修改您的第二个公式以使用适当的工作表/单元格引用,但现在我在 Excel (2013) 中遇到错误...“我们发现此公式有问题。不尝试键入公式?当第一个字符是等号或减号时,Excel 认为它是一个公式。”