Integrazione automatica serie di date



  • Integrazione automatica serie di date
    di Gianro data: 05/03/2015 15:10:49

    Salve a tutti,

    premetto che la mia conoscenza di VBA è pari a zero e vi sarei profondamente grato se poteste spiegarmi i vari passaggi e mi scuso preventivamente se porrò questioni per voi banali.

    Passiamo al problema. Ultimamente sto lavorando su dataset contenenti migliaia di righe (talvolta anche centinaia di migliaia) nei quali è sempre presente una colonna delle date il cui intervallo temporale è di un anno e i cui dati presentano generalmente una cadenza oraria. Il problema sta nel fatto che spesso ci sono dei buchi e pertanto non c'è continuità temporale. Premetto che questa cosa la riesco ad ovviare manualmente tramite un test-confronto tra questa colonna di date ed una che mi ricavo io ed in cui sono certo che vi sia continuità. Trovate le lacune inserisco una riga vuota ed introduco la data mancante. Vi riporto un esempio:
    h**p://s18.postimg.org/falukbdih/dataset.jpg
    Come potete vedere nella colonna A alle 03.00 dell'01/01/2014 mancava il valore ed ho dovuto scovarlo tramite il suddetto test. Sarà una banalità ma farlo tante volte e per migliaia di dati pesa. Vi sarei grato se qualcuno di voi mi aiutasse a creare uno script che automatizzi ciò che quindi:
    1) individui i punti in cui non vi è una continuità temporale;
    2)vi introduca una riga e la rispettiva data mancante

    Vi ringrazio.



  • di Gianro data: 07/03/2015 15:51:11

    UP



  • di Mister_x (utente non iscritto) data: 07/03/2015 17:14:27

    ciao

    normalmente si inserisce un file, non dico con migliaia di dati ma un centinaio si, e da qui si puo' creare una sub() per fare questo lavoro, e stabilire come ottenere i vari valori mancanti
    questo perche' ricostruire un tuo file non conoscendo la struttura e nemmeno i vari valori inseriti e come buttarci in un pozzo senza sapere a che altezza dobbiamo sbattere la testa

    PS POSTA UN FILE

    ciao







  • di Gianro data: 09/03/2015 14:37:45

    Ciao,

    ho allegato un file come da te richiesto.

    Grazie.



  • di Mister_x (utente non iscritto) data: 09/03/2015 22:58:53

    ciao

    sub() da provare, e' un po bruttina ma penso che funzioni
    inserire nel foglio interessato

    ciao
     
    Option Explicit
    Sub Agg_Riga()
    Dim i As Long
    Dim OraI As Double
    Inizio:
    i = 2
    OraI = Cells(2, 2)
    For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
     If Hour(OraI + (1 / 24)) <> Hour(Cells(i + 1, 2)) Then
       Rows(i + 1 & ":" & i + 1).Select
       Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        If Hour(Cells(i, 2)) = 23 Then
          Cells(i + 1, 1) = Cells(i, 1) + 1
          Cells(i + 1, 2) = TimeValue("00.00.00")
         Exit For
        Else
          Cells(i + 1, 1) = Cells(i, 1)
          Cells(i + 1, 2) = Cells(i, 2) + (1 / 24)
         Exit For
        End If
     End If
     If Hour(Cells(i, 2)) = 23 Then
      OraI = TimeValue("00.00.00")
     Else
      OraI = Cells(i + 1, 2)
     End If
    Next i
    If i < Cells(Rows.Count, 1).End(xlUp).Row Then GoTo Inizio
    End Sub