如何计算单元格,直到值大于0?

时间:2019-05-10 10:30:31

标签: excel vba

在Excel中,我试图计算可预约的天数。

在下面的数据集中,我需要能够计数直到达到不为0的值。

我需要的结果是

  • 示例1 = 3
  • 示例2 = 5
  • 示例3 = 0

用简单的英语来说,我需要它检查是否将cell = 0进行计数,然后在cell不再= 0时停止计数

如果有一个最好的VBA解决方案,但不接受任何可行的方法。

            Example1    Example2   Example3
May 13 2019    0           0          2
May 14 2019    0           0          0
May 15 2019    0           0          6
May 16 2019    6           0          0
May 17 2019    0           0          3
May 20 2019    3           7          0
May 21 2019    6           14         0
May 22 2019    6           0          1
May 23 2019    12          14         0
May 24 2019    7           0          0

我尝试了多种方法,但是最接近的是下面的VBA,它在崩溃我的Excel之前似乎给出了正确的答案,所以我怀疑它算不上什么。

    Dim iCntr As Integer
    iCntr = 2
    Do While (Cells(iCntr, 3).Value) = 0
    Range("C13").Value = Application.WorksheetFunction.Count("C:C")
    Loop
End Sub

6 个答案:

答案 0 :(得分:3)

公式;

例如示例1,但是编辑返回示例2和3。

=MATCH(TRUE,INDEX($B$2:$B$11>0,0),0)-1

答案 1 :(得分:2)

也许最简单的方法是下一个公式:

=IFERROR(MATCH(0,B:B,1)-MATCH(0,B:B,0)+1;0)

假设我们正在处理B列上的数据。

答案 2 :(得分:1)

Function DAYS_UNTIL_APPOINTMENT(ByVal OnThisRange As Range) As Byte
Dim rng As Range


For Each rng In OnThisRange
    If rng.Value <> 0 Then
        Exit For
    Else
        DAYS_UNTIL_APPOINTMENT = DAYS_UNTIL_APPOINTMENT + 1
    End If
Next rng
End Function

enter image description here

请注意,仅当您选择1列数据时,此方法才有效。另外,我将其设置为Byte类型,因此,如果天数大于255,则将引发错误。只需将其更改为Integer

答案 3 :(得分:0)

赞:

Public Function count_zeroes(ByVal columnID As Long) As Long
    Dim i As Long: i = 1
    Dim cell As Range: Set cell = ActiveSheet.Cells(i, columnID)

    If Not IsEmpty(cell) Then
       Do Until cell <> 0 'we'll keep counting until cell <> 0 
           i = i + 1
           Set cell = ActiveSheet.Cells(i, columnID)
       Loop
    End IF

    count_zeroes = i - 1

End Function

enter image description here

答案 4 :(得分:0)

您可以按升序使用匹配公式=IF(B2<>0,0,MATCH(0,B2:B20,1))(编辑:已添加,如果在第一天可用的情况下不起作用)

答案 5 :(得分:0)

另一个选择是使用可在任何地方使用的数组公式(至少我认为可以)...

{=MIN(IF(B4:B13>0,ROW(B4:B13)-MIN(ROW(B4:B13)),""))}

enter image description here

请确保使用 Shift + Ctrl + Enter

进行提交