在研究过滤动态范围的方法时,我遇到了COUNTIF()的意外行为。
我想评估一个范围(A2:A9),看看哪些行与B2:B3中的一个较短列表匹配。这对进一步在FILTER()、SUMPRODUCT()和类似函数中使用很有用。示例如下:浏览9只股票的清单;标记在2的较短列表上的两个股票;返回一个由1和0组成的9项动态数组,其顺序与原始9只股票列表中的顺序相同。
Python中的等效表达式是普通迭代if criteria_str in evaluated_range:
newlist.append(1)
else:
newlist.append(0)
我通过使用COUNTIF()得到了我想要的。
但是,我对参数的顺序完全搞不清楚。根据我过去在Excel 365启用常用函数返回动态范围之前的经验,我认为[范围]是A2:A9,[条件]是B2:B3。但是,Excel假设相反。“所有项”是“条件”(红色),“某些项”是“范围”(蓝色)?
Official Microsoft documentation for COUNTIF根本没有描述动态数组是如何处理的。而对于静态操作,顺序一直都是一样的-所有项都是“范围”,表达式是“条件”。
是否在任何地方记录了此行为(针对此函数或返回动态数组的所有函数)?
2条答案
按热度按时间eh57zj3b1#
一直都是这样。
COUNTIFS总是返回一个数组,只是没有像你看到的那样溢出。例如,不管你使用的是什么版本,
=SUMPRODUCT(COUNTIF(B2:B3,A2:A9))
都会返回2。第二个是要通过COUNTIFS的项目数组。如果将它们反转:
它只会“溢出”两行,因为这是第二个参数中的全部内容。
第一个参数是要搜索的范围,第二个参数是要搜索的内容。如果有多个参数,COUNTIFS将返回一个数组,其大小为第二个参数的大小。
换句话说,你的公式和做一样:
然后把公式往下拖,但它只是为你迭代。一直都是这样,你只是没有“看到”结果。
在旧版本中,您可以突出显示C2:C9。然后将公式放入公式栏中,并按Ctrl-Shift-Enter,结果会溢出,就像您在Office 365中看到的那样。
aamkag612#
公式中一切都按预期运行您可以根据所需结果使用
=COUNTIF(B2:B3,A2:A9)
和=COUNTIF(A2:A9,B2:B3)
表达式首先,您只需检查列表A2:A9
中每个元素是否出现在列表B2:B3
中,如果出现,将其计为1。使用第二个公式,您将检查列表B2:B3
中的每个元素在列表A2:A9
中出现了多少次。我已经修改了你的列表(将UBER添加到
A10
),也许它会更容易理解: