Macro para seleccionar datos horarios y calcular promedio

La macro tendría que seleccionar de una planilla de datos climáticos, que vienen por minuto o por hora, depende la estación, el dato máximo, mínimo y un promedio por cada variable, y por cada día, por ejemp

                                Temp      Hum  Vto etc

1/1/11 12:00            xx         xx         xxx

1/1/11 12:30            xx           xx       xx  

...

2 Respuestas

Respuesta
1

Puedes poner una imagen con datos reales de lo que tienes y en otra imagen el resultado que esperas.

Procura que en la imágenes se vean las filas y las columnas de la hoja de excel. Después explica qué es lo que necesitas.

Los datos originales son estos:

Y necesito 

y esto 

Vamos a resolver primero la hoja "Auxiliar"

Me tienes que explicar con un par de ejemplos, cómo pasas los datos de la hoja "01-11" a la hoja "auxiliar".

Los paso a la hoja auxiliar seleccionando solamente los datos cdo la hora termina en "00:00", es decir pao solamente los datos horarios, y selecciono solamente los campo Día, hora, Temperatura, Max, Min Viento y Vto Max. Esta es la Macro

ultimaFila = Sheets("01-11").Range("B" & Rows.Count).End(xlUp).Row
If ultimaFila < 3 Then
Exit Sub
End If
For cont = 4 To ultimaFila
If Sheets("01-11").Cells(cont, 2) Like palabraBusqueda Then
dia = Sheets("01-11").Cells(cont, 1)
Hora = Sheets("01-11").Cells(cont, 2)
Temp = Sheets("01-11").Cells(cont, 3)
Max = Sheets("01-11").Cells(cont, 4)
Min = Sheets("01-11").Cells(cont, 5)
Vto = Sheets("01-11").Cells(cont, 11)
VtoMax = Sheets("01-11").Cells(cont, 12)
ultimaFilaAuxiliar = Sheets("Auxiliar").Range("B" & Rows.Count).End(xlUp).Row
Sheets("Auxiliar").Cells(ultimaFilaAuxiliar + 1, 1) = dia
Sheets("Auxiliar").Cells(ultimaFilaAuxiliar + 1, 2) = Hora
Sheets("Auxiliar").Cells(ultimaFilaAuxiliar + 1, 3) = Temp
Sheets("Auxiliar").Cells(ultimaFilaAuxiliar + 1, 4) = Max
Sheets("Auxiliar").Cells(ultimaFilaAuxiliar + 1, 5) = Min
Sheets("Auxiliar").Cells(ultimaFilaAuxiliar + 1, 6) = Vto
Sheets("Auxiliar").Cells(ultimaFilaAuxiliar + 1, 7) = VtoMax
End If

Lo único que a oartir de l 13 de enero, cambia el formato de la celda celda

Creo que este es el problema, tienes declarada la variable día como string:

Dim dia As String

La debes declarar como Date:

Dim dia As Date

Y también te funcionaría si no declaras las variables, en VBA no es necesario declarar las variables. No le resto importancia a declarar las variables, pero si no lo haces de manera correcta, entonces puedes tener errores. Lee el siguiente artículo:

Según su función ¿Cómo declarar variables?

Vuelve a probar tu macro

Genial Dante, al declararla como Date, no se cambia el formato en la mitad, ahora me faltaría calcular promedio, Max y Min 

Me explicas con ejemplos qué tienes, y qué esperas como resultado.

Si,  tengo una planilla

dia               Hora         TempC     Vto 

1/1/11        08:00             31          8

1/1/11         09:00            28          5  

1/1/11         10:00            30          9

......

2/1/11 ..............................................

Y necesito 

dia    Promedio Temp    TempMax         TempMin  Promedio Vto         VtoMax

1/1/11       29,66                31                         28                7,33                             9

2/1/11 ...........................

3/1/11 .........................................

Sustituye tu macro por la siguiente:

Sub transferirDatosOtraHoja()
'Act Por Dante Amor
    Application.ScreenUpdating = False
    Application.StatusBar = False
    '
    Set h1 = Sheets("01-11")
    Set h2 = Sheets("Auxiliar")
    Set h3 = Sheets("Resumen")
    '
    h2.Rows("2:" & Rows.Count).ClearContents
    h3.Rows("2:" & Rows.Count).ClearContents
    fila_aux = 2
    fila_res = 2
    u1 = h1.Range("A" & Rows.Count).End(xlUp).Row
    ant = h1.Cells(4, "A").Value
    ini = 4
    For i = 4 To u1
        Application.StatusBar = "Transfiriendo registro : " & i & " de : " & u1
        '
        'Transferir a la hoja Auxiliar
        '
        If h1.Cells(i, 2) Like "*" & "00:00" & "*" Then
            h2.Cells(fila_aux, 1) = h1.Cells(i, 1)
            h2.Cells(fila_aux, 2) = h1.Cells(i, 2)
            h2.Cells(fila_aux, 3) = h1.Cells(i, 3)
            h2.Cells(fila_aux, 4) = h1.Cells(i, 4)
            h2.Cells(fila_aux, 5) = h1.Cells(i, 5)
            h2.Cells(fila_aux, 6) = h1.Cells(i, 11)
            h2.Cells(fila_aux, 7) = h1.Cells(i, 12)
            fila_aux = fila_aux + 1
        End If
        '
        'Transferir a la hoja Resumen
        '
        If ant <> h1.Cells(i, "A").Value Then
            wpro = WorksheetFunction.Average(h1.Range("C" & ini & ":c" & fin))
            wmax = WorksheetFunction.Max(h1.Range("C" & ini & ":C" & fin))
            wmin = WorksheetFunction.Min(h1.Range("C" & ini & ":C" & fin))
            wprv = WorksheetFunction.Average(h1.Range("K" & ini & ":K" & fin))
            wmav = WorksheetFunction.Max(h1.Range("K" & ini & ":K" & fin))
            h3.Cells(fila_res, "A").Value = ant
            h3.Cells(fila_res, "B").Value = wpro
            h3.Cells(fila_res, "C").Value = wmax
            h3.Cells(fila_res, "D").Value = wmin
            h3.Cells(fila_res, "E").Value = wprv
            h3.Cells(fila_res, "F").Value = wmav
            ini = i
            fila_res = fila_res + 1
        End If
        fin = i
        ant = h1.Cells(i, "A").Value
    Next
    '
    With h2.Range("B6:G" & h2.Range("B" & Rows.Count).End(xlUp).Row).Font
        .Name = "Arial"
        .Size = 9
        .Italic = True
    End With
    Application.StatusBar = False
    Application.ScreenUpdating = True
    MsgBox "Proceso terminado", vbInformation, "Resultado"
End Sub


'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda
Respuesta
1

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas