【问题标题】:Alternating Cycle (T)op/(B)ottom Sequence交替循环(顶部/(底部序列
【发布时间】:2019-09-17 16:05:57
【问题描述】:

需要一个数组公式或一个向下拖动的列,以显示每个规则集的交替序列。规则集和详细示例在此处的附加链接中。

https://docs.google.com/spreadsheets/d/1Sdi1jFpBKF2RJeqWNjLybVcwR0G6hvozZZTvcTK1xis/edit?usp=sharing

【问题讨论】:

    标签: google-sheets match google-sheets-formula array-formulas gs-vlookup


    【解决方案1】:

    让单元格 E79 为:

    =IF(E79>55, "T", 
     IF(E79<45, "B",
     LOOKUP(MIN(MAX(INDEX(E2:E78,
     MATCH(1,INDEX((E2:E78>55)+(E2:E78<45)*(E2:E78<>""), ), 0)), 45), 55), 
     {45,55}, {"B", "T"})))
    


    将其粘贴到单元格 E78 中并向上拖动:

    =IF(((E78<55)*(E78>45))*((E79<55)*(E79>45)),, 
     IF((QUERY({F79:F},"where Col1 is not null limit 1", 0)="T")*(E78<=55)*(E79>=45), "B", 
     IF((QUERY({F79:F},"where Col1 is not null limit 1", 0)="B")*(E78> 45)*(E79< 55), "T", )))
    


    将此粘贴​​到 G2 单元格中:

    =ARRAYFORMULA(INDEX(SORT({VLOOKUP(ROW(
     INDIRECT("F2:F"&MAX(IF(F2:F<>"", ROW(F2:F), )))), IF(INDEX(SORT({
     INDIRECT("F2:F"&MAX(IF(F2:F<>"", ROW(F2:F), ))), ROW(
     INDIRECT("F2:F"&MAX(IF(F2:F<>"", ROW(F2:F), ))))}, 2, 0),,1)<>"", {ROW(
     INDIRECT("F2:F"&MAX(IF(F2:F<>"", ROW(F2:F), )))),INDEX(SORT({
     INDIRECT("F2:F"&MAX(IF(F2:F<>"", ROW(F2:F), ))), ROW(
     INDIRECT("F2:F"&MAX(IF(F2:F<>"", ROW(F2:F), ))))}, 2, 0),,1)}), 2, 1), ROW(
     INDIRECT("F2:F"&MAX(IF(F2:F<>"", ROW(F2:F), ))))}, 2, 0),,1))
    


    并将其粘贴到 H2 单元格中:

    =ARRAYFORMULA(
     IF(G2:G="T", IFERROR(VLOOKUP(C2:C, {QUERY(TRANSPOSE(QUERY(TRANSPOSE(QUERY(
     SPLIT(TRANSPOSE(SPLIT("♦"&QUERY(IF(G2:G="T", C2:C, )&
     IF(F2:F<>"", "♦", ),,999^99), "♦")), " ")*1, "where Col1 is not null", 0)),
     "select "&TEXTJOIN(",", 1, IF(LEN(FILTER(F2:F, F2:F="T")), 
     "max(Col"&ROW(F2:F)-ROW(F2)+1&")", ))&"")), "select Col2"), 
     FILTER(F2:F, F2:F="T")}, 2, 0)), 
     IF(G2:G="B", IFERROR(VLOOKUP(D2:D, {QUERY(TRANSPOSE(QUERY(TRANSPOSE(QUERY(
     REGEXREPLACE(TO_TEXT(
     SPLIT(TRANSPOSE(SPLIT("♦"&QUERY(IF(G2:G="B", D2:D, )&
     IF(F2:F<>"", "♦", ),,999^99), "♦")), " ")*1), "^0$", "999999999")*1, 
     "where Col1 is not null", 0)), "select "&TEXTJOIN(",", 1, 
     IF(LEN(FILTER(F2:F, F2:F="B")), 
     "min(Col"&ROW(F2:F)-ROW(F2)+1&")", ))&"")), "select Col2"), 
     FILTER(F2:F, F2:F="B")}, 2, 0)), )))
    


    spreadsheet demo

    【讨论】:

    • 据我所知,这非常有效。太棒了!!!几个月来我一直在寻找帮助,你破解了密码。非常感谢!当我有能力时,我该如何回报?
    • 嗯...猜猜我们还没有走出困境。请问您介意故障排除吗?似乎使用不同的数据集,就像我在新工作表选项卡“第二次尝试的副本 2”中使用的那样,它正在加倍。我只注意到“T”按顺序显示两次时发生了这种情况。
    • 在工作表标签“第二次尝试的副本 3”中不确定是什么导致了双“T”?
    • 现在完美了!!!我几乎不敢相信。几个月来一直试图解决这个问题。我进行了测试,经过 300 个样本后它完美无缺。 99% 肯定我不需要你再看一遍。谢谢!保重。
    【解决方案2】:
    =ARRAYFORMULA(IF(IFERROR(VLOOKUP(INDIRECT("C2:C"&COUNTA(C2:C)), 
     MIN(FILTER(C2:C, D2:D<45, D2:D<>"")), 1, 0))<>"", "B", ))
    

    【讨论】:

    • 如果下一个要搜索的数组公式我非常不熟悉,是否允许继续:“E 行中最后一个单元格等于“B”和下一个数字之间的最高价格等于 的 D 行
    • 祝你有美好的一天!好的,所以我创建了另一个名为“第二次尝试”的工作表选项卡。我已经详细说明了尽可能提供帮助。这个公式让我困惑了很长时间,并且一直是我延迟完成我的项目的原因。非常感谢您对此的帮助!谢谢!
    • 如果这可以作为一个数组公式来完成,那么所有的权力都归你所有。在最后几篇文章中,您让我看到了数组公式。我不知道可以用他们做这么多。如果不能作为数组完成,那就这样吧。我只需要尝试尽快让它工作。再次感谢!!!
    • 是的,但是用 J8 和 J9 编写的重叠规则解释说,对于 45-55 的中间范围,它还需要考虑到 T&B。它必须是这样,因为我需要包括中间范围。如果第一个(>55 或 =45 或先验是“B”且
    • 我在 G31 单元格的注释中放置了详细的细分。 .这肯定是一个谜。仅当您了解循环上下波动时才有意义,有时会在中间范围内切换,我们仍然需要 T 或 B。非常感谢您的宝贵时间。这对我来说是一个巨大的帮助。
    猜你喜欢
    • 1970-01-01
    • 2021-05-20
    • 2010-09-18
    • 2021-04-02
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多