Just nu i M3-nätverket
Gå till innehåll

Läsa in rader till Excel från en textfil


Grosvenor

Rekommendera Poster

Hej

 

Har nyligen börjat titta på det här med VBA och har stött på ett problem. Jag vill importera delar av en textfil till Excel. Jag vet att importen ska börja på rad 64 men sen är det olika hur många rader som ska importeras, normalt ca 5-20 rader, det som kommer efter det vill jag inte ha med.

Jag hade tänkt mig en InputBox för det men hur gör jag avgränsningen för att bara få med dessa rader?

Tacksam om någon har något tips!!!

 

// Lennart

 

 

Länk till kommentar
Dela på andra webbplatser

Man kan bygga en ny bro för att ta sig över ån eller använda den som redan finns. Den nya kanske blir rakare men den gamla är stabilare.

 

Dvs använd Excels inbyggda verktyg för att importera textfiler. Med detta importera till ett tomt blad, eller använd existerande fråga om fil ska importeras om och om igen.

Arbeta sedan med det som har importerats. Ett enkelt sätt är att med formler plocka ut de värden som ska vidare i nästa steg och kopiera resultatet av dessa formler. Då blir mängden kod som behövs ganska liten.

 

Visst, det går att läsa in via VBA helt och hållet om man så vill men tror det ovan kan vara en lämplig väg.

Länk till kommentar
Dela på andra webbplatser

Man kan bygga en ny bro för att ta sig över ån eller använda den som redan finns. Den nya kanske blir rakare men den gamla är stabilare.

 

Dvs använd Excels inbyggda verktyg för att importera textfiler. Med detta importera till ett tomt blad, eller använd existerande fråga om fil ska importeras om och om igen.

Arbeta sedan med det som har importerats. Ett enkelt sätt är att med formler plocka ut de värden som ska vidare i nästa steg och kopiera resultatet av dessa formler. Då blir mängden kod som behövs ganska liten.

 

Visst, det går att läsa in via VBA helt och hållet om man så vill men tror det ovan kan vara en lämplig väg.

Jo, det går att använda Excels inbygda verktyg men mina problem är att raderna jag vill importera kan se ut på två olika sätt och dels att det totala antalet rader ofta är över 1000 men jag vill bara ha "mina" ca 20 rader. Jag vill med andra ord få in mina rader i Excel för att fortsätta arbeta med dem där.

 

// Lennart

Länk till kommentar
Dela på andra webbplatser

Mmh, okej.

 

Då kanske VBA är ett bättre verktyg.

I praktiken är VBA samma som Visual Basic men med vissa begränsningar/tillägg. Dvs filhantering i VBA är ungefär samma som i VB dvs du kan söka tekniker både inom VB och VBA.

 

Här har du några grundläggande exempel

http://stackoverflow.com/questions/11528694/read-parse-text-file-line-by-line-in-vba

på hur du kan läsa in text.

 

Mitt tips vad gäller all programmering är att bryta ned allt i små delar du kan, dvs skapa en rutin som returnerar data från din fil, en rutin som gör något med dessa data osv.

En rutin som kanske startar allt via en Inputbox.

 

Hur mycket hjälp behöver du?

Länk till kommentar
Dela på andra webbplatser

Mmh, okej.

 

Då kanske VBA är ett bättre verktyg.

I praktiken är VBA samma som Visual Basic men med vissa begränsningar/tillägg. Dvs filhantering i VBA är ungefär samma som i VB dvs du kan söka tekniker både inom VB och VBA.

 

Här har du några grundläggande exempel

http://stackoverflow.com/questions/11528694/read-parse-text-file-line-by-line-in-vba

på hur du kan läsa in text.

 

Mitt tips vad gäller all programmering är att bryta ned allt i små delar du kan, dvs skapa en rutin som returnerar data från din fil, en rutin som gör något med dessa data osv.

En rutin som kanske startar allt via en Inputbox.

 

Hur mycket hjälp behöver du?

Hur mycket hjälp, antagligen en hel del :-) men jag börjar med det jag fick och tittar på det. Återkommer säkert

Länk till kommentar
Dela på andra webbplatser

Hur mycket hjälp, antagligen en hel del :-) men jag börjar med det jag fick och tittar på det. Återkommer säkert

 

Med hjälp av olika sidor på internet så har jag hittat detta (ändrat till mina förutsättningar)

 

Sub OppnaPBNFil()

 

    'deklarera variabler

        Dim strFil As String

        ChDir "C:\Users\Lennart\Dropbox\VBA\Formkurva\PBN_Filer"

        

    'hämtar in vilken fil som skall öppnas

        strFil = Application.GetOpenFilename

    On Error GoTo 99

     

    'öppnar filen

        Workbooks.OpenText fileName:=strFil, _

        Origin:=xlWindows, StartRow:=65, _

        DataType:=xlDelimited, _

        TextQualifier:=xlDoubleQuote, _

        ConsecutiveDelimiter:=False, _

        Tab:=False, Comma:=False, Space:=False, Other:=False

    

99:

End Sub

 

 

Här styr jag i alla fall från vilken rad jag ska läsa in men kan jag använda detta på något sätt för att bestämma hur många rader jag ska läsa in?

Jag skickar med filen också om det hjälper till. Det är alltså raderna 65-78 som jag vill läsa in denna gång. Det är en resultatlista så antalet rader som jag vill läsa in beror på hur många som varit med i tävlingen.

Eller kan jag på något annat sätt filtrera ut de rader jag är ute efter?

 

Hoppas på hjälp

2016-07-13.txt

Länk till kommentar
Dela på andra webbplatser

Jag förespråkar alltid att man ska hålla det så enkelt som möjligt, läs in hela och klipp bort det du inte vill ha, detta under förutsättning att du inte kommer att läsa in textfilen flera ggr per dag, då hade jag velar skapa en optimal lösning, desto mer optimering ju mindre kontroll har man själv.

 

Är det någon speciell information som är sökbar på de rader som du inte vill ha med? Då kanske man kan fixa till det ganska enkelt genom att först läsa in hela textfilen och sen låta excel automatiskt klippa bort det du inte vill ha kvar efter inläsning.

 

Är det bara 1000 rader du ska läsa in så tar det ingen speciell tid för excel att läsa in såvida det inte är väldigt många kolumner.

Länk till kommentar
Dela på andra webbplatser

Bra sagt Tune, bästa lösningen är så lite intelligens som möjligt i kod och så mycket som möjligt i Excel.

Länk till kommentar
Dela på andra webbplatser

Typ som

Bok1.xlsx

 

På detta lägga formler som bryter isär data i kolumner. Alternativ låta det ske redan vid importen.

 

 

Länk till kommentar
Dela på andra webbplatser

Typ som

attachicon.gifBok1.xlsx

 

På detta lägga formler som bryter isär data i kolumner. Alternativ låta det ske redan vid importen.

Jag tackar så mycket för dessa svar och att ni svarar så snabbt!! Jag är nöjd med detta men har fått blodad tand för det här och återkommer säkert.

Återigen stort tack

Länk till kommentar
Dela på andra webbplatser

den fråga som ligger på bladet nu sparas med bladet. Du kan uppdatera den manuellt eller via knapp som startar kod.

 

Iochmed att data i frågan ändras är det naturliga att även lägga på en kopiering av resultatet till annat blad/annan tabell.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...