[VBA] sorteren van verschillende variabelen

Pagina: 1
Acties:

  • BovenHond
  • Registratie: Februari 2002
  • Laatst online: 06:42
In een formulier heb ik een viertal waarden in kunnen vullen. nu wil ik graag dat deze worden gesorteerd.

een voorbeeld
a=4 b=2 c=8 d=1
moet geven: dbac

en
a=1 b=2 c=3 d=4
moet geven: abcd

nu kan ik dit realiseren op de volgende manier
Visual Basic:
1
2
3
4
5
6
7
8
9
public function berekenvolgorde(a,b,c,d) as string
if a < b and b <c and c <d then output= "abcd"
if a< b and b< d and d<c then output = "abdc"
if a<c and c<b and b<d then output = "acbd"
'etc 
'etc.. voor 24 regels

berekenvolgorde = output
end function


Is er een elegantere manier om dit op te lossen?

[ Voor 10% gewijzigd door BovenHond op 14-06-2006 16:25 ]


  • lier
  • Registratie: Januari 2004
  • Laatst online: 10:29

lier

MikroTik nerd

Je zou kunnen kiezen voor een recursieve functie.

Bepaal eerst welke op plaats één moet.
Bepaal vervolgens welke op de volgende plaats moet.
Enz.

In dit geval levert het een reductie van ongeveer 20 regels code...

Eerst het probleem, dan de oplossing


  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

VBA heeft helaas geen uitgebreide collection types zoals List, Set etc. Dat zou het handigst zijn geweest denk ik. Er is wel een Collection type, maar die is niet Sortable.

Hier staat misschien wel wat nuttigs, een bubblesort op een Collection.

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


  • BestTested!
  • Registratie: Oktober 2003
  • Laatst online: 28-07 22:54
Ik zou het op de volgende manier oplossen:
code:
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
Private Type toBeSorted
  identity As String
  number As Double
End Type


Dim entries(0 To 3) As toBeSorted


Sub Test()

entries(0).identity = "a"
entries(0).number = "4"

entries(1).identity = "b"
entries(1).number = "2"

entries(2).identity = "c"
entries(2).number = "8"

entries(3).identity = "d"
entries(3).number = "1"

dim sortedEntries(0 to 3) as toBeSorted
sortedEntries = quicksort (entries)

sortedString = ""
For i = 0 To UBound(entries)
  sortedString = sortedString & sortedEntries (i).identity
Next i

MsgBox sortedString

End Sub

Je moet dan alleen even een quicksort algoritme maken (lees google+copy+paste).
Je houdt dan ook uitbreidbaar indien er meer variabelen bijkomen.

[ Voor 9% gewijzigd door BestTested! op 14-06-2006 20:58 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 26-07 17:36

NMe

Quia Ego Sic Dico.

VBA is zo Office-specifiek dat het thuishoort in Officesuites en -software, zoals je ook had kunnen lezen in Waar hoort mijn topic?. :)

PRG>>OFF

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • BovenHond
  • Registratie: Februari 2002
  • Laatst online: 06:42
-NMe- schreef op woensdag 14 juni 2006 @ 17:14:
VBA is zo Office-specifiek dat het thuishoort in Officesuites en -software, zoals je ook had kunnen lezen in Waar hoort mijn topic?. :)

PRG>>OFF
true, prima

moderators hebben altijd gelijk... ik heb echter gerederneerd dat het probleem niet office gerelateerd is maar zuiver VB. Anyway, het maakt mij niet uit.

Bedankt voor de input, ik ga er morgen mee aan de slag

[ Voor 8% gewijzigd door BovenHond op 14-06-2006 21:22 ]

Pagina: 1