选择表的子集以进行进一步处理

时间:2012-08-27 01:43:41

标签: excel

在Microsoft Excel中,如何根据同一个表的另一列中的值计算范围(列的一部分),将结果返回到Array表单中以供其他函数进一步处理?

在SQL中,我的意思是“SELECT field1 FROM table WHERE field2 = value”。

所选结果将被送入(两次)到FREQUENCY(),以计算“field1”中不同条目的数量。那就是:给定一个像这样的现有表:

Box          Date
1            07/01/12
13           07/01/12
13           07/01/12
27           07/18/12
13           07/18/12
55           07/18/12

我想生成这样的结果表:

Boxes      Date
2          07/01/12
3          07/18/12

请注意,“13”仅在第一个日期计算一次(“不同”),但在第二个日期仍然会再次计算。

我已经有一个表达式可以为整个表做正确的事情,

=SUM(N(FREQUENCY(Box,Box)>0))

其中“Box”是第一个表的命名范围,由整个Box列组成。 (使用与数据相同的范围/数组/列表和FREQUENCY的容器是Excel帮助中实际包含的一个令人费解的微妙技巧,但是 - 唉! - 没有充分解释。)

但我想要(几个)子集,每个日期一个。我想扩展我的“SUM(N(FREQUENCY ...)表达式,仅对第一个表的行进行操作,其中Date列与正在计算的行的Date列匹配。也就是说,再次使用SQL,

SELECT count(DISTINCT t1.Box), t2.Date
FROM `t1` JOIN `t2` ON (Date)
GROUP BY Date

我甚至可以构建一个有趣值的数据透视表(它会让我在其单元格中计数),然后使用并行的,日期索引的

=COUNTIF(…)

将每行计数减少到该日期的单个唯一计数。但是这需要我更新数据透视表以注意基表中的新数据,然后拖动扩展答案列以包含新日期(或者遭受丑陋的值错误标记)。所以一些更自动,更简洁的手册,会很甜蜜。

1 个答案:

答案 0 :(得分:1)

我想你问的时候不可用,但Excel 2013在数据透视表中有一个Distinct Count选项:

SO12135410 example