ho bisogno nuovamente del vostro eccezionale supporto.
Ho un grosso file .csv (contenente un numero di righe superiori alle 1.048.576 gestite da Excel). Il mio problema iniziale era convertire il file in questione in .xlsx senza perdere informazioni per strada. Girando un pò sui vari forum ho recuperato questo codice che mi suddivide il file .csv in diversi fogli di max 500.000 righe, salvaguardando l'integrità dei miei dati:
- Codice: Seleziona tutto
Public Sub LargeFileImport()
'Dimension Variables
Dim ResultStr As String
Dim FName As Variant
Dim FileNum As Integer
Dim Counter As Double
'Ask User for File's Name
FName = Application.GetOpenFilename( _
FileFilter:="CSV Files (*.csv), *.csv")
If FName = False Then
Exit Sub
End If
'Get Next Available File Handle Number
FileNum = FreeFile()
'Open Text File For Input
Open FName For Input As #FileNum
'Turn Screen Updating Off
Application.ScreenUpdating = False
'Create A New WorkBook With One Worksheet In It
Workbooks.Add Template:=xlWorksheet
'Set The Counter to 1
Counter = 1
'Loop Until the End Of File Is Reached
Do While Seek(FileNum) <= LOF(FileNum)
'Display Importing Row Number On Status Bar
Application.StatusBar = "Importing Row " & _
Counter & " of text file " & FName
'Store One Line Of Text From File To Variable
Line Input #FileNum, ResultStr
'Store Variable Data Into Active Cell
If Left(ResultStr, 1) = "=" Then
ActiveCell.Value = "'" & ResultStr
Else
ActiveCell.Value = ResultStr
End If
If ActiveCell.Row = 500000 Then
'If On The Last Row Then Add A New Sheet
ActiveWorkbook.Sheets.Add
Else
'If Not The Last Row Then Go One Cell Down
ActiveCell.Offset(1, 0).Select
End If
'Increment the Counter By 1
Counter = Counter + 1
'Start Again At Top Of 'Do While' Statement
Loop
'Close The Open Text File
Close
'Remove Message From Status Bar
Application.StatusBar = False
End Sub
I dati all'interno del file .csv sono organizzati come segue:
[list=]
100","CDU","001","J","5944SP","COO PACK MML EMT","0","0","GBP","20120703","0","1","0","999","E100ABCVAL
100","CDU","001","J","5944SP","COO PACK VIRGIN","0","0","GBP","20121018","0","1","0","999","E100ABCVAL
100","CDU","002","C","31713","GAS, TURBO","0","0","GBP","20090325","0","1","0","999","E100ABCVAL
100","CDU","002","C","36377","WATER HEAD","0","0","GBP","20090325","0","1","0","999","E100ABCVAL
100","CDU","002","C","3086","SEAL","0","0","GBP","20090408","0","1","0","999","E100ABCVAL
[/list]
Ora, il problema nasce dall'esigenza di suddividere i diversi fogli di lavoro, non in base al numero di righe, bensì al variare di un parametro. Più nello specifico, la terza colonna che contiene i valori 001, 002, 003, 004, etc...
Fermo restanto che il file è già ordinato per valori in colonna C, mi serve una macro che suddivida il file .csv in diversi fogli al variare del dato in colonna C. Il risultato dovrebbe essere un singolo file Excel con diversi fogli di lavoro, uno per ciascuno dei diversi valori 00X contenuti in colonna C.
Spero di essermi spiegato in maniera esaustiva.