Contar celdas utilizando la función contar.si

Estoy contando celdas con la función contar. Si. Cuento las celdas que tienen un valor mayor que cero. En este cuadro, cada celda equivale a una fecha, por lo que ese contar lo utilizo para ver los días en que hay datos. Lo utilizo para saber de cuantos dias hay dispersión de pedidos, el problema me surge cuando se queda un día atrás y el siguiente hay cero y el otro hay pedidos. En el ejemplo, en la segunda fila, no encuentro la forma de ver que el día 5/2 , a pesar de haber 0 pedidos, en la celda K6 debe haber un cuatro, pues hay pedidos con 4 días de antiguedad.

http://gyazo.com/a5dde4d629b8b18a2314bef765e883e7 

2 Respuestas

Respuesta
1

Quizás requieras usar una macro para ello, en el link tienes un ejemplo

http://www.programarexcel.com/2014/12/como-contar-valores-con-macro-funcion.html 

Acá te dejo un código que cuenta valores

Sub CuentaCeldas()
Application.ScreenUpdating = False
On Error Resume Next
DisplayAlerts = False
Dim uf As String
Dim fila As Integer
fila = 2
uf = Sheets("Hoja1").Range("A" & Rows.Count).End(xlUp).Row
Cells(25, "E") = Application.WorksheetFunction.Count(Range("A2" & ":B" & uf))
Range("B25").NumberFormat = "#,##0.00"
MsgBox ("Hay " & Cells(25, "E") & " valores en el rango"), vbInformation, "AVISO"
DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

Respuesta
1

Y por qué tampoco cuentas el día 8 de febrero.

Tal vez hay que cambiar la forma de contar.

¿Cuáles serían las condiciones?

A partir del último pedido, en este caso el del día 4 de febrero, contar el número de días, ¿hasta el día anterior a hoy?

Hola, en la primera fila tengo pedidos de dos días, eso es correcto, pero en la segunda tengo del 4 al 7, aunque el día 5 no hay pedidos, la dispersión sería de 4 días.

Las condiciones es saber la dispersión. La suma de pedidos pendientes es muy fácil y falta saber la dispersión (4 días en el segundo ejemplo).

Gracias por tu pronta respuesta.

Se me ha olvidado decirte que tengo una tabla en realidad con todo el mes, en el caso del ejemplo, el día 8 sería el actual que nunca hay del día en curso.

Estaba buscando la solución a tu pregunta, pero me dí cuenta de lo siguiente.

En tu primer ejemplo:

Tienes pedidos el 5feb y el 6feb. No tienes pedidos el 7feb, ¿la dispersión en este caso es de 3 días?, es decir 5feb + 6feb + 7feb?

En el segundo ejemplo:

Tienes pedidos el 4feb, 6feb y 7feb. dices que la dispersión es de 4 días: 4feb + 5feb + 6feb + 7feb?

En los 2 casos entre la fecha del primer pedido y el 8 de feb, falta un día con pedido, en el primer caso el día que no tiene pedido es el 7feb, en el segundo caso la fecha que no tiene pedido es el 5 de feb.

Si lo que te comento, no es el procedimiento para calcular la dispersión, entonces tienes explicarme cómo se hace el cálculo. Si puedes poner más ejemplos de dispersión y cómo cuentas los días para que me quede más claro, y entonces buscar una solución.

Si crees mejor enviarme un archivo con los ejemplos:

Mi correo

En el asunto del correo escribe tu nombre de usuario “juanjosear” y el título de esta pregunta.

Hola Dante, el fichero es mensual, por lo que las columnas a la derecha no cuentan ya que aún no tienen ni pueden tener datos hasta que llegue el día. Los pedidos son como máximo del día anterior.

La dispersión la mido teniendo en cuenta el número de días que tienen pedidos, en esta foto están todas filas bien excepto la 8 y la 10

http://gyazo.com/f3d8f2fb1b52219136bd555117a4f0f0 

La dispersión por cada día sería contar las celdas con datos.

En la fila 9 hay datos los días 4,5 y 6 de Febrero por lo que mi dispersión son tres días y sale perfectamente con la función contar.si (cuanto los mayores que cero)

En la fila 10 hay datos los días 4, 6 y 7 , pero aunque no exista ningún pedido del día 5, mi dispersión aquí es de cuatro días.

Las celdas que me están molestando aquí son la D8 y la F10.

Lo que necesitaría es poder contar esos ceros que están entre dos celdas con un dato mayor que cero

Te cambio la fórmula por una macro.

Function Dispersion(rango As Range)
'Por.Dante Amor
    una = True
    For Each c In rango
        If c.Value <> 0 Then
            If una Then ini = c.Column
            una = False
            fin = c.Column
        End If
    Next
    Dispersion = fin + 1 - ini
End Function


Sigue las Instrucciones para una Función
1. Abre tu libro de excel
2. Para abrir VBa y poder pegar la función, Presiona Alt + F11
3. En el menú elige Insertar / Módulo
4. En el panel del lado derecho copia la función
5. En cualquier celda utiliza la función, como cualquier otra función de excel

Cómo funciona: en la celda que quieras el resultado del conteo escribe la siguiente fórmula:

=Dispersion(B7:AC7)

La escribes como una fórmula de excel

=Dispersion(rango de celdas)

En el ejemplo, mis fechas están desde la columna B hasta la AC. Revisa, cómo en la fila 7 de mi ejemplo estoy poniendo la fórmula de Dispersion, abarcando el rango desde el 1Feb hasta el 28Feb.


Saludos. Dante Amor

Perfecto!. Funciona! .  Me gustaría comprender la macro. Me pierdo en el condicional.

            If una Then ini = c.Column
            una = False
            fin = c.Column

Va recorriendo el rango de celdas y cuando encuentra un valor distinto de cero salta a este condicional y pone el valor de la columna en una variable "ini". Entonces pasas "una" a false y a buscar el último valor distinto de cero que lo pasamos a fin.

Dispersion = fin + 1 - ini

Al final restamos el inicio (ini) a la celda final más 1 .

¿Es así?

UN MILLÓN DE GRACIAS

Lo que hago es poner en la variable "ini", el número de columna que tiene el primer valor diferente a 0. En ese momento "una" se convierte en falso, entonces cuando pregunta en el ciclo

if una then 

Como una es falso ya no asigna otra columna a "ini"

Después reviso todas las celdas, la última columna con valor quedará en la variable "fin".

Luego resto fin - ini y me da el número de columnas (Dispersión), le sumo uno para que considere la última celda.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas