Risultati da 1 a 6 di 6

Discussione: Macro per importazione e pulizia di file CSV



  1. #1
    L'avatar di G.Bove
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Milano
    Età
    51
    Messaggi
    870
    Versione Office
    2010
    Likes ricevuti
    24
    Likes dati
    186

    Macro per importazione e pulizia di file CSV

    Ciao a tutti,
    il lavoro fatto dal grande Ninai (Calcolare i minuti di fermo impianto tenendo conto dell'orario di lavoro) per dare il suo meglio ha bisogno di voi maghi del VBA.

    Infatti per la fase preparatoria è necessario che il file (https://www.dropbox.com/s/ls9mw361vd...95125.csv?dl=0) "subisca" queste modifiche:
    Importando i dati del file in un foglio excel
    eliminando le righe vuote
    ordinando i dati per eliminare le altre intestazioni extra
    togliendo lo spazio vuoto negli orari

    e aggiungerei anche cercando ed eliminando i doppioni e le righe non completamente compilate

    Ulteriori informazioni utili possono essere:
    1) Che l'importazione può essere giornaliera e può contenere sia i dati nuovi che dati già presenti (ecco perchè ho aggiunto la ricerca ed eliminazione doppioni). In realtà è una spuria datami da un solo impianto ma se riuscite a tenerne conto è cosa gradita.
    2) Che non debba sostituire i dati gia presenti ma aggiungersi agli stessi.
    3) Soprattutto non interferisca con il lavoro improbo di Ninai.

    Grazie in anticipo
    Gene

  2. #2
    L'avatar di Marius44
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Catania
    Età
    73
    Messaggi
    3207
    Versione Office
    Excel2010
    Likes ricevuti
    625
    Likes dati
    155
    Ciao Gene
    inserisci la seguente macro, ovviamente dopo che il file è stato importato in Excel, in un Modulo standard ed associala ad un pulsante (Modulo, non ActiveX)

    Codice: 
    Option Explicit
    Sub PulisceOrdina()
    Dim uR As Long, i As Long, ele As String
        uR = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
        For i = 3 To uR
            If Cells(i, 1).Text = "" Or Left(Cells(i, 1), 4) = "Data" Or _
                Left(Cells(i, 1), 3) = "TO9" Then
                Rows(i).EntireRow.ClearContents
            End If
            Cells(i, 2) = Format(LTrim(Cells(i, 2)), "hh:mm:ss")
            Cells(i, 5) = Format(LTrim(Cells(i, 2)), "hh:mm:ss")
        Next i
        ele = "A2:H" & uR
        Range(ele).Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    End Sub
    Prova e fammi sapere. Ciao,
    Mario

  3. #3
    L'avatar di G.Bove
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Milano
    Età
    51
    Messaggi
    870
    Versione Office
    2010
    Likes ricevuti
    24
    Likes dati
    186
    Ciao Mario,
    ho provato ma sbaglio qualcosa (https://www.dropbox.com/s/f789uzlnqy...rius.xlsm?dl=0) .
    Sequenza operazioni fatte:
    1) creato nuovo foglio1 ( ho rinominato quello di Ninai per confrontarli)
    2) poi DATI --> da testo --> avanti per le 3 schermate successive (senza modificare nulla come parametri)
    3) Ad avvenuta importazione --> lancio macro con pulsante1 (a cui in precedenza avevo associato la macro PulisceOrdina).

    Risultato: nessuno.

    Attendo tua indicazione su errore commesso.

    Grazie
    Gene

  4. #4
    L'avatar di Marius44
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Catania
    Età
    73
    Messaggi
    3207
    Versione Office
    Excel2010
    Likes ricevuti
    625
    Likes dati
    155
    Ciao Gene
    quando dicevo "dopo che il file è stato importato in Excel" mi riferivo al fatto che il testo DEVE GIA' ESSERE DIVISO IN COLONNE per poter applicare la macro. Se la divisione in colonne porta i due orari nelle colonne B ed E la macro fa il suo dovere. Tieni presente che si potrebbe fare la divisione anche con la macro (ma non era questa la tua richiesta tant'è vero che il primo file aveva i dati in colonne differenti).

    Prova e fammi sapere
    Caio,
    Mario

  5. #5
    L'avatar di G.Bove
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Milano
    Età
    51
    Messaggi
    870
    Versione Office
    2010
    Likes ricevuti
    24
    Likes dati
    186
    Ciao Mario,
    domani ci provo. In ogni caso se riesci a implementarla al max delle capacità VBA (..a me sconosciute...) non può che essermi d'aiuto :246:.
    Approfitto per chiedere il tuo aiuto anche sull'altro mio post (Correzione e implementazione VBA (inserimento controlli e riferimenti). -->attualmente inchiodato a pochi passi dalla risoluzione.

    Grazie
    Gene

  6. #6
    L'avatar di Marius44
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Catania
    Età
    73
    Messaggi
    3207
    Versione Office
    Excel2010
    Likes ricevuti
    625
    Likes dati
    155
    Ciao Gene
    Ti allego il file con la nuova macro più completa. Posto anche il codice.
    Codice: 
    Option Explicit
    Sub PulisceOrdina()
    Dim uR As Long, i As Long, a As Integer, ele As String, ipt As String
        Columns("A:A").Select
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
            Array(7, 1), Array(8, 1)), TrailingMinusNumbers:=True
        For i = 1 To Len(Cells(1, 1).Text)
            If Mid(Cells(1, 1), i, 1) = " " Then
            ipt = Left(Cells(1, 1), i - 1): a = i - 1
            Exit For
        Next i
        uR = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
        For i = 3 To uR
            If Cells(i, 1).Text = "" Or Left(Cells(i, 1), 4) = "Data" Or _
                Left(Cells(i, 1), a) = ipt Then
                Rows(i).EntireRow.ClearContents
            End If
            Cells(i, 2) = Format(LTrim(Cells(i, 2)), "hh:mm:ss")
            Cells(i, 5) = Format(LTrim(Cells(i, 2)), "hh:mm:ss")
        Next i
        ele = "A2:H" & uR
        Range(ele).Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
        Columns("A:H").EntireColumn.AutoFit
    End Sub
    Questa macro divide il testo in colonne, assume il nome dell'impianto (quello di prima era TO9, quello di adesso è TNT9), pulisce e adegua la larghezza delle colonne.

    Prova e fai sapere.
    Ciao,
    Mario

    https://www.dropbox.com/s/83hy5m8qnb..._VBA.xlsm?dl=0

Discussioni Simili

  1. [Risolto] Importazione di file CSV - cancellare la connessione
    Di Ciccio nel forum Domande su Excel VBA e MACRO
    Risposte: 9
    Ultimo Messaggio: 13/10/16, 16:23
  2. importazione file txt da web con una macro
    Di Giannilima nel forum Domande su Excel VBA e MACRO
    Risposte: 11
    Ultimo Messaggio: 15/06/16, 11:35
  3. Macro per importazione dati da file xls o csv
    Di Harry nel forum Domande su Excel VBA e MACRO
    Risposte: 3
    Ultimo Messaggio: 29/12/15, 20:41
  4. Importazione file ed analisi dati
    Di G.Bove nel forum Domande su Excel in generale
    Risposte: 20
    Ultimo Messaggio: 13/12/15, 07:42
  5. Aprire file CSV in Excel evitando importazione guidata
    Di mspr nel forum Domande su Excel in generale
    Risposte: 8
    Ultimo Messaggio: 30/09/15, 20:46

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •