VBA sorteren

Status
Niet open voor verdere reacties.

Corimo

Gebruiker
Lid geworden
14 feb 2007
Berichten
20
Hallo, ik heb een vraagje
ik ben aan het leren om een programma te maken in VBA.
ik werk in visual basic 6.3

Ik maak dus een sorteer programma die een lijst met getallen van klein naar groot weet te sorteren.
er gaat steeds iets fout en ik weet niet wat.
zouden julie mischien een kijkje kunnen nemen naar mijn VBA code?

Dim max As Integer
Dim k As Integer
--------------------------------------------------------------------------------------------------------------
Private Sub cmdinvoer_Click()
Dim invoer As Integer
Dim teller As Integer
Dim cijfer(50) As Integer


k = 1

invoer = CInt(txtinvoer.Text)
cijfer(k) = invoer
lstlijst.AddItem (cijfer(k))
k = k + 1
txtinvoer.Text = ""


End Sub
---------------------------------------------------------------------------------------------------
Private Sub cmdsorteer_Click()
Dim cijfer(50) As Integer
Dim hulp As Integer



For k = 1 To max
If cijfer(k) > cijfer(k + 1) Then

hulp = cijfer(k)
cijfer(k) = cijfer(k + 1)
cijfer(k + 1) = hulp
hulp = 0
lstlijst.AddItem (cijfer(k))
End If

Next k

End Sub
-----------------------------------------------------------------------------------------------------------------------------
Private Sub txtinvoer_Change()

End Sub

Bedankt als u mij kunt helpen
 
Ik neem aan dat je een form hebt met een textbox, een listbox en een knop invoer en een knop sorteren.
Code:
Private Sub cmdinvoer_Click()
  Dim invoer As Integer
  Dim teller As Integer
  Dim cijfer(50) As Integer

  k = 1

  invoer = CInt(txtinvoer.Text)
  cijfer(k) = invoer
  lstlijst.AddItem (cijfer(k))
  k = k + 1
  txtinvoer.Text = ""


End Sub
Ieder keer als je op invoer klikt wordt deze routine uitgevoerd. Waarom je hier een cijfer(50) array gebruikt ontgaat mij een beetje. Je voegt je getal toe aan de listbox.
Code:
Private Sub cmdsorteer_Click()
  Dim cijfer(50) As Integer
  Dim hulp As Integer

  'Uitlezen listbox, vullen cijfer array
  for k =1 to lstlijst.listcount-1
    cijfer(k)=lstlijst.itemdata(k)
  next k

'cijfer array sorteren
  For k = 1 To max
    If cijfer(k) > cijfer(k + 1) Then
      hulp = cijfer(k)
      cijfer(k) = cijfer(k + 1)
      cijfer(k + 1) = hulp
      hulp = 0 'Hoeft niet.
    End If
  Next k

'Eerst de lijst leegmaken
  For k = 1 to max
    lstlijst.RemoveItem 0 'Kan ook 1 zijn. Maar géén k! Probeer maar eens!
  next k

'De lijst vullen met de gesorteerde array
  For k = 1 To max
    lstlijst.AddItem (cijfer(k))
  Next k

End Sub
Het kan een stuk mooier. Maar dit werkt waarschijnlijk ook wel. Is niet getest.

Enjoy!
 
Laatst bewerkt:
Ik zie nou dat je sorteer routine ook niet klopt. Er wordt eenmaal doorheen gelopen. Het zou toevallig zijn als dan alles gesorteerd zou zijn.
Zo te zien gebruik je een bubblesort variant. Die moet je nog verder aanpassen.

Succes!
 
Hallo, bedankt voor uw reactie

op school heeft een docent geholpen met de code, we komen alleen niet veel verder.

Private Sub cmdinvoer_Click()
Dim invoer As Integer
Dim Teller As Integer


Teller = 0

invoer = CInt(txtinvoer.Text)
cijfer(Teller) = invoer
lstlijst.AddItem (cijfer(Teller))
Teller = Teller + 1
txtinvoer.Text = ""
max = Teller + 1

End Sub
______________________________________________________________
Private Sub cmdsorteer_Click()
Dim hulp As Integer



For k = 0 To max
If cijfer(k) > cijfer(k + 1) Then

hulp = cijfer(k)
cijfer(k) = cijfer(k + 1)
cijfer(k + 1) = hulp


End If
lstlijst.AddItem (cijfer(k))
Next k

End Sub
___________________________________________________________________
Private Sub txtinvoer_Change()

End Sub


ik heb een module1 aangemaakt:
Public max As Integer
Public cijfer(50) As Integer

het cijfer(50) heb ik zodat er genoeg getallen ingevoerd kunen worden,
Meer dan 50 is toch niet nodig.

ik heb het sorteer Loopje ook aangepast.
Bedankt voor alle hulp.
 
Is hiermee je vraag opgelost:rolleyes: ? Zet dan je vraag op opgelost.:)
Anders moet je aangeven waar je geholpen wilt worden.:thumb:
 
Dag Corimo,

Heel simpel als je een listbox vult:
Code:
Private Sub cmdsorteer_Click()
  Dim i As Integer

  For i = 0 to Listbox1.Listcount - 1
    If Val(TextBox1.Value)  < Val(Listbox1.List(i)) then Exit For
  Next
  Listbox1.AddItem Textbox1.Value, i
  TextBox1.Text = ""
  Textbox1.Setfocus
End Sub
Het werkt als volgt: Je laat de intevoegen waarde vergelijken vanaf onder op met de reeds bestaande waarden. Zodra deze waarde is gevonden stopt de lus en op die plaats wordt de nieuwe waarde ingevoegd.

Als je een tabel wil sorteren gaat het aldus
Code:
  Dim a() as integer
  Dim b as integer
  Dim i as Integer
  Dim v as Boolean

  Redim a(50)
  For i = 0 to 50
    a(i) = Int((99 * Rnd) + 1)
  Next
  Do
    v = False
    For i = 0 to 49
      if a(i) > a(i+1) then b = a(i): a(i) = a(i + 1): a(i + 1) = b: v = True
    Next
  Loop While v
Dit heet bubblesort (de hogere getallen borrelen langzaam naar boven); niet echt snel. Als je interesse hebt in een snelle sorteercode (QuickSort)dan zeg je het maar.

Gegroet,

Axel.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan