寻找 MAXIFS 的 ArrayFormula 规范,其中标准基于另一列中的无限值
Looking for ArrayFormula specification for MAXIFS where criteria is based on unlimited values in another column
我有一个 gsheet,其中的列为 AC,其中大部分是从另一个 sheet 过滤而来的,而后者又是从外部来源导入的。相关栏目是:
- C:我希望找到的值所在的位置(C4 中的公式,数组公式填充 C 的其余部分)
- F:行标签(这是一个唯一的字母数字值)
- J:比较键(仅将键“a”与键“a”的其他行进行比较,键“b”与其他键“b”等进行比较)。其中一些可能是空白的。 Non-blank 键是一个或两个字母数字字符。理想情况下,当 J 为空时,C 也将为空。
- K:该行的数值。 K 中的值为 non-unique 和 non-sorted.
第 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))
这当然没有按预期工作。我什至还没有开始考虑延伸目标(因为我会在它起作用后修改另一个......它不是)
- 最重要的是:让数组公式工作并returnK/value进入C
- 延伸目标:以上加上 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)))})
我有一个 gsheet,其中的列为 AC,其中大部分是从另一个 sheet 过滤而来的,而后者又是从外部来源导入的。相关栏目是:
- C:我希望找到的值所在的位置(C4 中的公式,数组公式填充 C 的其余部分)
- F:行标签(这是一个唯一的字母数字值)
- J:比较键(仅将键“a”与键“a”的其他行进行比较,键“b”与其他键“b”等进行比较)。其中一些可能是空白的。 Non-blank 键是一个或两个字母数字字符。理想情况下,当 J 为空时,C 也将为空。
- K:该行的数值。 K 中的值为 non-unique 和 non-sorted.
第 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))
这当然没有按预期工作。我什至还没有开始考虑延伸目标(因为我会在它起作用后修改另一个......它不是)
- 最重要的是:让数组公式工作并returnK/value进入C
- 延伸目标:以上加上 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)))})