Lavorare con dati esterni (2)

Ultima modifica: 29-05-2016

 

Trasferimento dei dati in un file di testo e recupero dati dal file di testo

Perchè lavorare con dati esterni ad Excel?

In alcune delle E-Mail che ricevo mi viene chiesto come alleggerire files Excel che quasi collassano per la grande quantità di dati che si debbono trattare: qualcuno parla di migliaia di record.

La mia esperienza non mi ha mai portato a trattare un così vasto numero di dati ma mi ha insegnato che è dura lavorare ed elaborare grosse quantità di dati residenti sui fogli di lavoro di Excel. Meglio lavorare con le matrici prelevando magari i dati dai fogli di Excel ed organizzarli in matrici. In questo modo le elaborazioni vengono eseguite in tempi nettamente più veloci.

Perciò, se sui fogli di Excel abbiamo grosse quantità di dati meglio tirarli fuori, magari in un file di testo. Le successive elaborazioni ed eventuali aggiornamenti di questi dati si possono eseguire con tecniche idonee a trattare con dati esterni.

Attenzione

Quel che andrò ad esporre esige un minimo di cautela da parte vostra.

Quindi se volete seguire questi suggerimenti procuratevi di eseguire prima una copia di sicurezza dei vostri dati per evitare perdite accidentali di dati che altrimenti possono essere preziosi.

Questa avvertenza perchè, se qualcosa va storto, non ve la prendiate con me.

Questa volta voglio mostrarvi come trasferire i dati in un file di testo e come recuperarli.

Nella pagina precedente esempio abbiamo visto come interagire con un file di testo, quindi non mi dilungherò sulle tecniche da usare ma passeremo subito al codice da usare.

Per trasferire i nostri dati in un file esterno potremo usare questo codice che andremo a scrivere in un Modulo Standard del VBA (ALT + F11 per andare in ambiente VBA, Clic destro sulla finestra VBAProject e scelta delle voci Inserisci ---> Modulo).

Sub scriviSuFile()
' trasferimento dei dati dal foglio di Excel in un file di testo
Dim Filenum, Cartella, NomeFile
Dim R, C, R1, C1
Cartella = ThisWorkbook.Path & "\"
NomeFile = Cartella & "anagrafica4.txt"
With Range("A1").CurrentRegion
R1 = .Rows.Count
C1 = .Columns.Count
Filenum = FreeFile()
Open NomeFile For Output As #Filenum
For R = 1 To R1
For C = 1 To C1 - 1
Print #Filenum, .Cells(R, C) & "|";
Next
Print #Filenum, .Cells(R, C)
Next
Close #Filenum
End With
End Sub

Per eseguire l'operazione inversa, caricare i dati da un file di testo in un foglio di Excel, potremmo usare questo codice.

Sub LeggiDaFile()
' trasferimento dei dati dal file di testo al foglio di lavoro
Dim Cartella As String, NomeFile As String
Dim R As Integer, C1 As Integer, C As Integer
Dim Filenum As Integer, Riga As String, Campi() As String
Cartella = ThisWorkbook.Path & "\"
NomeFile = Cartella & "anagrafica6.txt"
R = 0
Cells.ClearContents
Filenum = FreeFile
Open NomeFile For Input As #Filenum
Do
R = R + 1
Line Input #Filenum, Riga
Campi = Split(Riga, "|")
C = 0
For C1 = LBound(Campi) To UBound(Campi)
C = C + 1
Cells(R, C) = Campi(C1)
Next
Loop Until EOF(Filenum) = True
Close #Filenum
End Sub

Approfondendo queste due procedure siamo pronti per la prossima tappa che è quella che probabilmente può risolvere il problema di avere un file Excel più leggero e più veloce nell'eseguire le nostre elaborazioni e che consiste di richiamare i dati da un file di testo esterno in una matrice e trasferire i dati su un foglio di Excel solo se necessario.