• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

item in een collection wijzigen? kan dat ?

Status
Niet open voor verdere reacties.
Ik ben benieuwd naar die 'binair zoeken' code
 
snb hier een voorbeeld van een binair geordende collection

kijk in de klas module staat deze property
Code:
Public Property Let AdItem(Waarde)
    Dim Temp As Long, Van As Long, Tot As Long
    If Waarde = "" Then Exit Property
    Van = 1:  Tot = Col.Count
    
    If Tot = 0 Then Col.Add Waarde: Exit Property 'het eerste element in Col stoppen
    
    If Waarde < Col(Van) Then Col.Add Waarde, , 1: Exit Property 'misschien is deze regel niet nodig (nog niet geprobeerd
    
    Do
        Temp = Int((Tot + Van) / 2) 'ga steeds op de helft van het aantal elementen kijken
        If Col(Temp) > Waarde Then  'bepaal of het element in de hoogste of de laagste groep zit
            Tot = Temp
        Else
            Van = Temp
        End If
                                    'nu is het zoek gebied weer gehalveerd
    Loop Until Tot - Van < 2        'ga met dat halveren door tot "Tot" en "Van" tegen elkaar aan zitten of samenvallen
    
    If Waarde < Col(Tot) Then       'bepaal nu waar de Waarde in de collection moet komen
        Col.Add Waarde, , , Van
    Else
        Col.Add Waarde, , , Tot
    End If
    
End Property
groet sylvester

ps ik heb weer problemen met uploaden het bestand volgt later
 
En jij dacht dat het aantal vergelijkingen met jouw code beperkter is dan het aantal vergelijkingen in mijn suggestie ?
Als je 'zoeken' geen 'sorteren' noemt wil dat niet zeggen dat het geen sorteren is (sorteren is in wezen niets anders dan waarden stuk voor stuk met elkaar vergelijken, dat geldt voor zoeken evenzo).
 
het verschil zit hem in het aantal stappen dat je nodig hebt
in 1000 gesorteerde items 1 nieuw item op zijn plaats toevoegen vinden gaat binair in 10 stappen
eerst toevoegen en daar na sorteren kost minstens 1000 stappen
 
het probleem ontstaat dan als er weer punten uit de collectie verdwijnen .

of als het gebied dat bekeken wordt verplaatst van bv item 1 tot 20 naar 2 tot 21 enz

als de collectie automatisch gesorteerd blijft als er een of meerdere items worden toegevoegd is dat handig en sneller dan steeds

de hele collectie sorteren als er een of meerder items bijkomen
 
Ik had het helemaal niet over de hele range/collectie/array

Maak liever handig gebruik van Excels ingebouwde voorzieningen:
Code:
Sub tst()
    sn = [row(1:20000)]
    ComboBox1.List = sn
    
    y = 1344
    For j = 1 To 14
        x = x + (UBound(sn) \ 2 ^ j) * Abs((y > sn(x + UBound(sn) \ 2 ^ j, 1)))
    Next
    ComboBox1.AddItem "test", x

    sn=combobox1.list
End Sub
 
snb, ik vind hem geweldig

alleen als de waarde niet voor komt plaatst hij hem net verkeerd

probeer deze maar eens
Code:
Sub tst()
    sn = [row(1:20000)*10]
    ComboBox1.List = sn
    
    y = 1344
    
    For j = 1 To 14
        x = x + (UBound(sn) \ 2 ^ j) * Abs((y > sn(x + UBound(sn) \ 2 ^ j, 1)))
    Next
    ComboBox1.AddItem "test", x

    sn = ComboBox1.List
End Sub
dan plaatst hij hem tussen 1330 en 1340 ipv tussen 1340 en 1350

verder weet ik niet hoe excel 2^2 uit rekent ik gebruik liever 2*2

bedankt voor deze leuke manier.

groet sylvester
 
je kunt proberen:

Code:
ComboBox1.AddItem "test", x+abs(x<>y)
 
snb, ik heb er uiteindelijk dit van gemaakt
Code:
Sub tst()
    sn = [row(1:20000)*20]
    ComboBox1.List = sn
    temp = UBound(sn)
    y = 1348
    Do
        temp = WorksheetFunction.RoundUp(temp / 2, 0)
        If y > sn(x + temp, 1) Then x = x + temp
    Loop Until temp < 2
    ComboBox1.AddItem "test", x - (sn(x, 1) > y)
    sn = ComboBox1.List
    ComboBox1 = "test"
End Sub
groet sylvester
en bedankt:)
 
Laatst bewerkt:
Voor wie van puzzels houdt: hoe kan een ongesorteerde list toch gesorteerd zijn?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan