寻找 MAXIFS 的 ArrayFormula 规范,其中标准基于另一列中的无限值

Looking for ArrayFormula specification for MAXIFS where criteria is based on unlimited values in another column

我有一个 gsheet,其中的列为 AC,其中大部分是从另一个 sheet 过滤而来的,而后者又是从外部来源导入的。相关栏目是:

第 3 行是 header 信息 第 4 行(隐藏行)是我的 ArrayFormulas 所在的其他列 第 5 行是数据开始的地方(并继续数百行) 对于在 J 列中找到的每个键,我想确定 K 的最大值并在 C 中 return 它,并且我想使用 ArrayFormula 执行此操作,以便我只需要在顶部指定一次。

Example set for primary goal Example set for stretch goal

到目前为止,对于初级,我想出的是

=ArrayFormula(maxifs(K4:K,J4:J,"<>"&"",J4:J,"="&J4))

这当然没有按预期工作。我什至还没有开始考虑延伸目标(因为我会在它起作用后修改另一个......它不是)

  1. 最重要的是:让数组公式工作并returnK/value进入C
  2. 延伸目标:以上加上 returning K/value 仅适用于最大线(或 any 最大线,如果有多个相同 K/values) 和(代替 K-value) return F/label 用于 non-maxed 行。翻译:显示最大值和所有 non-maxed 的值,显示已达到最大值的行的标签(不是现有行的标签)

有什么建议吗?

(编辑以放入数据集的图像,而不是实际上不起作用的奇怪格式的东西)

在 C4 中尝试:

={""; ARRAYFORMULA(IFNA(VLOOKUP({J5:J&" "&K5:K}, 
 VLOOKUP(FLATTEN(QUERY(TRANSPOSE(
 QUERY(J5:K, "select J,max(K) where J is not null 
 group by J label max(K)''")),,9^9)), {J:J&" "&K:K, F:F}, {1,2}, 0), 2, 0), 
 IFNA(VLOOKUP(J5:J, 
 QUERY({J5:K}, "select Col1,max(Col2) where Col1 is not null 
 group by Col1 label max(Col2)''"), 2, 0))))}

对于你标记的最大值,对于其余的,显示最大值


更新:

反之:

={""; ARRAYFORMULA(IFNA(IF(""<>INDEX(SPLIT(VLOOKUP(J5:J&" ×"&K5:K, FLATTEN(QUERY(TRANSPOSE(QUERY({J5:J, "×"&K5:K}, 
 "select Col1,max(Col2) where Col1 is not null group by Col1 label max(Col2)''")),,9^9)), 1, 0), "×"),,2),
 INDEX(SPLIT(VLOOKUP(J5:J&" ×"&K5:K, FLATTEN(QUERY(TRANSPOSE(QUERY({J5:J, "×"&K5:K}, 
 "select Col1,max(Col2) where Col1 is not null group by Col1 label max(Col2)''")),,9^9)), 1, 0), "×"),,2),
 VLOOKUP(J5:J, TRIM(SPLIT(VLOOKUP(FLATTEN(QUERY(TRANSPOSE(QUERY({J5:J, "×"&K5:K}, 
 "select Col1,max(Col2) where Col1 is not null group by Col1 label max(Col2)''")),,9^9))&"*", 
 {J:J&" ×"&K:K&"×"&F:F}, 1, 0), "×")), 3, 0))))}

在空 C4:C 的 C4 中尝试此操作:

=ArrayFormula({"Header"; IF(J5:J="",,IF(VLOOKUP(J5:J,SORT(J:K,2,0),2,FALSE)=K5:K,K5:K,F5:F))})

您可以根据需要更改公式中的header。

其余的基本上是这样说的:“如果 J 为空,return 为空。否则,通过 K 在 J:K reverse-sorted 中查找 J(即顶部的最大值). 如果找到的匹配行中已有的内容,return K;否则,return F."

ADDENDUM(基于原始 post 中的更新信息):

=ArrayFormula({"Header"; IF(J5:J="",,IF(VLOOKUP(J5:J,SORT(J:K,2,0),2,FALSE)=K5:K,K5:K,VLOOKUP(J5:J,SORT({J:K,F:F},2,0),3,FALSE)))})