仅当先前状态终止时如何对具有重置条件的集合进行排序
how to sequence a set with reseting condition only if previous state got terminated
鉴于特定的列集,我正在寻找一种方法,可以在 COUNTIF
过程中或之后将红色单元格变成空白单元格。
我用来获得(部分)正确答案的公式是:
=ARRAYFORMULA(IF(A2:A="",,IF(NOT(REGEXMATCH(TO_TEXT(B2:B), "\-")),
COUNTIFS(A2:A&D2:D, A2:A&D2:D, ROW(A2:A), "<="&ROW(A2:A)), )))
这是我的 sheet 的副本:- CC -
- 将黄色单元格视为 IDRESET/TERMINATION
- 每次重置后,ID 都会升级(E 列)
- E 列只是一个更好可视化的助手 - 它不是数据集的一部分
- 某列未排序,甚至可能未分组
当我复制你的sheet(提供的唯一选项)时,Col B 中的负数实际上都是文本。因此,我没有从 Col A 中的原始数据回溯到 best 方法。相反,我只是使用 Cols A:D,因为你目前拥有它们(尽管我怀疑您不需要助手)和您编写的原始“关闭”公式。
也就是说,这应该可以提供您想要的结果,如图所示:
=ArrayFormula({"DESIRED OUTPUT";IF(A2:A="",,IF(VLOOKUP(A2:A&"~"&COUNTIFS(A2:A,A2:A,ROW(A2:A),"<="&ROW(A2:A))-1,{SPLIT(UNIQUE(A2:A)&"~0|0","|");A2:A&"~"&COUNTIFS(A2:A,A2:A,ROW(A2:A),"<="&ROW(A2:A)),C2:C},2,FALSE)<>0,,IF(NOT(REGEXMATCH(TO_TEXT(B2:B), "\-")), COUNTIFS(A2:A&D2:D, A2:A&D2:D, ROW(A2:A), "<="&ROW(A2:A)), )))})
我的贡献是这部分:
IF(VLOOKUP(A2:A&"~"&COUNTIFS(A2:A,A2:A,ROW(A2:A),"<="&ROW(A2:A))-1,{SPLIT(UNIQUE(A2:A)&"~0|0","|");A2:A&"~"&COUNTIFS(A2:A,A2:A,ROW(A2:A),"<="&ROW(A2:A)),C2:C},2,FALSE)<>0,, [most of your previous formula])
用简单的英语来说,这会查找每个 ID 的最后一次出现。仅当最后一次出现的 Col C 中的值为 0 时,才会显示主公式的结果。
我将 SPLIT(UNIQUE(A2:A)&"~0|0","|")
堆叠在实际的 ID~Row, Col C
值之上,这样第一次出现的任何 ID 仍然会找到 0,并且不会导致错误。 (添加 IFERROR
会不必要地延长公式。)
注意 1:我在此 假设 您原来的“关闭”公式如您所愿。我没有在仔细检查下测试它。我只是将它插入到我的扩展公式中,该公式确定 放置结果的位置。
注意 2:通常,我不会在这些论坛上讨论复杂的公式,纯粹是为了时间和我一直很忙。但是你在这个论坛上帮了很多忙,所以我很高兴能在这里重新投资你自己的罕见查询。
鉴于特定的列集,我正在寻找一种方法,可以在 COUNTIF
过程中或之后将红色单元格变成空白单元格。
我用来获得(部分)正确答案的公式是:
=ARRAYFORMULA(IF(A2:A="",,IF(NOT(REGEXMATCH(TO_TEXT(B2:B), "\-")),
COUNTIFS(A2:A&D2:D, A2:A&D2:D, ROW(A2:A), "<="&ROW(A2:A)), )))
这是我的 sheet 的副本:- CC -
- 将黄色单元格视为 IDRESET/TERMINATION
- 每次重置后,ID 都会升级(E 列)
- E 列只是一个更好可视化的助手 - 它不是数据集的一部分
- 某列未排序,甚至可能未分组
当我复制你的sheet(提供的唯一选项)时,Col B 中的负数实际上都是文本。因此,我没有从 Col A 中的原始数据回溯到 best 方法。相反,我只是使用 Cols A:D,因为你目前拥有它们(尽管我怀疑您不需要助手)和您编写的原始“关闭”公式。
也就是说,这应该可以提供您想要的结果,如图所示:
=ArrayFormula({"DESIRED OUTPUT";IF(A2:A="",,IF(VLOOKUP(A2:A&"~"&COUNTIFS(A2:A,A2:A,ROW(A2:A),"<="&ROW(A2:A))-1,{SPLIT(UNIQUE(A2:A)&"~0|0","|");A2:A&"~"&COUNTIFS(A2:A,A2:A,ROW(A2:A),"<="&ROW(A2:A)),C2:C},2,FALSE)<>0,,IF(NOT(REGEXMATCH(TO_TEXT(B2:B), "\-")), COUNTIFS(A2:A&D2:D, A2:A&D2:D, ROW(A2:A), "<="&ROW(A2:A)), )))})
我的贡献是这部分:
IF(VLOOKUP(A2:A&"~"&COUNTIFS(A2:A,A2:A,ROW(A2:A),"<="&ROW(A2:A))-1,{SPLIT(UNIQUE(A2:A)&"~0|0","|");A2:A&"~"&COUNTIFS(A2:A,A2:A,ROW(A2:A),"<="&ROW(A2:A)),C2:C},2,FALSE)<>0,, [most of your previous formula])
用简单的英语来说,这会查找每个 ID 的最后一次出现。仅当最后一次出现的 Col C 中的值为 0 时,才会显示主公式的结果。
我将 SPLIT(UNIQUE(A2:A)&"~0|0","|")
堆叠在实际的 ID~Row, Col C
值之上,这样第一次出现的任何 ID 仍然会找到 0,并且不会导致错误。 (添加 IFERROR
会不必要地延长公式。)
注意 1:我在此 假设 您原来的“关闭”公式如您所愿。我没有在仔细检查下测试它。我只是将它插入到我的扩展公式中,该公式确定 放置结果的位置。
注意 2:通常,我不会在这些论坛上讨论复杂的公式,纯粹是为了时间和我一直很忙。但是你在这个论坛上帮了很多忙,所以我很高兴能在这里重新投资你自己的罕见查询。