Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao Giuseppe,
tra le varie possibilità prova quanto ti propongo (basata sulla semplice importazione dei dati non conoscendo la struttra del tuo file).
Vedi questo file di esempio: File esempio
Nel Modulo1 del progetto VBA trovi il seguente codice:
'---
Option Explicit
Sub ImportaCsv()
Const sFoglioDatiImportati As String = "Dati Importati"
Const sRngDest As String = "A1"
Dim Wb As Workbook
Dim Ws As Worksheet
Dim rngDest As Range
Dim sFileFullName As String
Set Wb = ThisWorkbook
On Error Resume Next
Set Ws = Wb.Worksheets(sFoglioDatiImportati)
If Err.Number <> 0 Then
Set Ws = Wb.Worksheets.Add(After:=Wb.Worksheets(Wb.Worksheets.Count))
Ws.Name = sFoglioDatiImportati
End If
On Error GoTo 0
Set rngDest = Ws.Range(sRngDest)
sFileFullName = GetFileCsvFullName
Ws.Cells.ClearContents
If sFileFullName <> vbNullString Then
With Ws.QueryTables.Add(Connection:="TEXT;" & sFileFullName, _
Destination:=rngDest)
.Name = "XXXX"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
.Delete
End With
Ws.Columns("B:B").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
rngDest.EntireColumn.TextToColumns Destination:=Range("A1"), _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=True, _
Tab:=False, _
Semicolon:=False, _
Comma:=False, _
Space:=True, _
Other:=False, _
FieldInfo:=Array(4, 4), _
TrailingMinusNumbers:=True
rngDest.CurrentRegion.Columns.AutoFit
If ActiveSheet.Name <> Ws.Name Then Ws.Activate
End If
End Sub
Function GetFileCsvFullName() As String
With Application
With .FileDialog(msoFileDialogFilePicker)
.Title = "Seleziona File csv"
.ButtonName = "Ok"
.AllowMultiSelect = False
.InitialFileName = Environ("UserProfile") & ""
With .Filters
.Clear
.Add "File csv", "*.csv"
End With
If .Show = -1 Then
GetFileCsvFullName = .SelectedItems(1)
End If
End With
End With
End Function
'---
La routine ImportaCsv è quella da richiamare (nel file ho messo un pulsante nel foglio1.
In primis se non viene trovato un foglio con il nome impostato con la costante:
Const sFoglioDatiImportati As String = "Dati Importati"
ne crea uno.
Poi viene aperta una finestra di dialogo per selezionare il file csv (il filtro va visualizzare solo i file csv).
Una volta selezionato il file viene importato e i dati vengono riportati nel foglio "Dati Importati" a paritre dalla prima cella impostata con la costante:
Const sRngDest As String = "A1"
Una volta importati i dati viene inserita una colonna in corrispondenza della colonna B e i dati della colonna A vengono suddivisi tra data e ora.
Infine le colonne vegono "adattate" al contenuto.
Vedi se può andar bene eventualmente adattando al tuo caso specifico.
ciao