0

我的数据如下所示。我想计算连续的空白单元格,除了开头和结尾的空白单元格。我的逻辑是返回最大值。对于下面的情况,返回值应该是 2,而不是 5。

在此处输入图像描述

4

2 回答 2

0

您可以使用以下标准通过公式执行此操作:

  • IsBlank(cell) :单元格本身应该是空白的。
  • IsBlank(cell.Offset(0,-1)) :左边的单元格应该是空白的(为了不计算系列的开头)
  • IsBlank(cell.Offset(0,1)) :右边的单元格应该是空白的(为了不计算系列的结尾)
  • cell.Col <> 1 :为了不计算工作表的开头
  • IsBlank(cell.Offset(-1,1)) :为了不计算最右边的空白单元格
于 2020-06-01T15:23:06.990 回答
0

对于第 3 行

假设我们对从C3J3的连续空白感兴趣:

在此处输入图像描述

我们可以用“帮助”行标记连续的空白,在D4中输入:

=IF(AND(D3="",OR(C3="",E3="")),"X","")

并将其复制到单元格I4

然后在另一个单元格中输入:

=COUNTIF(C4:J4,"=X")

在此处输入图像描述

如果您使用 VBA 用户定义函数,我们可以避免“帮助”行:

Option Explicit
Public Function consecb(rng As Range) As Long
    Dim nFirst As Long, nLast As Long, i As Long
    Dim roww As Long

    nFirst = rng.Find(what:="*", after:=rng(1)).Column
    nLast = rng.Find(what:="*", after:=rng(1), searchdirection:=xlPrevious).Column
    roww = rng.Row

    For i = nFirst + 1 To nLast - 1
        If Cells(roww, i) = "" And (Cells(roww, i - 1) = "" Or Cells(roww, i + 1) = "") Then
            consecb = consecb + 1
        End If
    Next i

End Function

在工作表中,您可以像这样使用它:

=consecb(3:3)
于 2020-06-01T12:52:34.390 回答