答案 0 :(得分:3)
你的问题不在于识别三个终止空白单元格,而是将最后三个空白单元格拖到2个单元格,然后是B:Z范围末尾的1个单元格。如果您可以将范围扩展到AA:AC中保证的空白单元格,那么您可以使用数组公式¹来完成“三空白单元格匹配”,并逐渐交错范围。
A2中的数组公式¹是
=COUNTIF(B2:INDEX(B2:AA2, MATCH(1E+99, IF(B2:AA2="", IF(C2:AB2="", IF(D2:AC2="", 1E+99))), 0)), 1)
根据需要填写。
计算值为'1'的单元格,直到前三个连续......
如果计算公式是主要任务,公式可能更普遍。只需将条件切换到任何不是 i 的连续三个单元格。
A2中的数组公式¹是
=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↵完成。一旦正确输入第一个单元格,就可以像任何其他公式一样向下或向右填充或复制它们。
答案 1 :(得分:2)
在单元格A2中输入此公式,然后根据需要向下复制:
=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=""))))
<强>更新强>
这是一个工作方式相同的较短版本。无需额外的列:
=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 确认。
答案 2 :(得分:2)
我认为大多数工作表函数对于这种类型的任务会变得非常混乱,但是,你可以采用的一种方式就是这样......
=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.一种方法可以简化迭代重置,这样就可以使用这样的开关... < / p>
在B1中:=IF(B2="",IF(C1 > 0,B1+ 1,B1),0)
如果你能把它拉下来,VBA功能可能是你最好的选择。你可以建立这样的东西......
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