Ole ha riscontrato un problema durante l’importazione delle informazioni in una cartella di lavoro di Excel. Sembra che i file che deve importare siano file di testo che in genere contengono migliaia e migliaia di record. Ole non ha bisogno della maggior parte delle righe di input, tuttavia, e normalmente le elimina una volta che i record vengono importati in Excel. Ole sta cercando un modo per eliminare i record indesiderati durante il processo di importazione, in modo che abbia meno lavoro da fare quando i dati sono nella sua cartella di lavoro.

Ci sono un paio di modi diversi in cui è possibile affrontare una soluzione a questo problema. Una soluzione consiste nell’usare Access come primo passaggio di importazione. Access gestirà facilmente le migliaia di record che desideri importare, anche se sono presenti più record di quelli che puoi importare in Excel. È possibile importare il file in Access, filtrare i record indesiderati e quindi esportare la tabella risultante come cartella di lavoro di Excel.

La soluzione migliore, tuttavia, potrebbe essere quella di bypassare completamente i filtri di importazione di Excel. Funziona benissimo se i tuoi dati di importazione, come quelli di Ole, si trovano in un file di testo. È possibile scrivere facilmente una routine di importazione in VBA e consentirle di elaborare il file di importazione. Ad esempio, considera la seguente macro:

Sub Import()

Dim sFile As String     Dim sUnwanted As String     Dim sDelim As String     Dim iRow As Integer     Dim iCol As Integer     Dim bBadRecord As Boolean     Dim iTemp As Integer

sFile = "d:\data.txt"

sUnwanted = "bad text"

sDelim = ","



Open sFile For Input As #1

iRow = 1     While Not EOF(1) 'Scan file line by line         iCol = 1         Line Input #1, sBuffer

' Check to see if should ignore record         bBadRecord = Instr(sBuffer, sUnwanted)



If Not bBadRecord Then             iTemp = Instr(sBuffer, sDelim)

While iTemp > 0                 With Application.Cells(iRow, iCol)

.NumberFormat = "@" 'Text formatting                     .Value = Left(sBuffer, iTemp-1)

End With                 iCol = iCol + 1                 sBuffer = Mid(sBuffer, iTemp+1, Len(sBuffer))

iTemp = Instr(sBuffer, sDelim)

Wend             If Len(sBuffer) > 0 Then                 With Application.Cells(iRow, iCol)

.NumberFormat = "@" 'Text formatting                     .Value = sBuffer                 End With             End If             iRow = iRow + 1         End If     Wend     Close #1 End Sub

Questa macro apre un file di dati e legge ogni record nel file. Controlla il record per assicurarsi che sia OK per l’importazione, quindi separa il record, in base a un delimitatore, e inserisce le informazioni nel foglio di lavoro corrente. È possibile modificare il nome del file di dati (la variabile sFile), il testo che indica un record non valido (variabile sUnwanted) e il delimitatore (variabile sDelim).

Ad esempio, supponiamo di avere un file di dati denominato Customers.txt. Questo file contiene tutti i record dei tuoi clienti, ma non desideri importare i record per i clienti con indirizzi all’interno degli Stati Uniti. Inoltre, i record nel file di dati utilizzano un carattere di tabulazione tra ogni campo. In questo caso, dovresti solo apportare le seguenti modifiche alle variabili all’inizio della macro:

sFile = "d:\Customers.txt"

sUnwanted = "United States"

sDelim = Chr(9)

Dopo aver eseguito la macro, il foglio di lavoro corrente contiene solo i dati desiderati.

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (8491) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 ed Excel in Office 365. Puoi trovare una versione di questo suggerimento per la vecchia interfaccia del menu di Excel qui: