Avatar billede jens_frederik Nybegynder
31. marts 2008 - 15:29 Der er 3 kommentarer og
1 løsning

Forbedring af Visual Basic programmering - import mange csv filer

Hej
Jeg har engang fået lavet en visual Basic programmering her på eksperten.dk - og det fungerer super fint.
De rådata jeg arbejder med har nu ændret sig lidt - og så kunne jeg godt tænke min om nogen kunne hjælpe med at forbedre den kode jeg har nu?

Mine rådata i dag består en en masse informationer i starten af hver fil - og dem er jeg reelt ikke intresseret i for at lave kurver af selve rådataen.
Så hvis der er nogen der kan hjælpe mig med at lave en programmering, så jeg kan bestemme hvilken række data jeg skal starte med at hente data ind fra - vil det være super fint.
Det er fint med mig at jeg skal rette værdien i selv Visual Basic koden.
fx. Jeg har 20 filer med data jeg gerne vil se alle rådata på. I hver fil står den en bunke informationer i de første 25 linier - og mine rådata starter så først i linie 26. Så vil jeg gerne kunne taste tallet 26 - og så starte koden med at hente data i alle filerne i række 21 - og samler det hele i et regneark lige under hinanden.

Håber jeg har gjort mig forståelig nok - eller så spørge endelig.

Mvh

Jens Frederik

Her er koden  jeg har nu:


Public Sub HentData()
' Værtøj til at hente rådata fra Kapabilitetsundersøgelser
' Rådata hentes ind i det samme regneark

' Dimensionering af variabler
    Dim strFilNavn() As String, NO As Integer, I As Integer, RW As Long, Sdata As Variant
    Dim Linie(4) As String, Data As String, Sti As String
   
    NO = 1
   
    ' Skriv navnet på den sti hvor dine rådata findes
    Sti = "d:\prstand sammenlinge data\"
    ' Start makroen ved at taste F5
   
    ReDim Preserve strFilNavn(NO)
    strFilNavn(NO) = Dir(Sti & "*.CSV")    ' Hent den første filnavn.
   
    Do While strFilNavn(NO) <> ""  ' Start løkken
        If strFilNavn(NO) <> "." And strFilNavn(NO) <> ".." Then
            NO = NO + 1
        End If
        ReDim Preserve strFilNavn(NO)
        strFilNavn(NO) = Dir    ' Hent næste filnavn.
    Loop
   
    NO = NO - 1

    For I = 1 To NO
        Open Sti & strFilNavn(I) For Input As #1
        Line Input #1, Linie(1)    'US12345 (test1)
        Line Input #1, Linie(2)    'JFF00001
        Line Input #1, Linie(3)  'Testemne1
        Line Input #1, Linie(4)    ' overskrifter
              If Cells(1, 2) = "" Then ' tjekker om der er overskrifter i arket
            Sdata = Split(Linie(4), ",")
            Range(Cells(1, 2), Cells(1, UBound(Sdata) + 2)) = Sdata  ' Overskrifter
        End If
     
        Do Until EOF(1)
            Line Input #1, Data
            RW = Range("B65536").End(xlUp).Offset(1, 0).Row
            Sdata = Split(Data, ",")
            Cells(RW, 1) = Linie(2)
            Range(Cells(RW, 2), Cells(RW, UBound(Sdata) + 2)) = Sdata
        Loop
        Close 1
    Next
End Sub
Avatar billede kabbak Professor
31. marts 2008 - 19:30 #1
Prøv denne

Public Sub HentData()
' Værtøj til at hente rådata fra Kapabilitetsundersøgelser
' Rådata hentes ind i det samme regneark

' Dimensionering af variabler
    Dim strFilNavn() As String, NO As Integer, I As Integer, RW As Long, Sdata As Variant
    Dim Linie() As String, Data As String, Sti As String, X As Integer, UønskedeLinjer As Integer

    NO = 1

    UønskedeLinjer = 1 'RET HER TIL DET ANTAL LINJER DER SLAL HOPPES OVER

    ' Skriv navnet på den sti hvor dine rådata findes
    Sti = "d:\prstand sammenlinge data\"
    ' Start makroen ved at taste F5

    ReDim Preserve strFilNavn(NO)
    strFilNavn(NO) = Dir(Sti & "*.CSV")    ' Hent den første filnavn.

    Do While strFilNavn(NO) <> ""  ' Start løkken
        If strFilNavn(NO) <> "." And strFilNavn(NO) <> ".." Then
            NO = NO + 1
        End If
        ReDim Preserve strFilNavn(NO)
        strFilNavn(NO) = Dir    ' Hent næste filnavn.
    Loop

    NO = NO - 1

    For I = 1 To NO
        Open Sti & strFilNavn(I) For Input As #1

        For X = 1 To UønskedeLinjer    ' Start loop over uønskede linjer
            ReDim Preserve Linie(X)
            Line Input #1, Linie(X)
        Next    ' slut loop

        If Cells(1, 2) = "" Then    ' tjekker om der er overskrifter i arket
            Sdata = Split(Linie(2), ",")
            Range(Cells(1, 2), Cells(1, UBound(Sdata) + 2)) = Sdata  ' Overskrifter
        End If

        Do Until EOF(1)
            Line Input #1, Data
            RW = Range("B65536").End(xlUp).Offset(1, 0).Row
            Sdata = Split(Data, ",")
            Cells(RW, 1) = Linie(2)
            Range(Cells(RW, 2), Cells(RW, UBound(Sdata) + 2)) = Sdata
        Loop
        Close 1
    Next
End Sub
Avatar billede jens_frederik Nybegynder
01. april 2008 - 10:05 #2
Hej Kabbak

Mange tak for hjælpen - det var sikkert en nemt løstning - men det løser mit problem meget fint.
Vil du sende et svar - så får du dine velfortjente point?

Mvh

Jens Frederik
Avatar billede kabbak Professor
01. april 2008 - 10:26 #3
et svar ;-))
Avatar billede jens_frederik Nybegynder
01. april 2008 - 16:57 #4
Mange tak for hjælpen
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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