Avatar billede friis5 Novice
25. september 2007 - 14:05 Der er 11 kommentarer og
1 løsning

Sortering af ark efter flere forskellige kriterier

Jeg har et dataark, der har nogen lunde følgende udseende:

Danmark  3  Mandag  8
Tyskland 4  Tirsdag 7
Danmark  6  Torsdag 4
Danmark  2  Onsdag  9
Tyskland 2  Mandag  3

Som jeg gerne vil have sorteret således:

Danmark  3  Mandag  8
Danmark  2  Onsdag  9
Danmark  6  Torsdag 4
Tyskland 2  Mandag  3
Tyskland 4  Tirsdag 7

Altså først skal den "blot" alfabetisk sortere 1 kolonne, derefter skal den sortere anden kolonne, men således at rækkefølgen er mandag, tirsdag, onsdag, torsdag, fredag.
Derpå er det lidt ligegyldigt, hvordan resten falder ud, sålænge de hænger sammen med korrekt data. Det vigtigste er dog de første to kriterier for sortering af data.

Kan dette lade sig gøre?
25. september 2007 - 14:28 #1
.... derefter skal den sortere anden kolonne ...... ???
Mener du 3. kolonne - eller står 'Danmark' og '3' i samme celle?
Avatar billede friis5 Novice
25. september 2007 - 17:33 #2
Ja ok, jeg brugte anden kolonne lidt forkert i den sammenhæng.

Lad os bare sige, at den skal sortere Kolonne A, Kolonne C, Kolonne, B, Kolonne D prioteret (hvor kolonne C, skal sorteres på helt anden vis, da det skal sorteres efter ugedag) - håber det giver lidt mere mening nu :)
Avatar billede luffeladefoged Praktikant
26. september 2007 - 09:09 #3
Hvis jeg forstår det ret så er der to problemer:
1) Du vil sortere fire kolonner, hvor xl kun har sortering til tre:
- du vælger først at sortere den sidste i din prioritering; kolonne D; og derefter laver du en ny sortering med de resterende tre, hvor du vælger col.A, col.C og col.B.
2) Du vil lave en sortering af ugedage:
- når du vælger col.C i din sorteringsbox, trykker du på "options" og under "first key sort order" finder du dine "lister" og sikkert også mandag, tirsdag, etc., og trykker OK or OK for sortering.
Hilsen  Luffe
Avatar billede friis5 Novice
26. september 2007 - 11:04 #4
Nu sad jeg lige og legede lidt med den der "first key sort order".

Land            Data 1    Dag    Data 2
Danmark     3    Mandag     8
Tyskland    4    Tirsdag    7
Danmark     6    Torsdag    4
Danmark     2    Onsdag     9
Tyskland    2    Mandag     3
Danmark     3    Fredag    6


Den sorterer (hvis jeg kun vælge søjle "Dag") således, når jeg har valgt listen "Mandag, Tirsdag, Onsdag, Torsdag, Fredag, Lørdag, Søndag".

Land            Data 1    Dag    Data 2
Danmark     2    Onsdag     9
Danmark     3    Mandag     8
Tyskland    2    Mandag     3
Danmark     3    Fredag    6
Danmark     6    Torsdag    4
Tyskland    4    Tirsdag    7

Hvilket jo slet ikke er den sortering jeg bad om :/


Hvad skal ændres i min vba?

Sub Sort_Data()
   
    Range("A1:D7").Sort Key1:=Range("C2"), Header:=xlYes, OrderCustom:=1,
    MatchCase:=False, Orientation:=xlTopToBottom, OrderCustom:=3
   
    Range("A1:D7").Sort Key1:=Range("A2"), Key2:=Range("D2"), Key3:=Range("B2"),
    Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

End Sub
Avatar billede friis5 Novice
26. september 2007 - 11:15 #5
Hvis vi nu dropper at sortere på 4. kriterie, der forekommer nok alligevel ikke særlig mange situationer, hvor det er nødvendigt for at danne overblik alligevel.

Hvorfor virker denne makro så ikke?

Så vidt jeg ved, sorterer den efter A-søjle, derpå C-søjle og sidst D-søjle, den ved at der er header, og dage skal sorteres efter "daglisten" i excel, samt at den skal tage fra top til bund.

*suk*

Sub Makro9()
    Range("A1:D7").Select
    Selection.Sort Key1:=Range("A2"), Key2:=Range("C2"), Key3:=Range("D2"),
    Header:=xlYes, OrderCustom:=3, MatchCase:=False, Orientation:=xlTopToBottom
End Sub
Avatar billede excelent Ekspert
26. september 2007 - 11:16 #6
Range("A1:D7").Select
    Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("C2") _
        , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=3, MatchCase:= _
        False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
        :=xlSortNormal
    Range("A1").Select
Avatar billede luffeladefoged Praktikant
26. september 2007 - 12:09 #7
Er det ikke bare rækkefølgen: at du skal have col.A, så C, så B?
Avatar billede friis5 Novice
26. september 2007 - 12:58 #8
Att: excelent

Din kode giver flg. output:

Land            Data 1    Dag    Tidspunkt
Danmark     3    Fredag    00:00
Danmark     3    Mandag     11:00
Danmark     2    Onsdag     03:00
Danmark     6    Torsdag    19:00
Tyskland    2    Mandag     00:00
Tyskland    4    Tirsdag    10:00

- Fredag, Mandag, Onsdag, Torsdag er ikke den rigtige rækkefølge i min bog - men den alfabetisk rigtige... :(

(jeg har ændret søjle D, men det ændrer jo ikke på output - skulle bare lige tjekke hvordan den håndterede klokkeslet, hvilket ikke var et problem for sort funktionen)
Avatar billede excelent Ekspert
26. september 2007 - 13:31 #9
hmm. syntes ellers lige den virkede, men så prøv denne:

    Range("A2:D7").Select
    Selection.Sort Key1:=Range("C2"), Order1:=xlAscending, Header:=xlNo, _
        OrderCustom:=3, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlNo, _
        OrderCustom:=3, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    Range("A1").Select
Avatar billede friis5 Novice
26. september 2007 - 13:32 #10
Tror jeg har fundet ud af fejlen, har dog ingen idé om hvordan den skal løses.

Det virker meget som om VBA ikke kan håndtere, når OrderCustom:=3 ikke refererer til den første kolonne.

Men hvordan kommer man så rundt om problemet?

Har vi dette input:

Fredag    00:00    C
Lørdag    00:00    D
Lørdag    00:00    T
Onsdag    00:00    A
Onsdag    00:00    F
Tirsdag    00:00    A
Mandag    03:00    A
Onsdag    03:00    B
Torsdag    03:00    D
Fredag    10:00    C
Mandag    10:00    R
Onsdag    10:00    C
Mandag    11:00    A
Mandag    11:00    A
Mandag    11:00    G
Søndag    11:00    A
Søndag    11:00    F
Fredag    19:00    B
Fredag    19:00    C
Tirsdag    19:00    A
Torsdag    19:00    D

Og sortere først efter 1, derefter 2, og så 3 bliver resultatet:

Mandag    03:00    A
Mandag    10:00    R
Mandag    11:00    A
Mandag    11:00    A
Mandag    11:00    G
Tirsdag    00:00    A
Tirsdag    19:00    A
Onsdag    00:00    A
Onsdag    00:00    F
Onsdag    03:00    B
Onsdag    10:00    C
Torsdag    03:00    D
Torsdag    19:00    D
Fredag    00:00    C
Fredag    10:00    C
Fredag    19:00    B
Fredag    19:00    C
Lørdag    00:00    D
Lørdag    00:00    T
Søndag    11:00    A
Søndag    11:00    F

Præcis som vi ønskede det. Men vil vi sortere efter 3,1,2, ser det sådan ud:

Mandag    03:00    A
Mandag    11:00    A
Mandag    11:00    A
Onsdag    00:00    A
Søndag    11:00    A
Tirsdag    00:00    A
Tirsdag    19:00    A
Fredag    19:00    B
Onsdag    03:00    B
Fredag    00:00    C
Fredag    10:00    C
Fredag    19:00    C
Onsdag    10:00    C
Lørdag    00:00    D
Torsdag    03:00    D
Torsdag    19:00    D
Onsdag    00:00    F
Søndag    11:00    F
Mandag    11:00    G
Mandag    10:00    R
Lørdag    00:00    T

Hvor der tydeligt er fejl (man, ons, søn, tirs) bare for a...

Koden når den virker er:

Sub Makro11()

    Range("A1:C21").Select
    Selection.Sort Key1:=Range("A1"), Key2:=Range("B1"), Key3:=Range("C1"),
    Header:=xlNo, OrderCustom:=3, MatchCase:=False, Orientation:=xlTopToBottom
End Sub

Koden når den ikke virker:

Sub Makro11()

    Range("A1:C21").Select
    Selection.Sort Key1:=Range("C1"), Key2:=Range("A1"), Key3:=Range("B1"),
    Header:=xlNo, OrderCustom:=3, MatchCase:=False, Orientation:=xlTopToBottom
End Sub
Avatar billede friis5 Novice
26. september 2007 - 13:56 #11
Att: excelent

Din kode virker fint nok med to søjler, men kommer der 3 i spil, hvor den "midterste" priotering er på dage, så kan man ikke bruge "opdele" tricket. Spørgsmålet er om jeg kan nøjes med at sortere på 2 søjler.. Hmm..

EDIT: (Inden jeg fik postet)

Opdeler man sin sortering, og tager sidste kriterie først, derefter næstsidste, og så første, kommer man udover problemet... Genialt :D

Sub Makro9()
'Sidste priotering
    Range("A1:D7").Select
    Selection.Sort Key1:=Range("D1"), Header:=xlYes, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

'Næst-Sidste priotering (Området med dage)
    Range("a2:d7").Select
    Selection.Sort Key1:=Range("c1"), Header:=xlNo, _
        OrderCustom:=3, MatchCase:=False, Orientation:=xlTopToBottom

'OrderCustom:=3 da vi benytter at den sorterer på dage i stedet for alfabetisk

'Første priotering
    Range("A1:D7").Select
    Selection.Sort Key1:=Range("A1"), Header:=xlYes, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End Sub

excelent du svarer bare, og får lidt points :)
Avatar billede excelent Ekspert
26. september 2007 - 14:00 #12
ok
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