对出现在具有其他值的单元格之间的具有特定值的单元格进行计数

Count cells with certain values which appear between cells with other values

我在 Excel 中有一排数字模式(每个数字在不同的单元格中),如下所示。

1 0 0 0 2 0 0 1 0 0 0 0 0 3 0 0 0 0 0 0 0 0 2 0 0 0 1

(我的行有 300 个单元格)。

定义:

我要计算:

我尝试了不同的 Excel 公式,例如:

=ABS(MATCH(D13, B2:B11, 0)-MATCH(D14, B2:B11, 0))-1

此公式不适用于具有相同值的标记值("D13"、"D14")。它也不会计算超过一个 0 序列。

任何提示,最好没有 VBA,将不胜感激。

假设您的值在 A1:AA1 中并且外部值是 <> 0:

获得正确频率的核心:

=FREQUENCY(IF(B1:Z1=0,COLUMN(B1:Z1)),IF(B1:Z1=0,"",COLUMN(B1:Z1)))

这将计算为一组数字 > 3,2,5,8,3

  • 序列计数(在我的示例中返回到 B3):

    =TEXTJOIN(",",1,FREQUENCY(IF(B1:Z1=0,COLUMN(B1:Z1)),IF(B1:Z1=0,"",COLUMN(B1:Z1)))
    
  • 最小序列(在B4中返回):

    =MIN(FREQUENCY(IF(B1:Z1=0,COLUMN(B1:Z1)),IF(B1:Z1=0,"",COLUMN(B1:Z1))))
    
  • 最大序列(返回到B5):

    =MAX(FREQUENCY(IF(B1:Z1=0,COLUMN(B1:Z1)),IF(B1:Z1=0,"",COLUMN(B1:Z1))))
    
  • 每个频率的计数(返回B5:B13):

    =COUNT(FILTERXML("<t><s>"&SUBSTITUTE(B,",","</s><s>")&"</s></t>","//s[.='"&ROW(A1)&"']"))
    

或者,如果您没有选择对 B3 使用 TEXTJOIN

=SUM(IF(FREQUENCY(IF(B:Z=0,COLUMN(B:Z)),IF(B:Z=0,"",COLUMN(B:Z)))=ROW(A1),1,0))

往下拉...

注意:这些公式都是通过CtrlShift[=57=数组输入的]输入


如您所见,我通过设置返回值的方式对您的查询进行了一些修改。

如果你愿意等一会儿,我相信有人能想出更简单的东西(也许 Excel O365 及其 DA 函数)