Come importare un sottoinsieme di record da un file di testo

Gabriele si chiede come importare un sottoinsieme di un file di testo in Excel, a seconda del valore di un particolare campo. Ad esempio, potrebbe voler importare solo i record che contengono una “s” nella colonna 5 di ciascun record nel file di testo.

Esistono diversi modi in cui puoi affrontare questo compito. Uno è che potresti semplicemente importare l’intero file di testo, ordinare i record ed eliminare quelli che non desideri. Questa è forse l’opzione più semplice se devi elaborare un solo file e l’intero file può essere contenuto in un singolo foglio di lavoro.

Un altro approccio consiste nell’utilizzare una macro (questo è quello che trovo più veloce e più semplice, in particolare se è necessario importare parecchie volte lo stesso tipo di file). La macro può aprire il file di testo, leggere ogni riga e quindi determinare se le informazioni in quella riga dovrebbero essere aggiunte o meno al foglio di lavoro. Ecco un esempio che aprirà un file denominato “MioFile.txt” e quindi inserirà i dati in un nuovo foglio di lavoro iniziando dalla prima riga.

 

Sub ReadMyFile()
    Dim R As Integer
    Dim C As Integer
    Dim sDelim As String
    Dim sRaw As String
    Dim ReadArray() As String
    sDelim = ";"     ' Impostalo su vbTab se il file è delimitato da tabulazioni
    Worksheets.Add
    Open "MioFile.txt" For Input As #1
    R = 1
    Do While Not EOF(1)
        Line Input #1, sRaw
        ReadArray() = Split(sRaw, sDelim, 20, vbTextCompare)
        If ReadArray(4) = "s" Then
            For C = 0 To UBound(ReadArray)
                Cells(R, C + 1).Value = ReadArray(C)
            Next C
            R = R + 1
        End If
    Loop
    Close #1
End Sub

 

 

Per utilizzare la macro, è sufficiente modificare il nome del file in modo che corrisponda al file che si desidera elaborare. Ti consigliamo inoltre di modificare la variabile sDelim per assicurarti che corrisponda a qualsiasi cosa venga utilizzata come delimitatore nei tuoi record. Per come è scritto ora, si presuppone che il delimitatore sia un punto e virgola, ma potresti cambiarlo in vbTab se stai effettivamente lavorando con un file delimitato da tabulazioni. Una volta completata la macro, nel nuovo foglio di lavoro saranno presenti solo i record con un singolo carattere “s” minuscolo.

Un altro approccio consiste nell’utilizzare la funzionalità Power Query di Excel. Si tratta di un componente aggiuntivo gratuito di Microsoft, disponibile per alcune varianti di Excel 2010 ed Excel 2013. Puoi scaricare (e scoprire quali varianti sono supportate) da questo indirizzo.

A partire da Excel 2016, Power Query è integrato nel programma. Se utilizzi questa versione di Excel o una ancora più recente, segui questi passaggi:

  1. Visualizza la scheda Dati della barra multifunzione.
  2. Fai clic sullo strumento Nuova query (Excel 2016) o sullo strumento Recupera dati (versioni successive di Excel) nel gruppo Recupera e trasforma dati. Excel visualizza alcune opzioni.
  3. Fai clic su Da file > Da testo/CSV. Excel visualizza la finestra di dialogo Importa dati, che assomiglia molto a una finestra di dialogo Apri standard.
  4. Individua e seleziona il file CSV che desideri importare in Excel.
  5. Fai clic su Importa. Excel mostra un’anteprima dei dati.
  6. Utilizza il pulsante “Trasforma dati“. Excel carica i dati in una finestra di Power Query con pulsanti di filtro disponibili per ogni campo. A questo punto, indipendentemente dalla versione di Excel che stai utilizzando, puoi utilizzare i filtri per specificare una query (ovvero, impostare una definizione di quali record devono essere importati). Quando farai clic su Chiudi e carica, i record verranno recuperati dal file e la query può essere salvata per un uso futuro.

 

Ora puoi lavorare con i dati in Excel.

 

 

Tags: , , , , , , , , , , , , , ,

Ti è stato utile?