En Excel estoy tratando de contar la cantidad de días hasta que una cita esté disponible.

En el conjunto de datos a continuación, necesito poder contar hasta que se alcance un valor que no sea 0.

El resultado que necesito es

  • Ejemplo 1 = 3
  • Ejemplo 2 = 5
  • Ejemplo 3 = 0

En inglés simple, lo necesito para verificar si la celda = 0 si es así, contarlo y dejar de contar cuando la celda ya no sea = 0

Si hay una solución de VBA, sería mejor, pero aceptaré cualquier cosa que funcione.

            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

He probado varios métodos, sin embargo, el más cercano que obtuve fue con el VBA a continuación, que parece dar la respuesta correcta antes de bloquear mi excel, así que sospecho que está contando algo que no debería.

    Dim iCntr As Integer
    iCntr = 2
    Do While (Cells(iCntr, 3).Value) = 0
    Range("C13").Value = Application.WorksheetFunction.Count("C:C")
    Loop
End Sub
1
RachKay 10 may. 2019 a las 13:30

6 respuestas

La mejor respuesta
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

Tenga en cuenta que esto solo funcionará si selecciona 1 columna de datos. Además, lo hice del tipo Byte, por lo que si el número de días es superior a 255, generará un error. Simplemente cámbielo a Integer si lo necesita.

1
Foxfire And Burns And Burns 10 may. 2019 a las 10:52

Quizás la forma más simple es la siguiente fórmula:

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

Suponiendo que estamos tratando con datos en la columna B.

2
Pspl 10 may. 2019 a las 10:52

Puede usar una fórmula de coincidencia =IF(B2<>0,0,MATCH(0,B2:B20,1)) con orden ascendente (editar: agregado si esto no funciona si el primer día está disponible)

0
Tom Navidi 10 may. 2019 a las 10:51

Así:

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

0
Rawrplus 10 may. 2019 a las 11:01

Otra opción más que usa una fórmula de matriz que funciona en cualquier lugar (al menos eso creo) ...

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

enter image description here

Asegúrese de confirmar usando Shift + Ctrl + Enter

0
Skin 10 may. 2019 a las 11:16

Fórmula;

Por ejemplo 1 pero la edición devuelve los ejemplos 2 y 3.

=MATCH(TRUE,INDEX($B$2:$B$11>0,0),0)-1
3
MrRightSA 10 may. 2019 a las 10:54