Как считать ячейки, пока значение не станет больше 0? - PullRequest
1 голос
/ 10 мая 2019

В Excel я пытаюсь подсчитать количество дней, пока не будет назначена встреча.

в приведенном ниже наборе данных мне нужно иметь возможность считать, пока не будет достигнуто значение, не равное 0.

результат, который мне нужен,

  • Пример 1 = 3
  • Пример 2 = 5
  • Пример 3 = 0

В простом английском мне нужно, чтобы он проверил, если ячейка = 0, если это так, посчитать его, и прекратить считать, когда ячейка больше не = 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 ]

3 голосов
/ 10 мая 2019

Формула;

Например, 1, но редактирование возвращает примеры 2 и 3.

=MATCH(TRUE,INDEX($B$2:$B$11>0,0),0)-1
2 голосов
/ 10 мая 2019

Возможно, самый простой способ - следующая формула:

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

Предполагается, что мы имеем дело с данными в столбце B.

1 голос
/ 10 мая 2019
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, если вам это нужно.

0 голосов
/ 10 мая 2019

Еще один вариант, использующий формулу массива, которая работает где угодно (по крайней мере, я так думаю) ...

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

enter image description here

Убедитесь, чтосовершить, используя Shift + Ctrl + Enter

0 голосов
/ 10 мая 2019

вы можете использовать формулу соответствия =IF(B2<>0,0,MATCH(0,B2:B20,1)) в порядке возрастания (правка: добавлено, если не работает, если доступен первый день)

0 голосов
/ 10 мая 2019

Как это:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...