Excel一对多表,查询每个ID的行数

时间:2015-07-08 18:49:35

标签: excel excel-vba one-to-many pivot-table vba

我在Excel中有一对多的表格,如图所示设置。每个rid(ID)都有很多样本;每个样本都有固定数量的属性(访问,访问类型等)。

enter image description here

我还设置了一个数据透视表来可视化数据: enter image description here

现在,我需要过滤/查询我的数据,以查找具有所有3种访问类型的所有ID:随机化和30周和交付。 (我可能需要对每个ID及其依赖对象进行其他查询)

使用高级过滤器和数据透视表可以在Excel中执行此操作吗?或者我是否需要编写VBA脚本来处理和组织这个? (使用Excel 2010)

如果VBA脚本最好,我应该使用Find和FindNext来获取属于ID的所有样本吗?

提前致谢!

2 个答案:

答案 0 :(得分:2)

可以通过多种方式完成;一种方法是使用COUNTIFS函数测试每个条件,并指出其中任何一个是否为0.就像这样(从第一个选项卡的单元格H4开始,向下拖动):

=countifs(A:A,A4,C:C,"randomization")*countifs(A:A,A4,C:C,"30-week")*countifs(A:A,A4,C:C,"delivery")

如果这些测试类型中的任何一种不与A列中的rid相同,那么公式将简化为0.

要创建更清晰的结果,请将该函数与0进行比较,以显示并非所有3都存在的所有rid;像这样:

= 0 = COUNTIFS(A:A,A4,C:C,"随机化")* COUNTIFS(A:A,A4,C:C," 30周" )* countifs(A:A,A4,C:C,"交付")

如果不是所有3个测试都存在,那么这将显示为TRUE。仅测试唯一的rids(将会更加清晰;有很多方法可以创建没有重复的rid列表,但这也有效):

=if(iserror(match(A4,$A$1:A3,0)),0=countifs(A:A,A4,C:C,"randomization")*countifs(A:A,A4,C:C,"30-week")*countifs(A:A,A4,C:C,"delivery"),"")

如果在当前行上方的任何行中找不到该特定rid的匹配项,则仅启动公式。

答案 1 :(得分:0)

如果您只有3种访问类型,为什么不只是执行ID计数,如果它是3则表示它已完成3种访问类型。像

这样的东西

= IF(COUNTIF($ A $ 1:$ A $ 100中,A1)= 3"完成""待定&#34)

我不知道..如果您有超过3种访问类型,请告诉我们。