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
6 respuestas
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
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.
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
.
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)
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
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)),""))}
Asegúrese de confirmar usando Shift + Ctrl + Enter
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
Nuevas preguntas
excel
Solo para preguntas sobre programación contra objetos o archivos de Excel, o desarrollo de fórmulas complejas. Puede combinar la etiqueta de Excel con VBA, VSTO, C #, VB.NET, PowerShell, automatización OLE y otras etiquetas y preguntas relacionadas con la programación, si corresponde. La ayuda general con respecto a MS Excel para funciones de hoja de trabajo única está disponible en Super User.