Kan dit ook sneller op oneven en even volgorde gezet worden??

Status
Niet open voor verdere reacties.

samui

Verenigingslid
Lid geworden
26 mei 2012
Berichten
207
Naar mate ik mijn bestand vul en de lijst op oneven en even volgorde wordt gezet (KOLOM B) gaat dit ook steeds trager.
Is er een mogelijkheid dat dit gewoon snel gaat?

Dit is slechts een gedeelte van de macro die ik toegevoegd heb.
Het blauwe rondje zet de kolom B op volgorde van 1 t/m 252
Het blauwe ovaaltje zet kolom B op volgorde oneven/even
Ik deel mensen in willekeurige volgorde in, en daarna zet de macro de zaak op volgorde qua indeling in een straat oneven bovenin en oneven onderaan de lijst.

Hoe voller de lijst hoe langer het duurt om de scheiding oneven/even op deze manier uitgevoerd te krijgen.
In mijn macro duurt het nu 1 minuut en 9 seconden voordat ik verder kan.
Hopelijk kan het sneller.

Wie helpt?

mvg weer,

Frank
 

Bijlagen

  • helpdesk.xls
    317,5 KB · Weergaven: 26
Als je een hulopkolom gebruikt met =mod(b5;2) krijg je een kolom met 1 en 0.
Met een autofilter of advancedfilter kun je dan alles regels met 1 of 0 in die kolom, filteren en naar bijv. een tweede werkblad kopiëren.
 
Zet in bijvoorbeeld kolom AR dit:
=ALS(REST(B5;2)=1;"1";"0")

Dan kan je de volgende code gebruiken voor het gewenste filter:
Code:
    'Toon OnEven
    ActiveSheet.Range("$AR$5:$AR$243").AutoFilter Field:=1, Criteria1:="1"

    'Toon Even
    ActiveSheet.Range("$AR$5:$AR$243").AutoFilter Field:=1, Criteria1:="0"

    'Toon Alles
    ActiveSheet.Range("$AR$5:$AR$243").AutoFilter Field:=1

Het "nadeel" t.o.v. hoe je het nu gebruikt is dat je dan niet een blok met even regels en oneven regels onder elkaar hebt maar alleen de even of oneven regels ziet, of alles. Maar het gaat wel 100x sneller. (Give or take ;))
 
Laatst bewerkt:
@Ed

Lijkt =rest(B5;2) je niet voldoende ?
 
Dat had ik niet getest maar is inderdaad voldoende, en logisch ook :)
 
Bedankt weer voor deze snelle reacties van jullie kant snb en Edmoor
De oplossing werkt wel inderdaad maar ik wil de volgorde wel behouden op 1 tabblad. Als ik iemand toevoeg kan dus de volgorde anders zijn dan netjes op volgorde. dan wordt eerst alles op volgorde laag naar hoog gezet en daarna de verdeling oneven even en deze verdeling duurt dus best wel lang.
De verdeling oneven en even moet dus altijd op dit tabblad zo blijven bestaan. Ik had gehoopt dat dit door een snellere macro kon dan diegene die ik, ook verkregen via dit forum, nu gebruik.
mocht het toch anders kunnen maar met behoud van mijn verdeling hou ik mij aangeboden. Zo niet blijf ik mijn methode behouden. Het werkt wel en er zit in mijn macro nog een heel stuk aanvast wat ook uitgevoerd wordt wat voor deze vraag niet van toepassing was. Het is ook puur deze verdeling oneven/even wat lang duurt in de macro. De rest is fracties van seconden.
Toch thanks. Zal nog een dagje wachten op antwoorden anders sluit ik deze vraag.
 
Samui,

Waarschijnlijk is je programma veel bezig met het herberekenen van formules en het opnieuw schrijven naar het scherm
van gemuteerde gegevens. Je zou dit in je macro kunnen uitschakelen.

Code:
Sub evenoneven()
Dim cl As Range, c0 As String, sq, i As Long

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

--- Jouw code van evenoneven()

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub

Veel Succes.
 
Ik doe het nu op deze manier

Met wat hulp van jullie en zelf nog eens kijken in etappes gebruik ik mijn macro nu op de volgende manier.
Ik win hier ruim de helft aan tijd mee en mijn tabblad blijft zoals ik het wens.

Ik gebruik om mijn deelnemers in te delen een pivate sub
Wat doe ik nu:
Ik kies waar een deelnemer komt te staan dmv een messagebox en de macro begint zijn werk. Vandaar dat jullie ook soms regels zien met ................heeft 2 standplaatsen
Deze worden door de macro zelf ingevuld bij personen met meerdere plekken. Maar deze extra plekken komen eerst helemaal onderaan te staan in de macro en daarna wordtd alles pas goed gezet.

Wat ik nu doe t.o.v. voorheen is dat ik eerst van laag naar hoog op volgorde laat zetten. De nog in te delen deelnemers komen nu onderaan te staan.
Daarna laat ik oneven uitvoeren daarna even, vervolgens knip en plak ik alles vanaf de 1e nog in te delen deelnemer naar B5 en staan mijn nog in te delen deelnemers vanaf nu bovenaan en staat oneven en even gesplitst.
Mijn nog in te delen deelnemers stonden voorheen op de scheiding oneven/even ergens in het midden. Nu dus bovenaan. Is gelijk ook wat makkelijker.

Op deze manier win ik meer dan de helft van mijn splitsing in mijn totale macro t.o.v. voorheen.
Wellicht niet de meest gangbare oplossing maar voorlopig kan ik er mee leven.

Mochten jullie nog willen zien hoe het nu werkt. Heb bestand toegevoegd. Getalletje invullen in een grijze cel klik op je vierkantje en voila.
Nogmaals dit is maar een gedeelte van mijn totale macro. In mijn origineel wordt kolom A netjes rood gekleurd voor de locaties die al bezet zijn en krijg ik een melding als ik iemand wil indelen op een bezette locatie.
Bedankt voor jullie input weer en tot de volgende keer. Dan meld ik mij weer met een probleem om hopelijk weer een oplossing van jullie kant te ontvangen.
Ik ga de vraag vandaag sluiten.

met vriendelijke groet,

Frank :thumb: :thumb: :thumb:
 

Bijlagen

  • helpdesk.xls
    387 KB · Weergaven: 19
Het kan een heel stuk sneller als je de geboden oplossingen logisch had toegepast.

Probeer deze maar eens
Code:
Sub VenA()
Application.Calculation = xlCalculationManual
With ActiveSheet
    For Each cl In .[B5:B256]
        If Len(cl.Value) > 0 Then cl.Offset(, 42).Value = cl.Value Mod 2 Else cl.Offset(, 42).Value = -1
    Next cl
    .[A5:AR256].Sort [AR5], xlDescending, [B5], , xlAscending
    .[AR5:Ar256].ClearContents
End With
Application.Calculation = xlCalculationAutomatic
End Sub

In kolom AR wordt tijdelijk een een 0 voor even een 1 voor oneven en een -1 voor lege cellen neergezet. Vervolgens wordt er op kolom AR en op B gesorteerd.

Probeer ook alle selects en activate uit je code te verwijderen. Dit werkt ook alleen maar vertragend.
 
Kijk daarom ben ik zo blij met dit forum.
Dit soort dingen krijg ik nog niet voor elkaar. Probeer er zo goed mogelijk mee om te gaan met de middelen die ik aangeboden krijg maar hoop dit in de toekomst beter te gaan begrijpen.
De bijbehorende tekst is net niet helemaal abacadabra maar mij lukt deze manier nog niet.
Wel al in het bezit van een mooi VBA boek.
DIT WERKT SUPER.
Heb wel de .[A5:AR256].Sort verandert in .[B5:AR256].Sort anders werd mijn kolom A ook meegenomen en die moet gewoon 1 t/m 252 in dit geval blijven.

VenA en alle anderen die op mijn vraag gereageerd hebben,

:thumb: superbedankt
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan