Avatar billede ducktop Nybegynder
10. marts 2008 - 11:30 Der er 6 kommentarer og
1 løsning

Nedskrivning af nummer og dato fra en mængde gentagende tal.

Jeg sidder med et ”stort” problem i Excel VBA, hvor jeg skal sortere nogle tal. Jeg har en lang række numre (ca. 17.000) hvor mange af dem går igen og op til over 100 gange. Jeg vil gerne have dem skrevet op så de kun optræder en gang. Da jeg ikke er vandt til at arbejde med VBA kan det godt være noget svært at få Sub’en til at gøre som jeg vil.

Der kan ses et eksempel på hvordan det skal se ud nederst.

Det kan være denne opgave er let for jer eksperter og hvis det er tilfældet så er der også en lille ekstraopgave hvis det skulle have interesse :-). Der er en datoer ud for hver nummer og første gang et nummer optræder skal der skrives en start dato (se tabel nedenunder), hvis nummeret optræder mere end en gang skal sidste dato skrives ud for slut.

Stamdata            output
Nr.    data                   
22    20070531    Nr.    start    slut
33    20070607    22    20070531    20070920
55    20070702    33    20070607    20070926
66    20070726    55    20070702    20070829
22    20070801    66    20070726    20070920
22    20070801    77    20070924    20070924
33    20070816    11    20070924    20070925
55    20070820    88    20070927    20070927
55    20070828           
55    20070829                   
66    20070907                   
33    20070920                   
22    20070920                   
66    20070920                   
77    20070924                   
11    20070924                   
33    20070925                   
11    20070925                   
33    20070926                   
88    20070927                   


Mange tak for hjælpen
Avatar billede supertekst Ekspert
10. marts 2008 - 23:06 #1
Hvor stort nr kan der stå i kolonne A?
Avatar billede supertekst Ekspert
10. marts 2008 - 23:34 #2
Forslag - koden anbringes i Ark1:
=================================

Dim antalRæk
Dim ws As Worksheet, outpRæk, nr, fundetRæk
Sub komprimeringAfNr()
    outpRæk = 2
   
    Set ws = ActiveWorkbook.Sheets("Ark1")
Rem beregn antal rækker
    antalRæk = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row - 1
   
Rem gennemløb af kolonne A
    With ws
        For ræk = 2 To antalRæk
            nr = .Cells(ræk, 1)
            dato = .Cells(ræk, 2)
           
Rem check om nr findes i forvejen
Rem Output skrives i KOLONNERNE D=Nr. E=Start F=Slut
Rem ================================================
            fundetRæk = findesNrIoutput(nr)
            If fundetRæk > 0 Then
                .Cells(fundetRæk, 6) = dato
            Else
                .Cells(outpRæk, 4) = nr
                .Cells(outpRæk, 5) = dato
                .Cells(outpRæk, 6) = dato
                outpRæk = outpRæk + 1
            End If
        Next ræk
    End With
   
    MsgBox ("Komprimering af Nr. er udført")
End Sub
Private Function beregnAntalRækker(arkNavn)
    Set ws = ActiveWorkbook.Worksheets(arkNavn)
    beregnAntalRækker = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row - 1
End Function
Private Function findesNrIoutput(nr)
Dim ræk
    With ws.Range("D2:D" & CStr(outpRæk))
        Set c = .Find(nr, LookIn:=xlValues, LookAt:=xlWhole)
            If Not c Is Nothing Then
                ræk = c.Row
                findesNrIoutput = ræk
            Else
                findesNrIoutput = 0
            End If
    End With
End Function
Avatar billede ducktop Nybegynder
11. marts 2008 - 08:24 #3
jeg kan ikke helt få det til at virke. Den skiver der er "Run-time error ´6´ overflow" lige efter jeg skal køre videre efter: dato = .Cells(ræk,2)

altså når jeg har kørt dette første gang:

    With ws
        For ræk = 2 To antalRæk
            nr = .Cells(ræk, 1)
            dato = .Cells(ræk, 2)

Ved du hvad der kan være galt? for lidt Ram?
Avatar billede supertekst Ekspert
11. marts 2008 - 08:37 #4
Det finder jeg ud af - det er ikke for lidt RAM. Det ville hjælpe, hvis du kunne sende de første 100 rækker fra din fil til: pb@supertekst-it.dk
Jeg har kun testet med de data, som du har vist på Eksp.
Avatar billede supertekst Ekspert
11. marts 2008 - 11:45 #5
Eller - send en mail- så returnerer jeg min model....
Avatar billede ducktop Nybegynder
11. marts 2008 - 17:58 #6
super det virker på min egen computer :-)
Avatar billede supertekst Ekspert
11. marts 2008 - 18:12 #7
Så kan vi jo godt lukke spørgsmålet.
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
Kurser inden for grundlæggende programmering

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