Avatar billede andersen_1606 Nybegynder
28. september 2004 - 00:30 Der er 11 kommentarer og
1 løsning

Filformat indlæsning, VBA

Hej Experter.

Jeg har brug for input til VBA kode. Jeg har en tab sep. fil som ser således ud:
sko<tab>rød<tab>43
sko<tab>blå<tab>32
støvle<tab>gul<tab>23
sko<tab>blå<tab>33

Hvordan indlæses den i en matrix, så der senere kan manipuleres med denne?
Hvordan oprette en pivottabel så så de forskellige fodtøjstyper har hver sin matrix?

Der er pt ca 63000 linier (er der en begrænsning mht dette?)

På forhånd tak.
Avatar billede bak Forsker
28. september 2004 - 08:10 #1
Er der overskrifter i øverst i filen ?
Avatar billede andersen_1606 Nybegynder
28. september 2004 - 23:42 #2
Der vil typisk være en overskrift a la, ellers sættes det ind:
fodtøjstype<tab>farve<tab>størrelse

Til pivotdelen kan jeg se, at det vil være formålstjenesteligt.

Bemærk, jeg er ikke klar over hvordan linie afsluttes mht eol eller cr.
Avatar billede sjap Praktikant
30. september 2004 - 10:55 #3
Med nedenstående kode kan du hente filen ind i Excel.

Sub ImportFraFil()

myFile = Application.GetOpenFilename("Text Files,*.txt")
Workbooks.OpenText FileName:=myFile, ConsecutiveDelimiter:=True, Tab:=True
Range("A1").FormulaR1C1 = "Fodtøjstype"
Range("B1").FormulaR1C1 = "Farve"
Range("C1").FormulaR1C1 = "Størrelse"

End Sub

De sidste tre linier skriver en overskrift. Hvis der allerede er en overskrift i filen, kan du blot slette dem.

63000 linier er ikke noget problem, men det er godt nok tæt på; Grænsen i Excel er 65536.
Avatar billede andersen_1606 Nybegynder
30. september 2004 - 17:16 #4
Tak - der læses godt nok ind, den reelle problemstilling er, at det er tab sep, og det ønskes en matrix med en værdi pr variabel. Jeg forestiller mig indlæsning på linieniveau med en 3 seperate værdier pr linie.
Vil antage at det er hurtigere med ændringer i en matrix fremfor på celle niveau.

Mht 65k, så er jeg bekendt med antal linier, men gælder dette også hvis man laver en matrix?
Avatar billede sjap Praktikant
30. september 2004 - 17:37 #5
Så må jeg indrømme, at jeg ikke forstår, hvad du mener med matrix. Åh, vil du have dem læst ind i en variabel i VBA?
Avatar billede sjap Praktikant
30. september 2004 - 18:01 #6
Hvis min ovenstående kommentar er korrekt, så kan nedenstående kode bruges til at lægge data ind i en matrix-variabel.

Funktionen læser først data ind i regnearket og derefter over i en matrice. Denne fremgangsmåde er valgt, da det umiddelbart er den letteste måde at læse en tab-separeret fil (en kommasepareret kan lettere læses direkte ind i matricen).

Sub FilTilMatrix()
Dim DataMatrix() As Variant
Dim Antal, i As Integer

myFile = Application.GetOpenFilename("Text Files,*.txt")
Workbooks.OpenText FileName:=myFile, ConsecutiveDelimiter:=True, Tab:=True
Antal = Range("A65536").End(xlUp).Row

ReDim Preserve DataMatrix(3, Antal)

For i = 1 To Antal
    DataMatrix(1, i) = Range("A" & i).Value
    DataMatrix(2, i) = Range("B" & i).Value
    DataMatrix(3, i) = Range("C" & i).Value
Next
Range("A1:C" & Antal).Clear

'Og så må du så skrive alt det du vil gøre ved matricen her

End Sub
Avatar billede andersen_1606 Nybegynder
30. september 2004 - 22:27 #7
Mange tak for hjælpen.

Din antagelse er helt korrekt - det var reelt det, som jeg forespurgte.

Jeg kan faktisk selv bestemme om det er tab eller kommasepareret, og hvis jeg kan gøre det lettere med kommaseparet vil jeg hellere det - især hvis jeg undgår a skrive i celler fremfor direkte i matrixen.

Vil du smide et svar, så jeg kan give point?

Hvis du får en voldsom trang til at lave komma varianten, så vil jeg være glad for det.

Tak for hjælpen.
Avatar billede sjap Praktikant
30. september 2004 - 23:03 #8
Jeg har ikke lige haft mulighed for at afprøve den, og jeg har faktisk slet ikke nogen erfaring med den, men det skulle være noget i den her retning (og så slipper du jo for Excel's liniebegrænsning)

Sub FilTilMatrix2()
Dim DataMatrix(), SkoMatrix(), StøvleMatrix() As Variant
Dim Antal, i As Integer

myFile = Application.GetOpenFilename("Text Files,*.txt")
Open myFile For Input As #1

Antal = 0
Do While Not EOF(1)
    Antal = Antal + 1
    ReDim Preserve DataMatrix(3, Antal)
    Input #1, DataMatrix(1, i), DataMatrix(2, i), DataMatrix(3, i)
Loop
Close #1

End Sub
Avatar billede andersen_1606 Nybegynder
05. oktober 2004 - 00:45 #9
Tak for hjælpen - du får point.
Avatar billede andersen_1606 Nybegynder
05. oktober 2004 - 00:53 #10
Jeg kan ikke få sitet til at godkende, at jeg trykker på accept . . . hvad skal jeg gøre? Har også prøvet afvis . . .
Avatar billede sjap Praktikant
05. oktober 2004 - 08:50 #11
Du skal markere mit navn - og derefter trykke Accept :0)
Avatar billede andersen_1606 Nybegynder
05. oktober 2004 - 12:36 #12
Vupti, takker.
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