Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Trovare e inserire date mancanti in un elenco

Ultimo Aggiornamento: 06/07/2019 16:52
Post: 4
Registrato il: 27/06/2019
Città: CAMPI BISENZIO
Età: 29
Utente Junior
excel 2016
OFFLINE
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]
Post: 818
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
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)
Post: 4
Registrato il: 27/06/2019
Città: CAMPI BISENZIO
Età: 29
Utente Junior
excel 2016
OFFLINE
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 😟
Post: 819
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
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)
Post: 5
Registrato il: 27/06/2019
Città: CAMPI BISENZIO
Età: 29
Utente Junior
excel 2016
OFFLINE
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!
Post: 2.300
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
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
Post: 820
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
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)
Post: 6
Registrato il: 27/06/2019
Città: CAMPI BISENZIO
Età: 29
Utente Junior
excel 2016
OFFLINE
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.
Post: 695
Registrato il: 02/08/2015
Utente Senior
Excel 2013
OFFLINE
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."
Post: 821
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
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)
Post: 7
Registrato il: 27/06/2019
Città: CAMPI BISENZIO
Età: 29
Utente Junior
excel 2016
OFFLINE
01/07/2019 09:59

Ho capito. Grazie a tutti!
Post: 8
Registrato il: 27/06/2019
Città: CAMPI BISENZIO
Età: 29
Utente Junior
excel 2016
OFFLINE
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.
Post: 2.319
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
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
Post: 822
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
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)
Post: 9
Registrato il: 27/06/2019
Città: CAMPI BISENZIO
Età: 29
Utente Junior
excel 2016
OFFLINE
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!
Post: 823
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
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)
Vota: 15MediaObject5,00216 2
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Elenco Date (18 messaggi, agg.: 13/02/2022 14:26)
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 16:03. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com