25. september 2007 - 14:05Der 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.
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
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 :)
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
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
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)
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
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
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.