Unione file cvs



  • Unione file cvs
    di Francesca (utente non iscritto) data: 03/02/2017 12:31:02

    Ciao a tutti,
    avrei bisongo di una macro che mi unisca i dati che trova in diversi file csv in un unico foglio di file excel
    In particolare:
    In una cartella archivio ho un elenco di file .csv con un nome diverso, ognuno dei quali ha un solo foglio il cui nome è quello del file stesso (tutti incominciano per 170 ma purtroppo i fogli interni hanno nomi diversi per ogni file).
    Vorrei che la macro aprisse il primo file .csv dell'elenco della cartella archivio, mi copiasse i dati in un altro file excel creato per il riepilogo, aprisse il secondo file .csv che trova nella cartella e mi copiasse nel file riepilogo i dati in coda ai dati precedenti, e cosi' via per tutti i file .csv che trova nella cartella archivio.
    Si riesce a sistematizzare o bisogna che i fogli dei file .csv da cui prendere i dati da copiare siano nominati tutti uguali?
    Grazie!!!



  • di patel data: 03/02/2017 13:02:08

    allega un file csv per il test
    nessun problema per i nomi diversi





  • di Francesca (utente non iscritto) data: 03/02/2017 15:59:02

    Ciao Ho allegato un file .csv
    sono 60 quelli da aggregare e il nome è come quello allegato (una sequenza di numeri) con un solo foglio avente per nome quello del file stesso.

    Grazie

    ciao
    Francesca



  • di patel data: 03/02/2017 16:44:33

    regola tu la larghezza delle celle
     
    Sub importacvs()
    folderPath = "F:Download" ' <<<<<< da modificare, deve terminare on 
    fname = Dir(folderPath & "*.csv")
    Do While fname <> ""
       Call ImportCSVFile(fname, 1)
       fname = Dir
    Loop
    
    End Sub
    
    Sub ImportCSVFile(fname, sh)
        linenumber = Sheets(sh).Cells(Rows.Count, "A").End(xlUp).Row + 1
        elementnumber = 0
        Open fname For Input As #1
            Do While Not EOF(1)
                Line Input #1, lline
                arrayOfElements = Split(lline, ";")
                elementnumber = 0
                For Each element In arrayOfElements
                    elementnumber = elementnumber + 1
                    Sheets(sh).Cells(linenumber, elementnumber).Value = element
                Next
                 linenumber = linenumber + 1
            Loop
        Close #1
    End Sub
    






  • di Francesca (utente non iscritto) data: 03/02/2017 16:58:57

    Ok la provo intanto grazie mille



  • di Francesca (utente non iscritto) data: 07/02/2017 16:59:17

    Ciao Patel,
    gira perfettamente
    Grazie mille



  • di Francesca (utente non iscritto) data: 08/02/2017 09:47:46

    Ciao Patel,
    ho provato a farla rigirare una seconda volta e questa volta mi segnala errore 53 ... mi dice Errore file non trovato.
    Questa è quella che ho usato e i file sono normali csv, come quello allegato in precedenza.
    Forse il fatto che alla fine della routine Do While metta il nome = Dir?
    Non so
    Grazie

    ciao

    Francesca
     
    Sub importacvs()
    folderPath = "C:UsersfriccoDocumentsPROVA MACRO" ' <<<<<< da modificare, deve terminare on 
    fname = Dir(folderPath & "*.csv")
    Do While fname <> ""
       Call ImportCSVFile(fname, 1)
       fname = Dir
    Loop
    
    End Sub
    
    Sub ImportCSVFile(fname, sh)
        linenumber = Sheets(sh).Cells(Rows.Count, "A").End(xlUp).Row + 1
        elementnumber = 0
        Open fname For Input As #1
            Do While Not EOF(1)
                Line Input #1, lline
                arrayOfElements = Split(lline, ";")
                elementnumber = 0
                For Each element In arrayOfElements
                    elementnumber = elementnumber + 1
                    Sheets(sh).Cells(linenumber, elementnumber).Value = element
                Next
                 linenumber = linenumber + 1
            Loop
        Close #1
    End Sub