Excel - Promedio rango de fechas

 
Vista:
Imágen de perfil de Claudio

Promedio rango de fechas

Publicado por Claudio (17 intervenciones) el 14/03/2025 14:40:59
Buenos días estimados,

Tengo la siguiente consulta como obtener el promedio del rango de datos la ultima y penúltima fecha de la columna K. Ósea si tengo datos en la columna K con fecha 13-03-2025 y 12-03-2025 haga el promedio de los datos de esas fechas, pero si hay datos en la columna K con fecha 13-03-2025 y 11-03-2025 solo haga el promedio del dia 13-03-2025. El promedio debe ir en la celda M1

Anteriormente tenia en la macro la consulta del ultimo y penúltimo dato solamente sin tener en cuenta la fecha. Aqui compara los dos datos si el ultimo es menor toma ese dato si es mayor realizar el promedio.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Sub Cemento()
 
    Dim Valor_1 As Single, Valor_CALIZA As Single, _
 
    Dim Book_Moliend As Workbook, _
        Book_BBDD As Workbook, _
        Book_PREH As Workbook
 
    Dim Hoja_CalCto As Worksheet, _
        Hoja_Caliza As Worksheet, _
        Hoja_Cemento As Worksheet
 
    Dim Ruta_1      ' --- Fichero: MOLIENDA DE CEMENTO Y DESPACHOS FISICOS.xlsx
 
     Ruta_1 = "E:\Claudio\Cemento\"
 
    Application.ScreenUpdating = False
 
    Set Hoja_Cemento = ThisWorkbook.Sheets("CEMENTO")
 
    Set Book_PREH = Workbooks.Open(Ruta_1 + "PREHOMO.xlsx", ReadOnly:=False)
    Set Hoja_CalCto = Book_PREH.Sheets("CALIZA ADICIÓN CTO")
 
    ' ---  Busca la ultima fila con datos y captura el valor
 
    With Hoja_CalCto
        Fila = .Cells(4, "A").End(xlDown).Row
 
        Valor_1 = 0   ' --- Ultimo dato
        Valor_2 = 0   ' --- Penultimo dato
 
        While Valor_1 = 0 Or Valor_2 = 0
            If .Cells(Fila, "K") > 0 Then
                If Valor_1 = 0 Then
                    Valor_1 = .Cells(Fila, "K")
                Else
                    Valor_2 = .Cells(Fila, "K")
                End If
            End If
            Fila = Fila - 1
        Wend
    End With
    Book_PREH.Close
 
    ' ---&--- Si el ultimo es mayor toma el ultimo
 
    If Valor_1 < Valor_2 Then
        Valor_CALIZA = Valor_1
    Else
        Valor_CALIZA = (Valor_1 + Valor_2) / 2
    End If
 
    Hoja_Cemento.Range("M1") = Valor_CALIZA
 
End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Promedio rango de fechas

Publicado por Antoni Masana (2540 intervenciones) el 14/03/2025 16:35:42
Buenas,

Haces un comentario y no presentas ningún problema o cuestión.
De todas formas veo fallos en el While y en la condición siguiente.

Empecemos por el While
1º.- ¿Que pasa si no hay datos en la columna K? Debe tener en cuenta este detalle porque cuando Fila valga CERO dada un error.

2º.- Comentas que debe toma los datos de los dos últimos registros siempre y cuando las fecha sean consecutivas y no lo hace.

Debería hacer esto suponiendo que la fecha esta en la columna A y la cabecera en la fila 1

1
2
3
4
5
6
7
8
9
10
11
    '
        While Fila > 1 and Valor_1 = 0
            If .Cells(Fila, "K") > 0 Then
                If Valor_1 = 0 Then
                    Valor_1 = .Cells(Fila, "K")
                    Valor_2 = .Cells(Fila, "K")
                    IF .Cells(Fila, "A") - 1 = .Cells(Fila - 1, "A") Then Valor_2 = .Cells(Fila - 1, "K")
                End If
            End If
            Fila = Fila - 1
        Wend

3º.- En la condición dices que tomas el último valor si es mayor que el penúltimo. Pues esta mal. La primera vez que encuentre un valor en la columna K, que es el último de la columna, lo asigna a Valor_1 y el siguiente, el penúltimo, a Valor_2 por consiguiente en el IF debe poner:

1
2
3
4
5
6
7
    ' ---&--- Si el ultimo es mayor toma el ultimo
 
     If Valor_1 > Valor_2 Then
        Valor_CALIZA = Valor_1
    Else
        Valor_CALIZA = (Valor_1 + Valor_2) / 2
    End If

En el caso de que no las fechas no sean consecutivas y Valor_1 no sea mayor debe tomar el valor del último que al hacer la media ya sale.

Otra forma de hacerlo es así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    '
        While Fila > 1 and Valor_1 = 0
            If .Cells(Fila, "K") > 0 Then
                If Valor_1 = 0 Then
                    Valor_1 = .Cells(Fila, "K")
                    IF .Cells(Fila, "A") - 1 = .Cells(Fila - 1, "A") Then Valor_2 = .Cells(Fila - 1, "K")
                End If
            End If
            Fila = Fila - 1
        Wend
....
    ' ---&--- Si el ultimo es mayor toma el ultimo
 
     If Valor_1 > Valor_2 or Valor_2 = 0Then
        Valor_CALIZA = Valor_1
    Else
        Valor_CALIZA = (Valor_1 + Valor_2) / 2
    End If

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Claudio

Promedio rango de fechas

Publicado por Claudio (17 intervenciones) el 14/03/2025 16:42:25
Buenos días estimado Antoni,

El código que envíe tiene relacion con ultimo y penúltimo dato solamente sin tener en cuenta la fecha. Aquí compara los dos datos si el ultimo es menor toma ese dato si es mayor realizar el promedio.

Ahora me solicitaron es que tome el promedio de datos de la ultima fecha mas fecha anterior.

Ejemplo si tengo datos en la columna K del libro PREHOMO.xlsx hoja CALIZA ADICIÓN CTO con fecha 13-03-2025 y 12-03-2025 haga el promedio de los datos de esas fechas, pero si hay datos en la columna K con fecha 13-03-2025 y 11-03-2025 solo haga el promedio del dia 13-03-2025. El promedio debe ir en la celda M1

Si en la columna K no hay datos que quede en vacio.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Claudio

Promedio rango de fechas

Publicado por Claudio (17 intervenciones) el 17/03/2025 14:01:05
Buenas días estimado Antoni,

Me podría ayudar con el siguiente tema: Dosificadores de crudo

' ===================================================================
' ===== PASO 2 ===== Copia Datos de CORRECTOR a DOSIFICCION =====
' ===================================================================

Dosificador

En este paso como podríamos hacer que en caso de solo publiquen la humedad, tome todos los valores anteriores, osea en la imagen para el dia 4 esta solo publicada la humedad y cuando ejecuto la macro me deja los valores en blanco, lo que quiero es que si pasa este caso tome los valores por ejemplo del dia anterior. Para este caso los del dia 1. (Es para todos los correctores)

Ahora el otro detalle en la humedad ' ---&--- DOSIFICADORA PREHOMO

Humedad-Prehomo

Recuerda que le comente que tomara el ultimo dato pero resulta que segun la columna C (Origen) esta discriminado por crudo 1 y crudo 2 ose que la celda K12 y K13 de la hoja Dosificación irían las humedades (ultimo dato)de crudo1 y crudo 2 respectivamente.

Saludos y un fuerte abrazo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Claudio

Promedio rango de fechas

Publicado por Claudio (17 intervenciones) el 15/03/2025 12:49:57
Buenos dias estimado Antoni.

Condiciones ultimos datos de la columna K

Si no hay datos que tome el valor de 35
Si hay solo un dato que tome ese valor
De lo contrario que haga el promedio de los datos.

Casos

Promedio1

Hace el promedio del los dias 4 y 5 respectivamente

Promedio2

Hace solo el promedio del dia 10

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar