Avatar billede kajikast Nybegynder
02. oktober 2004 - 10:05 Der er 5 kommentarer og
1 løsning

Tekstfiler og lopslag

Jeg har en tekstfil med mere end 65000 data rækker i. Kan jeg lave lopslag på den? hvilken type tekstfil skal jeg bruge? Hvordan skal lopslag se ud? Er der evt. andre måder?
Avatar billede sjap Praktikant
02. oktober 2004 - 10:15 #1
Jeg kender ikke nogen direkte metoder, men det kan selvfølgelig lade sig gøre at programmere i VBA. Det letteste er nok at importere tekstfilen og så lave opslaget med LOPSLAG her.
Avatar billede kajikast Nybegynder
02. oktober 2004 - 15:45 #2
Jeg kan jo ikke indlæse hele tekstfilen, da den har flere rækker end excel kan håndtere.
Avatar billede sjap Praktikant
02. oktober 2004 - 17:12 #3
Det må da være lige på grænsen for Excel kan jo godt klare lige lidt mere end 65.000. ;0)
Avatar billede sjap Praktikant
02. oktober 2004 - 17:56 #4
Om ikke andet, så fandt jeg lige på en måde at hente og dele din fil op på to ark. Så kan den jo i hvert tilfælde læses ind i Excel. Hvis det altså er nogen hjælp.

Sub OpenAndSplitFile()
Dim lngRow As Long
Dim test As Integer
Dim txt As String

Const RowsPerSheet = 65000  'Angiv antal rækker per faneblad (Max er 65536)

myFile = Application.GetOpenFilename("Text Files,*.txt")
Application.ScreenUpdating = False
Workbooks.OpenText FileName:=myFile, ConsecutiveDelimiter:=True, Tab:=True, StartRow:=1
With ThisWorkbook
    ActiveSheet.Move after:=.Worksheets(.Worksheets.Count)
End With
ActiveSheet.Name = "Ark2"
Rows(RowsPerSheet + 1 & ":65536").Delete
Application.DisplayAlerts = False
Workbooks.OpenText FileName:=myFile, ConsecutiveDelimiter:=True, Tab:=True, StartRow:=RowsPerSheet + 1
Application.DisplayAlerts = True
ActiveSheet.Move after:=ThisWorkbook.Worksheets(1)
ActiveSheet.Name = "Ark3"
Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub
Avatar billede kabbak Professor
05. oktober 2004 - 00:22 #5
I ThisWorkbook modulet


Private Sub Workbook_Open()
Call HentFil(OK)
End Sub

I et Modul, ikke et ark eller ThisWorkbook modulet

Public Data(100000, 2) As Variant
' ret 100000 til det antal rækker du maks får i filen
' ret 2 til det antal kolonner du har i filen -1

Public Function DataOpslag(Kriterie As Range, OpslagsCol As Integer, ResultatCol As Integer) As Variant
For I = 0 To UBound(Data)
If Str(Data(I, OpslagsCol)) = Str(Kriterie.Value) Then
DataOpslag = Data(I, ResultatCol)
Exit Function
End If
Next
DataOpslag = " Ikke fundet"
End Function
Public Sub HentFil(OK)
Dim I As Long, A As Integer, T As Integer, Temp As Variant
I = 0
Open "D:\Datafil.txt" For Input As #1 ' ret navnet til din datafil
Do
Line Input #1, Linie
Temp = Split(Linie, vbTab) ' ret VbTab til din data adskiller
If I = 0 Then
A = UBound(Temp)
End If
For T = 0 To A
Data(I, T) = Temp(T)
Next
I = I + 1
Loop Until EOF(1)
Close 1
End Sub


Kaldes med

= DataOpslag($A$1;0;2)
Hvor A1 har værdien du søger
0 er den første kolonne som den søger i
2 er den kolonne resultatet kommer fra

Så du kan søge på alle kolonner ( en af gangen ), og få resultatet på hvilken som helst kolonne
Avatar billede snoopidoo Praktikant
11. juli 2007 - 14:04 #6
Hej sjap.
Hvordan kan jeg bruge dette hvis min txt fil er på over 1 million linjer?
Jeg har oprettet et spørgsmål på det her:
http://www.eksperten.dk/spm/787105
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester