Oprettet ons. d. 10. marts 2010 kl. 07:35:46

mccookie
mccookie (22.837 point. Point ude: 660)

Import og behandling af data

Hej

Jeg har en variabel mængde data, som jeg ønsker at kunne præsentere "pænt". Data består af en rå fil fra en database med oplysninger om hændelser i et vaskeri.

Jeg håbede at man kunne lave en makro, hvori man importerede alle data. Herefter tyggede den lidt på det og sorterede det og præsenterede det "enkelt".

Data vil være formateret sådan:

Maskine nr | Timestample | Day of year | Måneds nr. | Price | Program |

Jeg ønsker ikke en færdig løsning, da jeg ikke selv lære noget..... så lidt how to, step by step....

Nogle der kan og vil hjælpe?

Skrevet ons. d. 10. marts 2010 kl. 10:46:28| #1

supertekst
supertekst (95.044 point)
supertekst-it.dk
Kunne en vel kommenteret/struktureret "færdig-løsning" accepteres?

Hvilen filtype er "rådata"?

Skrevet ons. d. 10. marts 2010 kl. 10:52:53| #2

mccookie
mccookie (22.837 point)
Hej Supertekst

Naturligvis kan en kommenteret løsning accepteres ;o)

Data ligger i en rå tekstfil.

Skrevet ons. d. 10. marts 2010 kl. 11:01:11| #3

supertekst
supertekst (95.044 point)
supertekst-it.dk
Ok - har du mulighed for at sende en kopi af denne fil?

Mailadr. under profil.

Skrevet ons. d. 10. marts 2010 kl. 11:06:15| #4

mccookie
mccookie (22.837 point)
Hej Supertekst

Du kan også få den her:

        timestample        | machineid |  cardid  | balance | option | price | state | weigth | program |  tenantid  | doy | month | dow | hour
----------------------------+-----------+----------+---------+--------+-------+-------+--------+---------+--------------+-----+-------+-----+------
2010-02-09 02:15:01.292+01 |        0 | 17038450 |        |        |    0 |    6 |        |        | 605000000908 |  40 |    2 |  2 |    2


Den vil så ligge en i tekstfil dog med nogle flere poster ;o)

Skrevet ons. d. 10. marts 2010 kl. 11:10:36| #5

mccookie
mccookie (22.837 point)
Hej igen

Jeg har sendt dig en mail med lidt mere data ;o)

Skrevet ons. d. 10. marts 2010 kl. 13:08:22| #6

mccookie
mccookie (22.837 point)
Hej Peter

Det er modtaget og ser rigtig fint ud....

Nu ville jeg jo gerne at den så kunne:

Sortere på maskine nr.
og samle posterne efter timefordeling.

Klokketime(hour)
00: 1 start
01: 3 starter etc.

Starter pr. dag:
DOY: Starter pr. maskine pr. dag

Skrevet fre. d. 12. marts 2010 kl. 10:19:52| #7

supertekst
supertekst (95.044 point)
supertekst-it.dk
Rem Version 2 - 12/3-10
Rem ===================
Const tekstFilNavn = "output.test.txt"
Const hour0kolonne = 15                            'kolonne "O"

Const systemArkNavn = "System"
Dim arkSys As Worksheet

Dim arkTot As Worksheet
Const totalArkNavn = "Totaler"

Dim tekstFilMappe As String

Dim ræk As Long, kolonne As Byte, antalRækker As Long
Public Sub IndlæsOgOrganiser()
On Error GoTo fejl

    Set arkSys = ActiveWorkbook.Sheets(systemArkNavn)
    arkSys.Activate
   
    nulstilData                                    'kalder sub-rutinen, "som navnet siger"
   
    findMappeMedTekstfil                            'kalder sub-rutinen, "som navnet siger"
   
    ræk = 1                                        'start-række for de indlæste data
    kolonne = 1                                    'start-kolonne -"-
   
    Application.ScreenUpdating = False              'slå skærm opdatering fra
   
    indlæsTekstFil                                  'kalder sub-rutinen, "som navnet siger"
   
    sorterIflgMaskine
   
    optællingPrMaskine
   
    Columns.AutoFit                                'tilpas kolonnebredde
   
    opbygTotaler
   
    Application.ScreenUpdating = True

    Exit Sub
   
fejl:
    Stop
    Resume Next
End Sub
Private Sub findMappeMedTekstfil()
    On Error GoTo fejl1
   
    Application.Dialogs(xlDialogOpen).Show
        tekstFilMappe = CurDir
       
        If Right(tekstFilMappe, 1) <> "\" Then
            tekstFilMappe = tekstFilMappe + "\"
        End If
    Exit Sub
   
fejl1:
    Resume Next
End Sub
Private Sub nulstilData()
    Range("A2:IV65000").Select
    Selection.ClearContents
    Range("A1").Select
End Sub
Private Sub indlæsTekstFil()
Dim linje As String
    Open tekstFilMappe + tekstFilNavn For Input As #1        'åbner inddata filen - tekstfiler identificeres med et nr (#1)
   
Rem Læs overskrift fra linje 1 - spring linje 2 over
        Input #1, linje                            'læs en hel linje ind (overskriften)
        indsætIregneArk linje                      'kalder sub-rutinen, "som navnet siger" - indlæste linje overføres
        Input #1, linje                            'indlæs linje 2 (skal ikke anvendes)
       
Rem læs resten indtil EOF
        While Not EOF(1)                            'sålænge der er linjer - læs & indsæt
            Input #1, linje
            indsætIregneArk linje                  'kalder sub-rutinen, "som navnet siger" - indlæste linje overføres
        Wend
    Close #1                                        'lukker tekstfilen
   
    antalRækker = ræk - 1
End Sub
Private Sub indsætIregneArk(linje)
Dim opdeltLinje As Variant, del As Byte
    opdeltLinje = Split(linje, "|")                'den indlæste linje opsplittes efter "|"
   
    For del = 0 To UBound(opdeltLinje)              'opdeltlinje indeholder nu et "antal rum", der er bestemt af opsplitningen
        Cells(ræk, kolonne) = Trim(opdeltLinje(del)) 'hvert "rum" indsættes i regnearket
        kolonne = kolonne + 1
    Next del
   
    ræk = ræk + 1                                  'alle "rum" indsæt - forøg rækkenr - reset kolonne
    kolonne = 1
End Sub
Private Sub sorterIflgMaskine()                    'sorter området: A2-Nsidsterække / Feltet MaskinNr
    Range("A2:N" & CStr(antalRækker)).Sort Key1:=Range("B2"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
End Sub
Private Sub optællingPrMaskine()                    'timeNr anvendes til placering af 1-tal
Dim timeNr As Byte
    For ræk = 2 To antalRækker
        timeNr = Cells(ræk, 14)
        pt = Cells(ræk, hour0kolonne + timeNr).Value
        Cells(ræk, hour0kolonne + timeNr).Value = Cells(ræk, hour0kolonne + timeNr).Value + 1
    Next ræk
End Sub
Private Sub opbygTotaler()                          'opbygges på arket Totaler
Dim maskinnr As Integer, totalRække As Integer, fraKolonne As Byte

    Set arkTot = ActiveWorkbook.Sheets(totalArkNavn)
   
    nulstilTotArk
   
    totalRække = 2
   
    For ræk = 2 To antalRækker
        fraKolonne = hour0kolonne
   
        If ræk = 2 Then
            maskinnr = Cells(ræk, 2)                'kolonne B
            overførTilTotArk maskinnr, ræk, totalRække, fraKolonne
        Else
            If Cells(ræk, 2) = maskinnr Then
                overførTilTotArk maskinnr, ræk, totalRække, fraKolonne
            Else
                maskinnr = Cells(ræk, 2)
                totalRække = totalRække + 1
                overførTilTotArk maskinnr, ræk, totalRække, fraKolonne
            End If
        End If
    Next ræk
   
    indsætTotalFormler totalRække + 1
End Sub
Private Sub nulstilTotArk()                        'slet indhold af totallinier
    arkTot.Range("A2:Z1000").ClearContents
End Sub
Private Sub overførTilTotArk(maskinnr As Integer, ræk As Long, totalRække As Integer, fraKolonne As Byte)
Dim totalkolonne As Byte
    With arkTot
        .Cells(totalRække, 1) = maskinnr
       
        For totalkolonne = 2 To 25
            .Cells(totalRække, totalkolonne).Value = .Cells(totalRække, totalkolonne).Value + arkSys.Cells(ræk, fraKolonne).Value
            fraKolonne = fraKolonne + 1
        Next totalkolonne
    End With
End Sub
Private Sub indsætTotalFormler(ræk)
Dim kol As Byte, kolonneBogstav As String
    With arkTot
        For kol = 2 To 25
            kolonneBogstav = Chr(kol - 1 + 65)
            .Cells(ræk, kol).Formula = "=Sum(" & kolonneBogstav & "2:" & kolonneBogstav & CStr(ræk - 1) & ")"
        Next kol
       
        .Cells(ræk, kol).Formula = "=Sum(B" & CStr(ræk) & ":Y" & CStr(ræk) & ")"
       
        .Columns.AutoFit
    End With
End Sub

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

insert user rating fra nettet... fx IMDb.com

Oprettet den 30. juli 2010 kl. 22.41
c_skytte giver 150 point for svar | Giv et svar »

Point til supertekst

Oprettet den 30. juli 2010 kl. 15.49
gammer giver 40 point for svar | Giv et svar »

Trække fil navn ud af variabel (makro)

Oprettet den 30. juli 2010 kl. 13.46
gammer giver 60 point for svar | Giv et svar »

Seneste guides

100% højde med CSS i alle browsere
XML
Autocad / 3D Max / Revit til Salg.





Tips & Tricks fra PC World

Teaser billede

Sådan får du mest ud af batteriet på din bærbare

Batterierne i den bærbare lever sjældent op til forventningerne, men det er ikke altid batteriernes skyld. Se her hvordan du får mest muligt ud af dine batterier.


Anmeldelser fra PC World

Teaser billede

GTX460: Grafikkort med fin ydelse til rimelige penge

De store grafikkort løber med opmærksomheden, men det er i mellemklassen at de gode køb findes. Et af dem er det helt nye Nvidia GTX460. Se kortets resultater her.


Seneste blogindlæg

Teaser billede

Nu kan du slettes

Det sker af og til at en bruger ønsker at slette sin profil her på Eksperten. Det har vi haft svært ved, men nu kan du gøre det nemt og enkelt. Alt du skal gøre er at logge ind, gå ind på...


Nyheder fra PC World

Teaser billede

Test: Stream nye spil til gamle computere

Det er slut med at investere tusindvis af kroner i dyr hardware for at kunne spille de nyeste spil - amerikansk firma lader stor serverfarm klare arbejdet og streamer spillene til dig via nettet....


Nyheder fra Computerworld

Teaser billede

Test din viden med Computerworlds store sommerquiz

4. del: Brug agurketiden til at få opdateret din viden om it-branchen, og test for sjov om kollegerne på ferie eller derhjemme er lige så skarpe. Computerworld quizzer hver uge hele sommeren.



Kurser
Samarbejdspartnere

Udgiver · © 2010 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301