Importera textfiler till en Excel-arbetsbok med makro

Nivå: Avancerad

Importera textfiler till en Excel-arbetsbok? Hur gör man då? Läs vidare i den här bloggposten, så visar jag hur du importerar textfiler till en Excel-arbetsbok med hjälp av makro.  Textfilerna kan i princip importeras på två sätt:

  1. Man kan lägga varje textfil som en kolumn i ett Excel-ark
  2. Man kan lägga varje data från en textfil i en ny flik i ett Excel-ark

Vilket sätt man använder beror på vad man vill göra med de data man importerar. Jag skall visa exempel på bägge metoderna och hur man går tillväga.

Textfiler

Något om textfilerna. Oftast har textfilerna samma format som man vill importera. De är uppställda på samma sätt och följer samma mall. Det viktigaste är att datan är avskilda på ett likvärdigt sätt. Excel har många olika sätt att hantera textfilsdata . För ett tag sedan genomförde jag en dataimport på över 3000 textfiler med data till en Excel-arbetsbok.  I detta fall ville man ha in data enligt alternativ 1 ovan. Skall man importera stora mängder textfiler, måste man skriva ett makro som utför jobbet.

VBA-kod

 

Vi ska ta titta på ett makro i Excel som importerar data från textfiler. Först tittar vi på hur en import ser ut enligt alternativ 1. Som vanligt, starta Excel. Gå vi in i VBA-editorn med tangenterna Alt+F11, infoga en modul och lägg in följande kod:

 Sub ImporteraTextFil()
 Dim idx As Integer
 Dim fpath As String
 Dim fname As String
 Dim Counter As Integer

 idx = 0
 fpath = "C:\Test\MyTextFiles\"
 fname = Dir(fpath & "*.txt")
 
 While (Len(fname) > 0)
 IsEmpty (ActiveCell.Value)
 With ActiveSheet.QueryTables.Add(Connection:="TEXT;" _
 & fpath & fname, Destination:=Range("A1"))
 .Name = "a" & idx
 .FieldNames = True
 .RowNumbers = False
 .FillAdjacentFormulas = False
 .PreserveFormatting = True
 .RefreshOnFileOpen = False
 .RefreshStyle = xlInsertDeleteCells
 .SavePassword = False
 .SaveData = True
 .AdjustColumnWidth = True
 .RefreshPeriod = 0
 .TextFilePromptOnRefresh = False
 .TextFilePlatform = 437
 .TextFileStartRow = 1
 .TextFileParseType = xlDelimited
 .TextFileTextQualifier = xlTextQualifierDoubleQuote
 .TextFileConsecutiveDelimiter = False
 .TextFileTabDelimiter = False
 .TextFileSemicolonDelimiter = False
 .TextFileCommaDelimiter = False
 .TextFileSpaceDelimiter = False
 .TextFileOtherDelimiter = "|"
 .TextFileColumnDataTypes = Array(1, 1, 1)
 .TextFileTrailingMinusNumbers = True
 .Refresh BackgroundQuery:=False
 fname = Dir

 End With
 Wend
End Sub

Kommentar till VBA-koden i Excel ovan

Alternativ 1

Koden ovan importerar textfiler, enligt vad som kallas alternativ 1. Den markerade koden efter variabeln fpath är sökvägen till katalogen på enhet C, där textfilerna finns lagrade. Koden kör en While-loop vilket innebär att i detta fall skall alla filer i katalogen läggas in i Excelboken, därav villkoret som följer. Den inbyggda funktionen IsEmpty hjälper oss att lägga in nya textfiler i nästa tomma kolumn. Därefter kommer olika formateringsinställningar, för hur textfilerna är formaterade som används vid importen. Koden har en begränsning och det är att den kraschar om den stöter på en textfil som är tom och inte har data. För att det ska vara korrekt, får man skriva en felhanterare som fixar detta. Det är inte gjort i detta exempel.

Alternativ 2

Om vi vill ha att textfilerna läggs in enligt alternativ 2, byt ut raden med koden för IsEmpty, med följande kod:  Sheets.Add.Name = fname . Det är allt som behöver göras! Nu läggs varje textfil in på en ny flik i Excel!

Begränsningar

Exemplet är utfört på Excel version 2007. I Excel version 2007 kan ett kalkylblad innehålla 1 048 576 rader och 16 384 kolumner.

Referenser

Klicka här för att läsa mer om Importera eller exportera textfiler

Share