Avatar billede lagunadk Novice
08. august 2013 - 11:04 Der er 14 kommentarer og
1 løsning

CustomOrder / sorterings liste

Hey eksperter,

Jeg har i en del af en længere makro brug for at definere hvordan den sortere, på baggrund af en CustomOrder.

(";" er med for videre behandling)

<<<<<<<<<<<<<
CustomOrder:= _
        ";XXS,;XS,;S,;M,;L,;XL,;XXL,;1,;2,;3,;4,;5,;6,;7,;8,;9,;10,;11,;12,;13,;14,;15,;16,;17,;18,;19,;20,;21,;22,;23,;24,;25,;26,;27,;28,;29,;30,;31,;32,;33,;34,;35,;36,;37,;38,;39,;40,;41,;42,;43,;44,;45,;46,;47,;48,;49,;50,", DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Størrelse ark").Sort
<<<<<<<<<<<<<

Er der en smartere måde at skrive dette på?

Der kommer en lang række forskellige størrelser - så denne liste bliver ret lang - hvis jeg opretter en brugerdefineret liste - kan den slet ikke indeholde det hele :)

Håber i har nogle input
Avatar billede supertekst Ekspert
08. august 2013 - 11:49 #1
Er det en makro, som du har indspillet?

Et eksempel på en sortering:
    With xlsFotoData.ActiveWorkbook.Worksheets("Ark1")
        .Range("K" & CStr(startRække) & ":N" + sidsteRække).Sort Key1:=.Range("K" & CStr(startRække) & ":K" + sidsteRække), Order1:=xlAscending, Key2:=.Range _
        ("L" & CStr(startRække) & ":L" + sidsteRække), Order2:=xlAscending, Key3:=.Range("M" & CStr(startRække) & ":M" + sidsteRække), Order3:=xlAscending, Header:=xlNo, OrderCustom:=1, MatchCase _
        :=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, _
        DataOption2:=xlSortNormal, DataOption3:=xlSortNormal
    End With
Avatar billede lagunadk Novice
08. august 2013 - 14:16 #2
Ja delvis indspillet :)

Problemet er at der er for mange forskellige parametre jeg gerne vil sortere efter - så tænkte om man kunne korte det lidt ned somehow.

Forstår ikke helt din kode :)

Det jeg egentlig leder efter er nok om man kan skrive 1 til 100, a til z osv.
Avatar billede supertekst Ekspert
08. august 2013 - 14:32 #3
I det viste eksempel sorteres der på 3 forskellige kolonner i den orden disse er anført. Alle i stigende orden.

Hvor mange kolonner skal du sortere efter?
Avatar billede lagunadk Novice
08. august 2013 - 15:25 #4
Ah, det hele er en enkelt kolonne. Men der kan komme mange forskellige slags størrelses koder.

Jeg kan trække hele vores liste ud - det er 225 forskellige størrelser der er sorteret korrekt.

Men jeg kan ikke lave listen til en brugerdefineret liste i excel da den er for lang, så indtilvidere har jeg taget de hyppigste.
Avatar billede supertekst Ekspert
08. august 2013 - 16:02 #5
Så er det måske filtrering du skal anvende..
Avatar billede supertekst Ekspert
09. august 2013 - 13:17 #6
Var det så det?
Avatar billede lagunadk Novice
09. august 2013 - 13:32 #7
Nej, for kan ikke skjule dataen - da den bliver brugt med det samme videre i forløbet.

Her er et udsnit af forskellige størrelser:

XXXS
XXS
XS
S
M
L
XL
XXL
XXXL
S/M
M/L
L/XL
35/36
37/38
39/40
41/42
43/44
S-M
M-L
L-XL
L-XXL
3M
6M
12M
18M
24M
34B
34C
34D
36B
36C


Skal stadigvæk have fundet ud af hvordan man kan definere en lang sorterings liste.

Kan man få excel til at hente parametrene fra et andet ark, og så indsætte dem i makroen?

Det ville også gøre det nemmere at bygge videre på listen :)
Avatar billede supertekst Ekspert
09. august 2013 - 13:42 #8
Forstår ikke hvad det er du søger.

I givet fald er du velkommen til at maile en beskrivelse direkte eller uploade denne.

@-adresse under min profil.
Avatar billede lagunadk Novice
09. august 2013 - 14:12 #9
Hehe okey,

Man kan jo oprette en brugerdefineret liste til at sortere efter specielle parametre fx. så størrelser står rigtigt:

XS, S, M, L, XL
og ikke:
L, M, S, XL, XS

Problemet er at vi har rigtig mange forskellige størrelser efterhånden. så denne liste er blevet for lang til at excel vil æde den.

Jeg søger en måde at oprette eller definere en brugerdefineret liste direkte i makroen.
Avatar billede supertekst Ekspert
09. august 2013 - 14:12 #10
Du har nævnt brugerdefineret liste flere gange. Har blot ikke tænkt i de baner - men så gik lyset op..

Har opbygget en liste på 250 rækker i kolonne A.

Makro til at importere denne liste til en bruger defineret ser således ud:

    Range("A1").Select
    Application.AddCustomList ListArray:=Range("A1:A250")
Avatar billede lagunadk Novice
12. august 2013 - 10:58 #11
Det tror jeg er lige det jeg ledte efter, hvordan får jeg det ind i denne bid?

------
Range("A2").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveWorkbook.Worksheets("Størrelse ark").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Størrelse ark").Sort.SortFields.Add Key:=Range( _
        "B3:B2000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("Størrelse ark").Sort.SortFields.Add Key:=Range( _
        "C3:C2000"), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _
        ";XXS,;XS,;S,;M,;L,;XL,;XXL", DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Størrelse ark").Sort
        .SetRange Range("A2:AO2000")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
------
Avatar billede supertekst Ekspert
12. august 2013 - 11:11 #12
Vender tilbage - har ikke lige tid p.t.
Avatar billede supertekst Ekspert
13. august 2013 - 10:29 #13
Har en model, som du kan få tilsendt. @-adresse under profil.

Sub OpretListeOgAnvend()
Rem På ARK1 oprettes indsættes følgende i A1-A9: XXXS,XXS,XS,S,M,L,XL,XXl,XXXL
    ActiveWorkbook.Sheets(2).Select
   
On Error Resume Next        'hvis listen er oprettet i forvejen  - ignorer fejl
Rem Der oprettes en brugerdefineret liste på disse værdier
    Application.AddCustomList ListArray:=Range("A1:A9")
   
    ActiveWorkbook.Sheets(1).Select
   
    ActiveWorkbook.Worksheets("Ark1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Ark1").Sort.SortFields.Add Key:=Range("C2:C100"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _
        "XXXS,XXS,XS,S,M,L,XL,XXL,XXXL", DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Ark1").Sort
        .SetRange Range("A1:C100")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub
Avatar billede lagunadk Novice
13. august 2013 - 12:49 #14
Hey Supertekst,

Jeg har fået det til at virke ved at bruge 

Range("A1").Select
    Application.AddCustomList ListArray:=Range("A1:A250")

Som jo kun definere listen - derefter har jeg så manuelt indsat den som en linje - ligesom post 1 her.

Den bliver for lang (for mange tegn) hvis den skal æde hele listen - så jeg har været nødsaget til at fjerne nogle størrelser - bl.a. dem der kun forekommer en gang, f.eks. One size. Den kan kun være mellem 700-800 karakterer lang.

Det er ikke ofte vi tilføjer flere størrelser så det kan gå an :)

Mange tak for hjælpen og fordi du gad at sætte dig ind i problemet - smid et svar
Avatar billede supertekst Ekspert
13. august 2013 - 13:13 #15
Fint - det gør jeg så..
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