Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao Lupetto,
In assenza di informazioni specifiche, ipotizzando che il file csv da convertire sia l'ultimo file CSV scaricato in una directory specificata, come punto di partenza, in un modulo di codice standard, prova qualcosa del seguente genere:
'========>>
Option Explicit
'-------->>
Public Sub Tester()
Dim srcWB As Workbook, destwB As Workbook
Dim srcSH As Worksheet, destSH As Worksheet
Dim srcRng As Range, destRng As Range
Dim rRow As Range
Dim arrIn As Variant, arrOut() As Variant, arrSplit As Variant, arrHeaders As Variant
Dim sFile As String, aStr As String, bstr As String
Dim sStr As String
Dim LRow As Long
Dim i As Long, j As Long, iCtr As Long
Const sPercorso = **"C:\Users\Lupetto\" '<<=== Modifica**
Const sFoglio\_Destinazione As String = **"Foglio1" '<<=== Modifica**
Set destwB = ThisWorkbook
Set destSH = destwB.Sheets(sFoglio\_Destinazione)
sFile = Most\_RecentFile(sPercorso)
If Not sFile = vbNullString Then
sStr = Replace(sFile, "csv", "txt")
On Error Resume Next
Name sFile As sStr
On Error GoTo 0
Set srcWB = Workbooks.Open(sStr)
Set srcSH = srcWB.Sheets(1)
With srcSH
LRow = LastRow(srcSH, .Columns(1))
Set srcRng = .Range("A1:A" & LRow)
arrIn = srcRng.Value
arrHeaders = Split(Replace(srcRng.Rows(1).Value, Chr(34), vbNullString), ",")
destSH.Cells(1).Resize(1, UBound(arrHeaders)+1).Value = arrHeaders
srcWB.Close Savechanges:=False
iCtr = 2
For i = 2 To UBound(arrIn)
bstr = arrIn(i, 1)
arrSplit = Split(bstr, ",")
Set destRng = destSH.Cells(iCtr, 1).Resize(1, UBound(arrSplit) + 1)
arrSplit(1) = Replace(arrSplit(1), Chr(34), vbNullString)
arrSplit(3) = Replace(arrSplit(3), Chr(34), vbNullString)
destRng.Value = arrSplit
iCtr = iCtr + 1
Next i
destRng.EntireColumn.AutoFit
End With
End If
End Sub
'-------->>
Public Function Most_RecentFile(sDirectory As String)
Dim sFileName As String
Dim MostRecentFile As String
Dim MostRecentDate As Date
Dim sFileSpec As String
sFileSpec = "\*.csv"
sFileName = Dir(sDirectory & sFileSpec)
If sFileName <> "" Then
MostRecentFile = sFileName
MostRecentDate = FileDateTime(sDirectory & sFileName)
Do While sFileName <> ""
If FileDateTime(sDirectory & sFileName) > MostRecentDate Then
MostRecentFile = sFileName
MostRecentDate = FileDateTime(sDirectory & sFileName)
End If
sFileName = Dir
Loop
End If
Most\_RecentFile = MostRecentFile
End Function
'--------->>
Public Function LastRow(SH As Worksheet, _
Optional Rng As Range, \_
Optional minRow As Long = 1)
If Rng Is Nothing Then
Set Rng = SH.Cells
End If
On Error Resume Next
LastRow = Rng.Find(What:="\*", \_
After:=Rng.Cells(1), \_
Lookat:=xlPart, \_
LookIn:=xlFormulas, \_
SearchOrder:=xlByRows, \_
SearchDirection:=xlPrevious, \_
MatchCase:=False).Row
On Error GoTo 0
If LastRow < minRow Then
LastRow = minRow
End If
End Function
'<<========
Sospetto che possano emergere ulteriori dettagli che richiederanno modifiche a questo codice, ma è probabile che siano minori e non dovrebbero alterare l'approccio di base..
Per il momento ho testato questo codice con i dati contenuti nel file che hai caricato su Microsoft OneDrive e ottengo i seguenti risultati:
===
Regards,
Norman