GoodiesTech notesTechnology

Dividere un foglio di excel in più file separati

excel-logo

E’ molto frequente l’esigenza di separare un file excel contenente molte righe in più file separati, magari mantenendo le intestazioni di colonna originali.

Utile per Listin prezzi, importazioni di dati e similari.

Cercando su Google si trovano molti file ‘splitter’, spesso utility a se stanti o macro per Excel.

A conti fatti la soluzione migliore sembra creare una semplice Macro VBA di Excel.

Ho trovato un buon esempio su questo forum che ho solo integrato per prendere i file con estensione xlsx e fatto in modo che chiedesse il file di input con il comando GetOpenFilename dalla documentazione ufficiale Microsoft.

Ho preparato anche un file scaricabile contenente la macro già creata, diversamente i passaggi per crearla sul proprio file excel sono abbastanza semplici:

Da Excel (2007 nel mio caso ma dovrebbe funzionare anche per le altre versioni, magari cambia solo la posizione del menù e forse qualche sintassi):  Menù VISUALIZZA -> MACRO -> Visualizza Macro

Digitiamo il nome che vogliamo assegnare alla macro e clicchiamo CREA

Incolliamo il codice qui di seguito:

Public Sub separa_5000_righe_con_intestazioni_colonna()

    Dim inputFile As String, inputWb As Workbook
    Dim lastRow As Long, row As Long, n As Long
    Dim newCSV As Workbook
    
    inputFile = Application.GetOpenFilename("Excel Files (*.xlsx), *.xlsx")
    
    Set inputWb = Workbooks.Open(inputFile)
    
    With inputWb.Worksheets(1)
        lastRow = .Cells(Rows.Count, "A").End(xlUp).row
        
        Set newCSV = Workbooks.Add
        
        n = 0
        For row = 2 To lastRow Step 5000
            n = n + 1
            .Rows(1).EntireRow.Copy newCSV.Worksheets(1).Range("A1")
            .Rows(row & ":" & row + 5000 - 1).EntireRow.Copy newCSV.Worksheets(1).Range("A2")
            
            'Save in same folder as input workbook with .xlsx replaced by (n).csv
            newCSV.SaveAs Filename:=Replace(inputWb.FullName, ".xlsx", "(" & n & ").csv"), FileFormat:=xlCSV, CreateBackup:=False
        Next
    End With
    
    newCSV.Close saveChanges:=False
    inputWb.Close saveChanges:=False
    
End Sub

In questo caso separiamo ogni 5000 righe e creiamo dei file CSV nella stessa cartella di provenienza del file.

Possiamo modificare questo comportamento impostando, ad esempio, un numero diverso di righe in tutti i punti dove compare 5000 nel codice.

Ho preparato il file scaricabile, lo zip contiene un semplice file excel con la macro già creata.

Excel row splitter macro

Naturalmente per poter eseguire la macro bisognerà attivare le macro di excel cliccando sul pulsante Opzioni che compare automaticamente:

Dopodichè sarà sufficiente dal Menù VISUALIZZA -> Macro -> Visualizza Macro:

Selezionare la macro, cliccare esegui e selezionare il file da dividere.

 

Comment here