在Excel中,我试图计算可预约的天数。
在下面的数据集中,我需要能够计数直到达到不为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
答案 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
请注意,仅当您选择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
答案 4 :(得分:0)
您可以按升序使用匹配公式=IF(B2<>0,0,MATCH(0,B2:B20,1))
(编辑:已添加,如果在第一天可用的情况下不起作用)
答案 5 :(得分:0)