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

时间:2015-11-05 19:09:40

标签: excel excel-formula

我无法将计数细胞与值'1'混合,直到前三个连续的空白细胞。以下图片为例:

enter image description here

是否可以仅使用Excel公式进行,还是必须使用其他代码?

3 个答案:

答案 0 :(得分:3)

你的问题不在于识别三个终止空白单元格,而是将最后三个空白单元格拖到2个单元格,然后是B:Z范围末尾的1个单元格。如果您可以将范围扩展到AA:AC中保证的空白单元格,那么您可以使用数组公式¹来完成“三空白单元格匹配”,并逐渐交错范围。

locate three blank cells

A2中的数组公式¹

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

根据需要填写。

  

计算值为'1'的单元格,直到前三个连续......

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

stagger three non-one consecutive cells

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))

enter image description here

这适用于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))

enter image description here

这个问题是它需要迭代计算,并且只有在开始迭代时才有效,范围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