Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 计数直到前三个连续的空白列_Excel_Excel Formula - Fatal编程技术网

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

Excel 计数直到前三个连续的空白列,excel,excel-formula,Excel,Excel Formula,我无法将值为“1”的计数单元格混合到前三个连续空白单元格中。下图为示例: 是否可以仅使用Excel公式或使用其他代码执行此操作?在单元格A2中输入此公式,然后根据需要向下复制: =COUNTA(OFFSET(B2,,,,-1+FIND("111",--(B2="")&--(C2="")&--(D2="")&--(E2="")&--(F2="")&--(G2="")&--(H2="")&--(I2="")&--(J2="")&

我无法将值为“1”的计数单元格混合到前三个连续空白单元格中。下图为示例:


是否可以仅使用Excel公式或使用其他代码执行此操作?

在单元格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<>"")
 )))
=COUNTA(偏移量(B2,,,,-1+FIND(“000”),
右(DEC2BIN(SUM(256,(LEN(B2:I2)>0)*2^{7,6,5,4,3,2,1,0}),8)&
右(DEC2BIN(和(256,(LEN(J2:Q2)>0)*2^{7,6,5,4,3,2,1,0}),8)&
右(DEC2BIN(SUM(256)(LEN(R2:Y2)>0)(2,6,5,4,3,2,1,0),8)及--(
)))
这是一个数组公式,必须用Ctrl+Shift+Enter确认


我认为对于这种类型的任务,大多数工作表函数都会变得非常混乱,然而,一种方法是这样的

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
=COUNT(间接)(R[0]C[1]:R[0]C[”&FIND(“0”),串联(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(K1:M1)、SUM(L1:N1)、SUM(M1:O1)、SUM(N1:P1)、SUM(O1)、SUM(O1:Q1)、SUM(P1:P1)、SUM)、SUM(Q1:S1)、SUM(Q1:S1)、SUM(S1:U1)、SUM(S1:V1)、SUM(S1:W1)、SUM(S1:X1)、SUM(S1:X1)、SUM(W1:X1)、SUM(W1:X1)、SUM(W1:X1)和W1:X1)(Y1:AA1)、和(Z1:AB1))、和“]”,假))

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

在A1中:
=COUNT(间接(“R[0]C[3]:R[0]C[”&B1&“]”,FALSE))

在B1中:
IF(C1>0,B1+1,B1)

在C1中:
=COUNT(间接(“R[0]C[”&B1-2&“]:R[0]C[”&B1&“]),FALSE))

问题是,它需要迭代计算,并且只有在范围B1的起始值为0时才有效。简化迭代重置的一种方法是使用如下开关

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

您的问题与其说是识别三个终止的空白单元格,不如说是将最后三个空白单元格拖到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)
=COUNTIF(B2:INDEX(B2:AA2, MATCH(1E+99, IF(B2:AA2<>1, IF(C2:AB2<>1, IF(D2:AC2<>1, 1E+99))), 0)), 1)
根据需要填写

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

如果计算1是首要任务,则公式可能更通用。只需将条件切换到非i的任意三个连续单元格即可

A2中的数组公式是

=COUNTIF(B2:INDEX(B2:AA2, MATCH(1E+99, IF(B2:AA2="", IF(C2:AB2="", IF(D2:AC2="", 1E+99))), 0)), 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)
=COUNTIF(B2:INDEX(B2:AA2,MATCH(1E+99,IF(B2:AA21,IF(C2:AB21,IF(D2:AC21,1E+99))),0),1)
根据需要填写。请注意,我已修改最后一行以显示更多匹配项



imk_数组公式需要使用Ctrl+Shift+Enter完成↵. 一旦正确输入第一个单元格,它们就可以像其他公式一样填充、复制或正确使用。

公式也可以,但我想这样做的方式不会太漂亮。我想最好的方式可能是宏。AA AB和AC列是否填充了,或者它们是否保证为空?Do It@Jeeped Post your answ呃。@findwindow-不知道你为Nike付出了努力。:)Tyvm感谢所有帮助:)@Jeeped我将使用比AC更多的列,但我只是将你的公式修改为更高的范围,TY.)真是太好了,把这些都打出来了!我知道这不在规范中,但是如果OP希望计数非空白单元格,你能使它仍然有效吗?你是说任意三个连续的非一个单元格?在不包含1的任意三个单元格处停止?OP最初声明*“计算值为“1”的单元格*。我不知道为什么其他人都在使用而不是。