Avatar billede kahl Mester
09. januar 2017 - 09:01 Der er 4 kommentarer

Marcro der sortere række basseret på 2 faktore i samme celle

Jeg kunne godt tænke mig at lave en macro der sortere rækkerne af 2 omgange. først på de 2 første cifre i cellen siden på de resterende.

Jeg har en 2 ordrenr. serier hvor den ene har 5 ciffre og den anden 6 cifre. men dem med 6 cifre er ikke nødvendigvis dem der skal stå til sidst (Mindst til størst sortering) i stedet skal de der starter med 17 altid stå til sidst og så sorteret efter de sidste 3-4 cifre. mens dem der starter med <16 skal stå først uanset om der er 3 eller 4 cifre mere.

Nogle gode bud på hvordan det gøre nemt (og at splitte order. nr op i 2 celler er ikke en mulighed)
Avatar billede jens48 Ekspert
09. januar 2017 - 18:02 #1
Hvis det er muligt at indsætte en hjælpekolonne til sortering, kan du bruge denne formel. Det er antaget at ordrenummeret står i kolonne A:

=LEFT(A1;2)&IF(A1>=100000;RIGHT(A1;4);"0"&RIGHT(A1;3))

Det bliver på dansk til:

=VENSTRE(A1;2)&HVIS(A1>=100000;HØJRE(A1;4);"0"&HØJRE(A1;3))
Avatar billede Mads32 Ekspert
09. januar 2017 - 18:23 #2
Hvis du kan bruge en løsning med et par hjælpekolonner, er her vedlagt en løsning.

https://www.dropbox.com/s/gmbgyz8vvjevgto/makro%20der%20sorterer%20paa%202%20faktorer.xlsx?dl=0
Avatar billede excelent Ekspert
10. januar 2017 - 22:02 #3
'Marker dine ordrenumre og kør makro

Sub xSort()

Dim rng16(), rng17()
ReDim rng16(1 To Selection.Count)
ReDim rng17(1 To Selection.Count)
rng = WorksheetFunction.Transpose(Selection)

For t = LBound(rng) To UBound(rng)
  If Left(rng(t), 2) = 16 Then x16 = x16 + 1: rng16(x16) = rng(t)
  If Left(rng(t), 2) = 17 Then x17 = x17 + 1: rng17(x17) = rng(t)
Next

For t = 1 To x16
  Cells(t + 1, "h") = WorksheetFunction.Small(rng16, t)
Next
For t = 1 To x17
  Cells(t + x16 + 1, "h") = WorksheetFunction.Small(rng17, t)
Next

End Sub
Avatar billede excelent Ekspert
11. januar 2017 - 15:07 #4
OBS koderne skrives i kolonne h - ret til aktuel :
i denne linie Cells(t + 1, "h") = WorksheetFunction.Small(rng16, t)
og denne    Cells(t + x16 + 1, "h") = WorksheetFunction.Small(rng17, t)
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

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