【问题标题】:Count continuous cell vallues and reset the count if the cell value changes计算连续单元格值并重置单元格值更改的计数
【发布时间】:2019-08-24 05:43:11
【问题描述】:

在 Excel 或 Google 表格中,我想实现类似习惯跟踪器的功能。

例如:假设 X 想连续锻炼 30 天。

他将输入他是否在特定日期进行了锻炼,通过输入是表示进行锻炼,输入否表示不进行锻炼。

我只想数连续“是”的次数。

如果他在一天之间输入“否”,那么他接下来输入的任何“是”都会从 0 开始计数。

我需要在第一行显示连续日期的计数。 例如,如果他做了 10 天的练习,我想将其显示在最上面一行,以便最终用户在需要时可以一目了然地看到计数。

希望我清楚。

注意:最终用户不会在每个单元格中输入公式来计算计数。 我想输入公式,而且也只输入一次。它应该独立于行。

【问题讨论】:

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


    【解决方案1】:

    您需要创建一个将当前值与 'yes' 进行比较的公式,如果是 TRUE,则进行增量,如果不设置为 0。

    下面是C3 单元格中的公式示例,假设您在B 列中有是/否:

    =IF(B3="yes", C2+1, 0)
    

    如果您只需要最后一个值,则在D1 中输入以下公式,例如:

    =INDEX(B:C,COUNTA(B:B),2)
    

    【讨论】:

    • 最终用户不会在每个单元格中输入公式来计算计数。我想输入公式,而且也只输入一次。它应该独立于行。
    • 您只输入一次公式并将其分布在所有行中。这是1次操作,只需复制带有功能的单元格,选择一行并使用Paste Special -> Formula。然后,如果不需要,您可以隐藏此列。公式相当容易理解,所以我相信这个解决方案非常简单且可维护
    【解决方案2】:

    这是 google 表格中的一个示例,灵感来自 this 帖子:

    C2中的公式:

    =ARRAYFORMULA(IF(B2:B32="Yes",MMULT(N(ROW(B2:B32)>=TRANSPOSE(ROW(B2:B32))),N(B2:B32="Yes"))-HLOOKUP(0,MMULT(N(ROW(B2:B32)>TRANSPOSE(ROW(B2:B32))),N(B2:B32="Yes")),MATCH(VLOOKUP(ROW(B2:B32),IF(N(B2:B32<>B1:B31),ROW(B2:B32),),1,TRUE),VLOOKUP(ROW(B2:B32),IF(N(B2:B32<>B1:B31),ROW(B2:B32),),1,TRUE),0),FALSE),))
    

    只能输入一个公式。

    并使其行独立(无论天数):

    =ArrayFormula(IF(B2:index(B:B,counta(A:A))="Yes",MMULT(N(ROW(B2:index(B:B,counta(A:A)))>=TRANSPOSE(ROW(B2:index(B:B,counta(A:A))))),N(B2:index(B:B,counta(A:A))="Yes"))-HLOOKUP(0,MMULT(N(ROW(B2:index(B:B,counta(A:A)))>TRANSPOSE(ROW(B2:index(B:B,counta(A:A))))),N(B2:index(B:B,counta(A:A))="Yes")),MATCH(VLOOKUP(ROW(B2:index(B:B,counta(A:A))),IF(N(B2:index(B:B,counta(A:A))<>B1:index(B:B,counta(A:A)-1)),ROW(B2:index(B:B,counta(A:A))),),1,TRUE),VLOOKUP(ROW(B2:index(B:B,counta(A:A))),IF(N(B2:index(B:B,counta(A:A))<>B1:index(B:B,counta(A:A)-1)),ROW(B2:index(B:B,counta(A:A))),),1,TRUE),0),FALSE),))
    

    或者,如果您不关心电子表格的速度:

    =ArrayFormula(IF(B2:B="Yes",MMULT(N(ROW(B2:B)>=TRANSPOSE(ROW(B2:B))),N(B2:B="Yes"))-HLOOKUP(0,MMULT(N(ROW(B2:B)>TRANSPOSE(ROW(B2:B))),N(B2:B="Yes")),MATCH(VLOOKUP(ROW(B2:B),IF(N(B2:B32<>B1:B),ROW(B2:B),),1,TRUE),VLOOKUP(ROW(B2:B),IF(N(B2:B<>B1:B),ROW(B2:B),),1,TRUE),0),FALSE),))
    

    如果您对最后一个“是”序列的最后一个值感兴趣,您可以使用此公式检索该值:

    =INDEX(C:C,MATCH(9.99E+307,C:C))
    

    【讨论】:

    • 谢谢@JvdV,我怎样才能得到最后的计数并将其显示在第一行?
    • 你的意思是值 4?
    • 是的,在我们的例子中是 4。它可以是实时的其他任何东西。
    • 您可以构建一些公式来检索除“”之外的最后一个值
    • 我应该使用哪个公式?
    【解决方案3】:
    =ARRAYFORMULA(QUERY(IF(INDIRECT("B2:B"&COUNTA(B2:B)+1)="Yes", 
     MMULT(N(ROW(INDIRECT("B2:B"&COUNTA(B2:B)+1))>=
     TRANSPOSE(ROW(INDIRECT("B2:B"&COUNTA(B2:B)+1)))), 
     N(INDIRECT("B2:B"&COUNTA(B2:B)+1)="Yes"))-HLOOKUP(0, 
     MMULT(N(ROW(INDIRECT("B2:B"&COUNTA(B2:B)+1))>
     TRANSPOSE(ROW(INDIRECT("B2:B"&COUNTA(B2:B)+1)))), 
     N(INDIRECT("B2:B"&COUNTA(B2:B)+1)="Yes")), MATCH(
     VLOOKUP(ROW(INDIRECT("B2:B"&COUNTA(B2:B)+1)), 
     IF(N(INDIRECT("B2:B"&COUNTA(B2:B)+1)<>B1:B), 
     ROW(INDIRECT("B2:B"&COUNTA(B2:B)+1)), ), 1, 1),
     VLOOKUP(ROW(INDIRECT("B2:B"&COUNTA(B2:B)+1)), 
     IF(N(INDIRECT("B2:B"&COUNTA(B2:B)+1)<>B1:B), 
     ROW(INDIRECT("B2:B"&COUNTA(B2:B)+1)), ), 1, 1), 0), 0), ), 
     "where Col1 is not null offset "&COUNTIF(B2:B, "yes")-1, 0))
    


    =ARRAYFORMULA(QUERY(IF(INDIRECT("B2:B"&COUNTA(B2:B)+1)="Yes", 
     MMULT(N(ROW(INDIRECT("B2:B"&COUNTA(B2:B)+1))>=
     TRANSPOSE(ROW(INDIRECT("B2:B"&COUNTA(B2:B)+1)))), 
     N(INDIRECT("B2:B"&COUNTA(B2:B)+1)="Yes"))-HLOOKUP(0, 
     MMULT(N(ROW(INDIRECT("B2:B"&COUNTA(B2:B)+1))>
     TRANSPOSE(ROW(INDIRECT("B2:B"&COUNTA(B2:B)+1)))), 
     N(INDIRECT("B2:B"&COUNTA(B2:B)+1)="Yes")), MATCH(
     VLOOKUP(ROW(INDIRECT("B2:B"&COUNTA(B2:B)+1)), 
     IF(N(INDIRECT("B2:B"&COUNTA(B2:B)+1)<>B1:B), 
     ROW(INDIRECT("B2:B"&COUNTA(B2:B)+1)), ), 1, 1),
     VLOOKUP(ROW(INDIRECT("B2:B"&COUNTA(B2:B)+1)), 
     IF(N(INDIRECT("B2:B"&COUNTA(B2:B)+1)<>B1:B), 
     ROW(INDIRECT("B2:B"&COUNTA(B2:B)+1)), ), 1, 1), 0), 0), 0), 
     "offset "&COUNTIF(B2:B, "<>")-1, 0))
    

    【讨论】:

    • 因为最后没有,所以count应该变成0
    • 如果我将起始行移至 3,则会出现空输出错误的查询完成
    猜你喜欢
    • 2018-07-31
    • 2023-02-05
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    相关资源
    最近更新 更多