比 COUNTIFS 更进一步,我提出了一个挑战,即编写一个不使用 VBA 代码的公式。基本数据由 1000 多行数据组合而成,其中:
- A 列:值为 1 至 3 的行
- B 列:值从 1 到 250 的行。
为此,假设我们查看 A 列中值为“1”且与 B 列中的值“5”匹配的所有单元格。为了找到所有匹配项,我们将使用 COUNTIFS 命令。
1 1
2 5
1 5
1 7
1 10
3 45
2 12
1 2
2 1
=COUNTIFS(A1:A9;1;B1:B9;5)
这里的答案是 1。
接下来,B 列中的“5”属于一个组,例如从 1 到 9 的组。最好的方法是,计算此示例中的所有匹配项,以便对于 A 列中的所有“1”,我们必须在 B 列中找到值从 1 到 9 的所有匹配项?!在上面的示例中,结果将是“4”。显而易见的解决方案是使用一系列 IF 命令,但这样做效率低下,而且很容易出错,很容易被忽视。
=COUNTIFS(A1:A9;1;B1:B9;"<="&9)
仅用作上限。如果我将第三个标准范围和条件指定为“>=”&1,则不起作用 - 返回 0。
我注意到,只有当我在条件中使用“=”符号时,三个标准范围和条件才有效。一旦我使用
=COUNTIFS(A1:A9;1;B1:B9;"<="&9,B1:B9;">=1")
它返回 0。我的目标是最终用 VLOOKUP 命令替换条件中的数字,因此最终等式应该类似于
=COUNTIFS(A1:A9;1;B1:B9;"<="&VLOOKUP(...),B1:B9;">=VLOOKUP(...)")
但是“<”和“>”符号会弄乱这一点。仍在寻找解决方案。
加斯帕
答案1
嗯。奇怪又不奇怪作为指定由 Microsoft 提供。我尝试重现该问题,但在 Mac 版 Excel 2011 以及 Windows 版 Excel 2010 上,使用以下公式,它可以按预期工作:(=COUNTIFS(A1:A9;E1;B1:B9;">="&E2;B1:B9;"<="&E3)
我为要使用的查找值使用了三个单元格)。
答案2
谢谢@agtoever!它起作用了,我刚刚意识到我的问题出在其他地方。这是我的全部代码:
=COUNTIFS(INDIRECT(CONCATENATE("baza!$";SUBSTITUTE(ADDRESS(1;MATCH("card_type_id";baza!$A$1:$AAA$1;0);4);"1";"");"$2:$";SUBSTITUTE(ADDRESS(1;MATCH("card_type_id";baza!$A$1:$AAA$1;0);4);"1";"");"$15000"));1;INDIRECT(CONCATENATE("baza!$";SUBSTITUTE(ADDRESS(1;MATCH(IF($C$4="CC_SI_klasifikacija";"building_classification_id";0);baza!$A$1:$AAA$1;0);4);"1";"");"$2:$";SUBSTITUTE(ADDRESS(1;MATCH(IF($C$4="CC_SI_klasifikacija";"building_classification_id";0);baza!$A$1:$AAA$1;0);4);"1";"");"$15000"));"<="&VLOOKUP(C5;K203:N210;4;FALSE))
问题是,我的第二个条件范围在单元格中无法识别为数字(下图)。如果你看一下公式 - 这是 N 列。是否有可能在一个公式中将文本转换为数字?例如 NUMBERVALUE?