• 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.

Excel macro sorteren variabele range

Status
Niet open voor verdere reacties.

Duis

Gebruiker
Lid geworden
7 nov 2015
Berichten
5
Hoi, wie kan mij helpen?
Ik wil mbv een macro gegevens sorteren waarbij de range elke keer kan variëren met het aantal regels.
De sortering moet plaats vinden op kolom 'Naam'.
In het voorbeeld betreft het de range van lessen A4..C7. De volgende keer kan het A5..C10 zijn.
De range van taken A12..C15 eronder mag niet mee sorteren.
Bekijk bijlage Voorbeeld.xlsx
Groetjes Marleen
 
Laatst bewerkt:
Hoi Sylvester,
Hoe blij maak je mij met 1 regel. Super dank je wel.
Dit was nog een onopgelost onderdeel van mijn macro.
Ga ik veel mensen blij mee maken.
Dank. Marleen
 
Hoi Sylvester,
Zou je mij ook kunnen helpen met een 2e deel?
Met jouw ervaring kan ik met mijn beperkte kennis niet evenaren.
Met jouw regel worden de lessen bij 'Contacttijd' prachtig gesorteerd.
Hoe krijg ik de 'Taken' (kleur groen) gesorteerd? Waar 'Taken' begint is een willekeurige rij, omdat het afhangt van het aantal lessen. Mogelijk dat er eerst gezocht moet worden op het woord 'Taken' en dan sorteren van dat gebied.
Voorbeeld praktijk: Bekijk bijlage Praktijkvoorbeeld.xlsx
Groetjes Marleen
 

Bijlagen

  • Praktijkvoorbeeld.xlsx
    20 KB · Weergaven: 82
  • Praktijkvoorbeeld.xlsx
    20,1 KB · Weergaven: 58
Laatst bewerkt:
Wel handig als je er even bijzet waarop gesorteerd moet worden.

De contacttijd wordt gesorteerd op kolom B de Taken op Kolom C

Code:
Sub VenA()
With Sheets("Medewerker GRSB")
    Set f = .Columns(1).Find("Contacttijd")
    If Not f Is Nothing Then
        .Cells(f.Row, 1).Offset(1).Resize(.Cells(f.Row, 1).CurrentRegion.Rows.Count - 2, 8).Sort .Cells(f.Row + 1, [COLOR="#FF0000"]2[/COLOR]), Header:=xlYes
    End If
    Set f = .Columns(1).Find("Taken")
    If Not f Is Nothing Then
        .Cells(f.Row, 1).Offset(1).Resize(.Cells(f.Row, 1).CurrentRegion.Rows.Count - 2, 8).Sort .Cells(f.Row + 1, [COLOR="#FF0000"]3[/COLOR]), Header:=xlYes
    End If
End With
End Sub
 
Code:
Set f = Sheets("Medewerker GRSB").Columns(1).Find("Taken")
If Not f Is Nothing Then f(2, 1).Resize(f.CurrentRegion.Rows.Count - 2, 8).Sort f(2, [COLOR="#FF0000"]3[/COLOR]), Header:=xlYes

die rode 3 geeft aan dat je op de derde kolom sorteert

ps die van VenA doet het ook prima
 
Laatst bewerkt:
Hebben jullie via mail contact ofzo? Of is er een bericht weggevallen?
 
Allebei super dank. Ik ben geen expert in VBA, dus jullie hulp is erg welkom. Zoals ik al eerder aangaf, maak je hiermee veel mensen blij.
Zoals ik al aangaf zijn jullie zo goed hierin, dus durf ik voor de tijdsdruk toch nog een vraag te stellen. Jullie weten zo het antwoord.
Beide werken prima. Hoe kan het zonder verwijzing naar de naam van de sheet?
Ik moet dus (80 takenpakketten)*10 collega's met mij sorteren, waarbij elke keer de sheet een andere naam heeft.

Hartelijk dank, Marleen
 
a, zijn er sheets die niet meedoen
b, welke tabelnamen moeten gesorteerd worden op welke kolommen
c, staat de tabelnaam overal direct boven de tabelkoppen?
d, staan de tabelnamen altijd in de eerste kolom

en is er nog iets dat van belang kan zijn?
bvb staan er soms lege regels in een tabel
eindigt een tabel altijd in de eerste kolom met het woord Totaal?
heet toevallig de laatste kolomkop van de tabellen Totaal?
 
Laatst bewerkt:
Hoi Sylvester,

Ik ben eruit. Met dank aan jullie input.
De structuur van alle sheets zijn hetzelfde. Alleen kan het aantal regels bovenin verschillen, bij Contacttijd en Taken. Door te zoeken op de titel van de range loopt de sortering goed. Alleen moest de verwijzing naar de naam van de worksheet eruit, omdat dit per sheet verschilt.
Dank !!!!! voor alle goede hulp. Ik ben (zoals je al gemerkt hebt) heel erg blij mee.
De week is al geslaagd.
Hartelijke groet, Marleen


Set f = ActiveSheet.Columns(1).Find("Contacttijd")
If Not f Is Nothing Then f(2, 1).Resize(f.CurrentRegion.Rows.Count - 2, 8).Sort f(2, 3), Header:=xlYes

Set f = ActiveSheet.Columns(1).Find("Taken")
If Not f Is Nothing Then f(2, 1).Resize(f.CurrentRegion.Rows.Count - 2, 8).Sort f(2, 3), Header:=xlYes
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan