Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[Excel VBA] getal sorteren

Pagina: 1
Acties:

  • Crxtreem
  • Registratie: Augustus 2007
  • Niet online
Ik heb voor graveerplaatjes een excel lijst nodig met codes uit ons tekensysteem.
Hiervoor heb ik een macro gemaakt die dit uit het tekensysteem haalt en de overbodige gegevens verwijderd.

Maar nu heb ik alleen nog dat het sorteren van de lijst niet goed gaat.

Ik heb bijvoorbeeld een reeks met code's die ik na de sortering zo krijg:
14F11
14F12
14F6
14F7
14X11
Dit hoort volgens onze tekenwijze zo gesorteerd te worden:
14F6
14F7
14F11
14X11
14F12
De code is namelijk uit 3 gedeelte's opgebouwd.
1 de pagina waar het component staat.
2 de letter is het soort component
3 de stramien waar het component staat

Is er een mogelijkheid om te zorgen dat ik dit toch goed gesorteerd krijg?
Misschien dat ik de codering eerst moet splitsen in 3 kolommen en dan sorteren en weer samenvoegen?

  • loeberce
  • Registratie: Februari 2009
  • Laatst online: 16:45
Uitsplitsen lijkt me het meest aangewezen. Dan kan je op het getal na de middelste letter sorteren.

  • Joep
  • Registratie: December 2005
  • Laatst online: 15:22
https://support.office.co...S&rs=en-US&ad=US&fromAR=1

Edit: Nvm, niet correct

[ Voor 10% gewijzigd door Joep op 20-07-2017 19:13 ]


  • Crxtreem
  • Registratie: Augustus 2007
  • Niet online
Hmm splitsen is ook nog niet zo makkelijk als ik zo zoek.

Heb al gekeken voor de code "MID"maar dan moet volgens mij de reeks een vaste waarde hebben.
Kan ik dit ook variabel maken?

Het kan zijn dat mijn codering 1F1 of 199Fa19 kan zijn.

  • mathias82
  • Registratie: April 2017
  • Laatst online: 12:33
Dat splitsen kan je makkelijk met regular expressions doen.De vraag is alleen of die je probleem oplost: is het inderdaad voldoende om te sorteren op de laatste cijfers? In je voorbeeld begint alles met 14, is dit altijd het geval? Wat als een code met 15 begint?

  • Crxtreem
  • Registratie: Augustus 2007
  • Niet online
Voor zover ik het nu ie krijg ik het met RegEx aan het werken.
Ik doe als ik ze gesplitst heb eerst sorteren op het voorste getal en daarna op het laatste getal.
Dus ik ben weer een stap verder.

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Is het niet eenvoudiger de sortering direct aan te brengen in de macro zelf. Post eens de relevante delen van de code?

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • ajakkes
  • Registratie: Maart 2004
  • Laatst online: 16-05 22:32

ajakkes

👑

Als je dmv een formule controleert hoe lang de string is en waar een letter staat kan je de string eenvoudig opknippen, van voorloopnullen voorzien en dan werkt je sortering functie normaal.

Maak er dus 01A01 van als het 3 characters Lang is en 11A01 als de string 4 characters heeft en char 3 een letter is.

👑


  • Crxtreem
  • Registratie: Augustus 2007
  • Niet online
Ik heb de sortering ook in mijn macro verwerkt dus dat wordt ook na het splitsen uitgevoerd.

De de kolommen die gesplitst zijn worden in een andere kolom weer samengevoegd met "Tekst samenvoegen"

De code voor het splitsen en sorteren heb ik zo gemaakt.
(Dit is een beetje het eerste wat ik met VBA doe(en een beetje van Google), dus zal niet de beste code zijn)
Dim RegEx As Object
Dim strPattern As String
Dim strInput As String
Dim strReplace As String
Dim Myrange, C As Range
Set RegEx = CreateObject("vbscript.regexp")

Set Myrange = ActiveSheet.Range("E2:E1001")

For Each C In Myrange
strPattern = "(^[0-9]{1,3})([a-z-A-Z]*)([0-9]*)" 'Dit is om het in 3 kolommen te maken.

If strPattern <> "" Then
strInput = C.Value
strReplace = "$1"

With RegEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With

If RegEx.test(strInput) Then
C.Offset(0, -4) = RegEx.Replace(strInput, "$1")
C.Offset(0, -3) = RegEx.Replace(strInput, "$2")
C.Offset(0, -2) = RegEx.Replace(strInput, "$3")
Else
C.Offset(0, 1) = ""
End If
End If
Next

Columns("A:G").Select
ActiveWorkbook.Worksheets("Data").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Data").Sort.SortFields.Add Key:=Range("A2:A987"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Data").Sort.SortFields.Add Key:=Range("C2:C987"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Data").Sort
.SetRange Range("A1:G987")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Maak er dus 01A01 van als het 3 characters Lang is en 11A01 als de string 4 characters heeft en char 3 een letter is.
Dat zou ook kunnen, alleen moet ik dan achteraf weer zorgen dat die extra 0 weer wordt verwijderd.
Wat ook weer de kans geeft dat ik te veel weg haal.

[ Voor 7% gewijzigd door Crxtreem op 21-07-2017 09:56 ]


  • Paultje3181
  • Registratie: November 2002
  • Laatst online: 17-11 22:28
Substitute(A1,"0","")
Dat komt dus wel goed

  • heuveltje
  • Registratie: Februari 2000
  • Laatst online: 17:22

heuveltje

KoelkastFilosoof

en dan er achterkomen dat er ook 1f10 in zat.

* heuveltje die zich wel vaker met find en replace in de vingers heeft gesneden !

Heuveltjes CPU geschiedenis door de jaren heen : AMD 486dx4 100, Cyrix PR166+, Intel P233MMX, Intel Celeron 366Mhz, AMD K6-450, AMD duron 600, AMD Thunderbird 1200mhz, AMD Athlon 64 x2 5600, AMD Phenom X3 720, Intel i5 4460, AMD Ryzen 5 3600 5800x3d

Pagina: 1