Stellar Blade Un'esclusiva PS5 che sta facendo discutere per l'eccessiva bellezza della protagonista. Vieni a parlarne su Award & Oscar!

Excel Forum Per condividere esperienze su Microsoft Excel

Trovare e inserire date mancanti in un elenco

  • Messaggi
  • OFFLINE
    Giuliam94
    Post: 4
    Registrato il: 27/06/2019
    Città: CAMPI BISENZIO
    Età: 29
    Utente Junior
    excel 2016
    00 28/06/2019 18:57
    Ciao, sono sempre io!

    Avrei un'altra domanda da porre. Ho un file di excel con un elenco di date e orari che vanno dal 19/02 all'8/03. Il formato delle celle della colonna delle date è questo : "gg/mm/aaaa hh:mm". La sequenza dell'orario è di ogni minuto perciò nel mio file ho una cosa del genere:

    data
    19/02/2019 11:06
    19/02/2019 11:07
    19/02/2019 11:08
    19/02/2019 11:09
    ecc...

    Il mio problema è che ci sono degli orari mancanti, ovvero mi ritrovo spesso questo:

    (esempio)

    data
    19/02/2019 11:06
    19/02/2019 11:08
    19/02/2019 11:09
    19/02/2019 11:10

    ovvero mi manca la cella 19/02/2019 11:07. Esiste un metodo per individuare tutte le date con gli orari mancanti ed inserirle automaticamente? Mi servirebbe inserire una riga e non solo una cella in quanto poi dovrò andare a scrivere nelle colonne adiacenti. Sono parecchi dati e mi farebbe davvero comodo...

    Grazie a chi risponderà!🙏



    [Modificato da Giuliam94 28/06/2019 18:58]
  • ONLINE
    rollis13
    Post: 818
    Registrato il: 16/08/2015
    Città: CORDENONS
    Età: 67
    Utente Senior
    Excel 2016-32bit Win11
    00 28/06/2019 23:55
    Vedi se riesci ad utilizzare questa mia macro come base di partenza. Va bene messa in un Modulo vba o anche nel Modulo del Foglio interessato.
    Option Explicit
    
    Sub InserisciDatoMancante()
    
        Dim UR As Long      'ultima riga
        Dim Diff As String  'differenza
        Dim x As Long       'contatore ciclo
    
        Application.ScreenUpdating = False
        UR = Cells(Rows.Count, 1).End(xlUp).Row         'trova l'ultima riga in colonna A
        For x = UR To 3 Step -1                         'ci si ferma alla riga 3 visto che c'è un'intestazione
            Diff = CDate(CDate(Range("A" & x)) - CDate(Range("A" & x - 1))) 'verifica se v'è differenza tra i dati
            If Diff > "00:01:00" Then                   'se superiore al minuto procedi
                Range("A" & x).EntireRow.Insert         'in tal caso inserisci una riga
                Range("A" & x) = Range("A" & x + 1) - CDate("00:01:00")     'e relativo dato in colonna A
                x = x + 1                               'serve per ripetere il controllo in caso manchino più dati
            End If
        Next
        Application.ScreenUpdating = True
    
    End Sub
    
    [Modificato da rollis13 29/06/2019 00:01]

    ______________________________________________________________
    C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
  • OFFLINE
    Giuliam94
    Post: 4
    Registrato il: 27/06/2019
    Città: CAMPI BISENZIO
    Età: 29
    Utente Junior
    excel 2016
    00 29/06/2019 10:28
    Re:
    rollis13, 28/06/2019 23.55:

    Vedi se riesci ad utilizzare questa mia macro come base di partenza. Va bene messa in un Modulo vba o anche nel Modulo del Foglio interessato.
    Option Explicit
    
    Sub InserisciDatoMancante()
    
        Dim UR As Long      'ultima riga
        Dim Diff As String  'differenza
        Dim x As Long       'contatore ciclo
    
        Application.ScreenUpdating = False
        UR = Cells(Rows.Count, 1).End(xlUp).Row         'trova l'ultima riga in colonna A
        For x = UR To 3 Step -1                         'ci si ferma alla riga 3 visto che c'è un'intestazione
            Diff = CDate(CDate(Range("A" & x)) - CDate(Range("A" & x - 1))) 'verifica se v'è differenza tra i dati
            If Diff > "00:01:00" Then                   'se superiore al minuto procedi
                Range("A" & x).EntireRow.Insert         'in tal caso inserisci una riga
                Range("A" & x) = Range("A" & x + 1) - CDate("00:01:00")     'e relativo dato in colonna A
                x = x + 1                               'serve per ripetere il controllo in caso manchino più dati
            End If
        Next
        Application.ScreenUpdating = True
    
    End Sub
    



    Ciao grazie per la tua risposta! Ho inserito la macro nel modulo VBA ma mi dice "Errore di run-time '13': tipo non corrispondente". Ho fatto il debug e mi dice che c'è qualcosa che non va in questo punto:

    Diff = CDate(CDate(Range("A" & x)) - CDate(Range("A" & x - 1))) 'verifica se v'è differenza tra i dati

    Purtroppo non sono molto pratica di macro quindi non riesco a capire il problema 😟
  • ONLINE
    rollis13
    Post: 819
    Registrato il: 16/08/2015
    Città: CORDENONS
    Età: 67
    Utente Senior
    Excel 2016-32bit Win11
    00 29/06/2019 12:35
    "Errore di run-time '13': tipo non corrispondente" significa che il formato dei dati non corrisponde con quello che si vede a video. Probabilmente non sono date ma testo o altro ancora. Se non sei pratico a rielaborare la traccia che ti avevo fornito serve assolutamente che alleghi un file con un paio di righe con i dati nel formato reale per poter riscrivere la riga segnalata con un formato adeguato al caso.

    ______________________________________________________________
    C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
  • OFFLINE
    Giuliam94
    Post: 5
    Registrato il: 27/06/2019
    Città: CAMPI BISENZIO
    Età: 29
    Utente Junior
    excel 2016
    00 29/06/2019 17:43
    Ho inserito "On Error Resume Next" e sembrerebbe che abbia funzionato. Ho provato a controllare che abbia inserito tutto e mi pare di sì.
    Grazie per l'aiuto!
  • OFFLINE
    dodo47
    Post: 2.300
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 29/06/2019 17:53
    Re:
    Giuliam94, 29/06/2019 17.43:

    Ho inserito "On Error Resume Next" e sembrerebbe che abbia funzionato. Ho provato a controllare che abbia inserito tutto e mi pare di sì.
    Grazie per l'aiuto!



    Occhio!! che non è la panacea di tutti i mali quell'istruzione... comunque contento tu....

    saluti



    Domenico
    Win 10 - Excel 2016
  • ONLINE
    rollis13
    Post: 820
    Registrato il: 16/08/2015
    Città: CORDENONS
    Età: 67
    Utente Senior
    Excel 2016-32bit Win11
    00 29/06/2019 18:34
    Quoto dodo47.


    "On Error Resume Next" e sembrerebbe che abbia funzionato.

    NON è mai una soluzioni ai problemi. Va usato con molta attenzione e serve solo per superare problemi con dati che in realtà sono inutili (o fuori luogo).
    La mia macro non prevedeva l'uso di un "On Error Resume Next" visto che è stata testata in tutte le salse.
    Ripeto, fornisci un esempio reale dei tuoi dati (senza dati sensibili dato che l'oggetto della macro è elaborare gli orari) se vuoi altro aiuto.

    ______________________________________________________________
    C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
  • OFFLINE
    Giuliam94
    Post: 6
    Registrato il: 27/06/2019
    Città: CAMPI BISENZIO
    Età: 29
    Utente Junior
    excel 2016
    00 30/06/2019 11:13
    Allora allego il file d'esempio in cui ho messo alcune righe. Le colonne accanto a quella delle date sono dei parametri che in questo file ho lasciato bianche ma che sono compilate nel file originale. Il formato è lo stesso di quello originale.
  • OFFLINE
    cromagno
    Post: 695
    Registrato il: 02/08/2015
    Utente Senior
    Excel 2013
    00 30/06/2019 17:28
    @Giuliam94
    con l'ultimo file che hai allegato il codice proposto da @rollis13 ( [SM=g27811] ) funziona perfettamente.


    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."
  • ONLINE
    rollis13
    Post: 821
    Registrato il: 16/08/2015
    Città: CORDENONS
    Età: 67
    Utente Senior
    Excel 2016-32bit Win11
    00 30/06/2019 19:22
    Re:
    rollis13, 29/06/2019 18.34:


    "On Error Resume Next" e sembrerebbe che abbia funzionato.

    NON è mai una soluzioni ai problemi. Va usato con molta attenzione e serve solo per superare problemi con dati che in realtà sono inutili (o fuori luogo).

    Come già avevo scritto quell' "On Error" va usato in caso di dati inutili (o fuori luogo) e si perderebbe troppo tempo a creare del codice per 'filtrare' tutte le informazioni che 'passano' per la macro.
    Visto che hai allegato solo poche righe evidentemente in quelle che non hai allegato ci sono delle celle che non contengono un dato formato 'Data/Ora' come previsto, bensì altro ('Testo' probabilmente), ed in questo caso l'uso dell' 'On Error' è servito proprio per bypassare questi dati 'errati' (non previsti) senza bloccare la macro.


    ______________________________________________________________
    C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
  • OFFLINE
    Giuliam94
    Post: 7
    Registrato il: 27/06/2019
    Città: CAMPI BISENZIO
    Età: 29
    Utente Junior
    excel 2016
    00 01/07/2019 09:59
    Ho capito. Grazie a tutti!
  • OFFLINE
    Giuliam94
    Post: 8
    Registrato il: 27/06/2019
    Città: CAMPI BISENZIO
    Età: 29
    Utente Junior
    excel 2016
    00 05/07/2019 17:00
    Ciao a tutti, vi riscrivo perchè ho avuto un problema con questa macro e attualmente non riesco a capire come mai. Inserisco la macro e non mi da nessun tipo di errore, semplicemente excel si blocca e il cursore del mouse rimane in caricamento in eterno. Sia che inserisca "On Error Resume Next" o meno. Ho cercato di vedere se c'erano dei simboli diversi che la bloccavano o il formato dei dati sbagliato ma no. Almeno per quello che vedo io. Ho provato anche a copiare e incollare in un file di testo e poi riportarlo nuovamente su excel ma nulla. Fin'ora ho usato questa macro per 4 file con la stessa struttura e funzionava perfettamente, con questo file si blocca tutto e devo ricorrere all'interruzione forzata del programma excel.🤷 Allego il file in questione.
  • OFFLINE
    dodo47
    Post: 2.319
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    10 05/07/2019 19:13
    perchè le date/ora non sono univoche.

    Vedi per esempio blocco righe :

    da riga 4652
    a riga 4706

    che sono uguali a blocco righe :

    da riga 4707
    a riga 4761

    Non so se ce ne siano altre....controlla





    [Modificato da dodo47 05/07/2019 19:14]
    Domenico
    Win 10 - Excel 2016
  • ONLINE
    rollis13
    Post: 822
    Registrato il: 16/08/2015
    Città: CORDENONS
    Età: 67
    Utente Senior
    Excel 2016-32bit Win11
    10 05/07/2019 19:29
    Un saluto a tutti.

    Corrisponde al cambio dell'orario da solare a legale ... e la mia macro non lo prevede ...

    Ho ritoccato la macro per gestire questo specifico caso dato che non ho idea di cosa succede nella tabella quando ad ottobre rientra l'orario solare.
    Sempre in base al tipo di dato da trattare ho rivisto anche l'uso di alcune funzioni e cercato di renderne l'esecuzione più veloce.
    Option Explicit
    
    Sub InserisciDatoMancante()
        
        Dim UR As Long      'ultima riga
        Dim Diff As String  'differenza
        Dim x As Long       'contatore ciclo
        
        Application.ScreenUpdating = False
        Application.Calculation = xlManual
        
        UR = Cells(Rows.Count, 1).End(xlUp).Row         'trova l'ultima riga in colonna A
        For x = UR To 3 Step -1                         'ci si ferma alla riga 3 visto che c'è un'intestazione
            Diff = Minute(Range("A" & x) - Range("A" & x - 1))  'calcola differenza tra i dati
            If Diff > 1 Then                                    'se superiore al minuto procedi
                Range("A" & x).EntireRow.Insert                 'in tal caso inserisci una riga
                Range("A" & x) = Range("A" & x + 1) - CDate("00:01:00")     'e relativo dato in colonna A
                'serve per ripetere il controllo in caso manchino più dati consecutivi se non vi sono salti all'indietro
                If CDate(Range("A" & x - 1)) < CDate(Range("A" & x)) Then x = x + 1
            End If
        Next
        
        Application.ScreenUpdating = True
        Application.Calculation = xlAutomatic
        
    End Sub
    [Modificato da rollis13 05/07/2019 23:28]

    ______________________________________________________________
    C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
  • OFFLINE
    Giuliam94
    Post: 9
    Registrato il: 27/06/2019
    Città: CAMPI BISENZIO
    Età: 29
    Utente Junior
    excel 2016
    00 06/07/2019 12:10
    E' vero non mi ero accorta dell'ora legale! Ho tentato con la tua macro e ha funzionato! Grazie mille davvero!
  • ONLINE
    rollis13
    Post: 823
    Registrato il: 16/08/2015
    Città: CORDENONS
    Età: 67
    Utente Senior
    Excel 2016-32bit Win11
    00 06/07/2019 16:52
    Prego, grazie del riscontro 👍.
    Come vedi non è servito l'uso di "On Error Resume Next" ma capire se i dati sono omogenei/coerenti.
    Prima di creare una macro bisogna fare per bene l'Analisi dei dati a disposizione in modo da poter prevedere delle 'trappole' per gestire tutto quello che può dare fastidio (come in questo caso di raddoppio dei dati).
    Ora un problema simile è rinviato ad ottobre al rientro dell'orario solare 😁.

    ______________________________________________________________
    C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
  • 15MediaObject5,00216 2