计数,直到前三个连续的空白列

混合计数单元格的值为1,直到前三个连续空白单元格出现问题。 以下图片为例:

在这里输入图像说明

是否有可能只使用Excel公式,或者我必须使用其他代码?

你的问题不是那么多的确定三个终止的空白单元格作为尾部的三个空白单元格closures到2个单元格然后1个单元格在B:Z范围的结尾。 如果可以将范围扩大到保证AA:AC中的空白单元格,则可以使用数组公式1来完成具有逐渐交错范围的“三空白单元匹配”。

找到三个空白单元格

A2中的数组公式1是,

=COUNTIF(B2:INDEX(B2:AA2, MATCH(1E+99, IF(B2:AA2="", IF(C2:AB2="", IF(D2:AC2="", 1E+99))), 0)), 1) 

根据需要填写。

计数值为1的单元格,直到前三个连续的…

如果计数是最主要的任务,那么这个公式可能更具普遍性。 只需将条件切换到任何三个不是i的连续单元格。

错开三个非连续的单元格

A2中的数组公式1是,

 =COUNTIF(B2:INDEX(B2:AA2, MATCH(1E+99, IF(B2:AA2<>1, IF(C2:AB2<>1, IF(D2:AC2<>1, 1E+99))), 0)), 1) 

根据需要填写。 请注意,我修改了最后一行以显示更多匹配。


¹ 数组公式需要使用Ctrl + Shift + Enter 来完成。 一旦正确input第一个单元格,就可以像其他任何公式一样向下或向右填充或复制它们。

我认为大多数工作表函数对于这种types的任务会变得非常混乱,但是,你可以采取的一种方式是这样的…

=COUNT(INDIRECT("R[0]C[1]:R[0]C[" & FIND("0",CONCATENATE(SUM(B1:D1),SUM(C1:E1), SUM(D1:F1), SUM(E1:G1), SUM(F1:H1), SUM(G1:I1), SUM(H1:J1), SUM(I1:K1), SUM(J1:L1), SUM(K1:M1), SUM(L1:N1), SUM(M1:O1), SUM(N1:P1), SUM(O1:Q1), SUM(P1:R1), SUM(Q1:S1), SUM(R1:T1), SUM(S1:U1), SUM(T1:V1), SUM(U1:W1), SUM(V1:X1), SUM(W1:Y1), SUM(X1:Z1), SUM(Y1:AA1), SUM(Z1:AB1))) & "]",FALSE))

在这里输入图像描述

这适用于列A到Z,当然,它最终很长。 或者,如果您启用迭代计算,那么表格中有更多的选项,那么您可以使用类似这样的东西。

在A1: =COUNT(INDIRECT("R[0]C[3]:R[0]C[" & B1 & "]", FALSE))
在B1: IF(C1 > 0,B1+ 1,B1)
在C1: =COUNT(INDIRECT("R[0]C[" & B1 - 2 & "]:R[0]C[" & B1 & "]",FALSE))

在这里输入图像描述

这个问题是它需要迭代计算,只有当它开始迭代,范围B1的起始值为0时才有效。可以简化迭代重置的一种方法是使用像这样的开关…

在B1: =IF(B2="",IF(C1 > 0,B1+ 1,B1),0)

一个VBAfunction可能是你最好的select,如果你可以把它closures。 你可以build立这样的东西…

 Function CountBeforeBlanks(R As Range) For i = 1 To R.Count CountBeforeBlanks = CountBeforeBlanks + R(i) If Application.WorksheetFunction.Count(R(i), R(i + 1), R(i + 2)) = 0 Then Exit Function End If Next End Function 

在单元格A2中input此公式,然后根据需要向下复制:

 =COUNTA(OFFSET(B2,,,,-1+FIND("111",--(B2="")&--(C2="")&--(D2="")&--(E2="")&--(F2="")&--(G2="")&--(H2="")&--(I2="")&--(J2="")&--(K2="")&--(L2="")&--(M2="")&--(N2="")&--(O2="")&--(P2="")&--(Q2="")&--(R2="")&--(S2="")&--(T2="")&--(U2="")&--(V2="")&--(W2="")&--(X2="")&--(Y2="")&--(Z2="")))) 

UPDATE

这是一个更短的版本,以相同的方式工作。 不需要额外的列:

 =COUNTA(OFFSET(B2,,,,-1+FIND("000", RIGHT(DEC2BIN(SUM(256,(LEN(B2:I2)>0)*2^{7,6,5,4,3,2,1,0})),8)& RIGHT(DEC2BIN(SUM(256,(LEN(J2:Q2)>0)*2^{7,6,5,4,3,2,1,0})),8)& RIGHT(DEC2BIN(SUM(256,(LEN(R2:Y2)>0)*2^{7,6,5,4,3,2,1,0})),8)&--(Z2<>"") ))) 

这是一个数组公式,并且必须用Ctrl + Shift + Enter确认