Avatar billede jochke Nybegynder
05. februar 2006 - 23:37 Der er 13 kommentarer

Udtrække data i dato interval.

Uge    Dag    Dato    Fra    Til    Timer    Bemærkning
52    søndag    01-Jan-06               
1    mandag    02-Jan-06               
1    tirsdag    03-Jan-06               
1    onsdag    04-Jan-06               
1    torsdag    05-Jan-06               

Jeg har et ark(Tider) med en række for hver dag, som ovenstående. I et andet ark(Udtræk) ønsker jeg, at kunne angive en fra og til dato. Kun de rækker der er imellem disse to datoer vises i arket Udtræk.

Altså lidt ala filter funktionen.
Avatar billede kabbak Professor
06. februar 2006 - 11:59 #1
Public Function FilterData(Dataområde As Range, Datokolonne, Fradato, tildato)
    Dim Uddata(), A1 As Long, A2 As Long, A3 As Long, I As Long, C As Long, X As Long
    X = 0
    A1 = Dataområde.Column
    A2 = Datokolonne.Column
    A3 = (A2 + 1) - A1
    Col = Dataområde.Columns(Dataområde.Columns.Count).Column

    Data = Dataområde
    ReDim Uddata(UBound(Data), Col - 1)
    For I = 1 To UBound(Data)
        If I = 1 Or (Data(I, A3) >= Fradato And Data(I, A3) <= tildato) Then
            For C = 0 To Col - 1
                Uddata(X, C) = Data(I, C + 1)
            Next
            X = X + 1
        End If
    Next
    For I = 1 To UBound(Uddata)
        For C = 0 To Col - 1
            If Uddata(I, C) = 0 Then Uddata(I, C) = ""
        Next
    Next
    FilterData = Uddata
End Function


I det ark hvor du skal have data over i, opretter du 2 celler hvor du skriver fradato og tildato i.

Nu markerer du så et område i dette ark der er lige så stor, som det områder du vil have data fra.

skriv så =FilterData(Ark1!A1:G20;Ark1!C1;I2;J2)
tryk CTRL +SHIFT +ENTER

så får du {} omkring formlen

ret I2 til din datofra celle og J2 til din dato til celle, inden du trykker CTRL +SHIFT +ENTER
Avatar billede jochke Nybegynder
07. februar 2006 - 09:59 #2
Jeg kan ikke lige få det til at spille. Nok fordi jeg ikke forstår det.

Funktionen har jeg smidt ind i Tools - Macro - VisualBasic Editor.

Jeg har to ark. Ark1 hedder Udtræk og Ark 2 hedder Tider. Datoafgrænsingen og filtreringen skal ske i arket Udtræk. Mens alle de rå data ligger i arket Tider. Jeg skriver fra og til dato i B1 og B2.

Jeg forstår så ikke resten af formlen =FilterData(Ark1!A1:G20;Ark1!C1;B1;B2)
Hvad er Ark1!A1:G20?
og Ark1!C1?
Avatar billede kabbak Professor
07. februar 2006 - 11:49 #3
Ark1!A1:G20? er området på dine rådata i arket Tider
Ark1!C1 er en celle i den kolonne der indeholder datoerne

Lige så stor et område som dine rådata er, skal du markere i Udtræk.
Da du bruger B1 og B2, skal du ned i række 3, med formlen.

Marker så fra A3 og lige så bred og lang som dine rådata.

skriv så, mens alle celler er markeret

=FilterData(Tider!A1:G20;Tider!C1;B1;B2)

Husk at rette Tider!A1:G20 til rådataområdet incl. overskrift, og Tider!C1 til en celle med datoer, inden du trykker

CTRL +SHIFT +ENTER
Avatar billede kabbak Professor
07. februar 2006 - 11:50 #4
Nb husk at skrive datoer i B1 og B2 inden ellers får du ingen ting
Avatar billede jochke Nybegynder
08. februar 2006 - 01:00 #5
Kan bare ikke få det til at virke.

Har i Udtræk skrevet dato i B1 og B2, markeret fra A3 til G367 og trykket CTRL+SHIFT+ENTER. Der kom fint en {} rundt om formlen. Men en masse #NAME? i alle de markerede celler.

Min indtastede formel: =FilterData(Tider!A1:G366;Tider!C2;B1;B2)
I Tiders række A står kolonneoverskrifterne. I C2 er den første dato af rådataerne. Og jeg har først indtastet datoer i B1 og B2.

:(
Avatar billede kabbak Professor
08. februar 2006 - 01:07 #6
når der står #NAME, er det fordi den ikke finder funktionen.

Mon den er rigtig sat ind.
tryk ALT +F11
der inde skal du kunne se dine arknavne og en der hedder module1, det er i module1, koden skal være.
Avatar billede jochke Nybegynder
08. februar 2006 - 07:41 #7
Så kom jeg lidt længere. :)

Comppile error: Syntax error.
På linien:
Public Function FilterData(Dataområde As Range, Datokolonne, Fradato, tildato)
Avatar billede kabbak Professor
08. februar 2006 - 11:08 #8
der er ikke fejl der, har du hele koden med


Public Function FilterData(Dataområde As Range, Datokolonne, Fradato, tildato)
    Dim Uddata(), A1 As Long, A2 As Long, A3 As Long, I As Long, C As Long, X As Long
    X = 0
    A1 = Dataområde.Column
    A2 = Datokolonne.Column
    A3 = (A2 + 1) - A1
    Col = Dataområde.Columns(Dataområde.Columns.Count).Column

    Data = Dataområde
    ReDim Uddata(UBound(Data), Col - 1)
    For I = 1 To UBound(Data)
        If I = 1 Or (Data(I, A3) >= Fradato And Data(I, A3) <= tildato) Then
            For C = 0 To Col - 1
                Uddata(X, C) = Data(I, C + 1)
            Next
            X = X + 1
        End If
    Next
    For I = 1 To UBound(Uddata)
        For C = 0 To Col - 1
            If Uddata(I, C) = 0 Then Uddata(I, C) = ""
        Next
    Next
    FilterData = Uddata
End Function
Avatar billede jochke Nybegynder
08. februar 2006 - 23:36 #9
Jeps det har jeg. Den virker bare ikke. Du kan tjekke min fil her: http://aub.dk/~jochke/Arbejdstider.xls
Avatar billede kabbak Professor
08. februar 2006 - 23:49 #10
Jeg ved ikke hvad der var galt, jeg tog of satte koden ind igen, og så virkede den.
Avatar billede kabbak Professor
09. februar 2006 - 00:23 #11
Jeg kan se at du kører med 1904 datosystem, det giver en fej i oversættelsen af datoen, den lægger simpelthen 4 år til når den finder resultatet.

den er nu lavet om så den tager højde for det.


Public Function FilterData(Dataområde As Range, Datokolonne, Fradato As Date, Tildato As Date)
    Dim Uddata(), A1 As Long, A2 As Long, A3 As Long, I As Long, C As Long, X As Long
    X = 0
    A1 = Dataområde.Column
    A2 = Datokolonne.Column
    A3 = (A2 + 1) - A1
    Col = Dataområde.Columns(Dataområde.Columns.Count).Column
    Data = Dataområde
    ReDim Uddata(UBound(Data), Col - 1)
    For I = 1 To UBound(Data)
        If I = 1 Or (Data(I, A3) >= Fradato - 1 And Data(I, A3) <= Tildato - 1) Then
            For C = 0 To Col - 1
                Uddata(X, C) = Data(I, C + 1)
            Next
            If I > 1 Then Uddata(X, A3 - 1) = DateAdd("YYYY", -4, Uddata(X, A3 - 1))
            ' linien herover fjernes hvis du IKKE kører med 1904 datosystem
          X = X + 1
        End If
    Next
    For I = 0 To UBound(Uddata)
        For C = 0 To Col - 1
            If Uddata(I, C) = 0 Then Uddata(I, C) = ""

        Next
    Next
    FilterData = Uddata
End Function
Avatar billede jochke Nybegynder
09. februar 2006 - 00:56 #12
Hmm det vil bare ikke virke. Mon det er fordi jeg kører med Excel 2004 på engelsk til Mac?
Avatar billede kabbak Professor
09. februar 2006 - 10:30 #13
prøv at hente den her, den virker ved mig
http://www.kabbak.dk/eksperten/arbejdstider.xls
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