Ik wil met een macro de namen alfabetisch sorteren. De laatste rij
(Totalen) mag niet mee gesorteerd worden, m.a.w. moet dus steeds
onderaan blijven.
Mijn macro ziet er als volgt uit: "relatief" zoek ik de laatste cel van
het bereik en dan ga ik één cel omhoog. Vervolgens selecteer ik
"absoluut" met Shift+Enter de cel A1. Ik voer de sorteeropdracht uit
op de bekomen selectie.
Als de lijst nadien echter langer of korter is geworden, negeert de
macro het "relatieve zoeken van de laatste cel" en neemt hij telkens
hetzelfde bereik als bij de eerste keer.
Wat doe ik fout?
Verschil met jouw vraag: jij selecteert de laatste rij NIET.
Dit heb ik proberen op te lossen met de regel
ActiveCell.SpecialCells(xlLastCell).Select
ActiveCell.Offset(-1, 0).Select
Kijk maar eens of je er iets mee aan kunt.
Groet,
Guus
Sub Tricks_SorterenHuidigeKolom()
Dim SortKolom As String, Selectie As String, start As String
Dim t As String
'Zorg dat de cursor in de beginkolom (kolom met Procentuele Score) staat.
t = MsgBox("Sorteren de gehele dataset op de gegevens in HUIDIGE KOLOM"
& vbCrLf & vbCrLf & _
"Staat de cursor in de eerste cel van de kolom waarop u wil
sorteren?" & vbCrLf & vbCrLf & _
"<OK> = Doorgaan <Cancel> = stop deze macro", _
vbOKCancel, _
"Sorteren complete dataset op basis van Huidige Kolom")
If t = vbCancel Then End
ActiveSheet.Unprotect
start = ActiveCell.Address
SortKolom = Chr(ActiveCell.Column + 64) & "2"
ActiveCell.SpecialCells(xlLastCell).Select
ActiveCell.Offset(-1, 0).Select
Selectie = "A1:" & ActiveCell.Address
Range(Selectie).Sort _
Key1:=Range(SortKolom), Order1:=xlAscending, _
header:=xlGuess, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal, _
DataOption2:=xlSortNormal
'Terugkeren naar het begin van het werkblad
Range(start).Select
End Sub
ActiveCell.SpecialCells(xlLastCell).Select
zou vanaf A1 niet werken
Selection.End(xlToRight).Select
Selection.End(xlDown).Select?
Kopregel en Totaalkolom zullen immers aaneengesloten cellen zijn.
gr.
"EDRS" <eddy.d...@skynet.be> schreef in bericht
news:1161952695.0...@m73g2000cwd.googlegroups.com...
1. Heb je ook wel de totale rij verwijderd m.b.v. Delete Row - Entire Row
2. Heb je de sheet ook wel bewaard, alvorens de macro uit te voeren.
Je kunt immers testen of er nog lege rijen in jouw sheet staan:
a. Eenvoudig naar het einde gaan en het aantal rijen controleren
b. De macro uitbreiden met 'verwijderen lege regels' alvorens te sorteren.
Dit laatste is m.i. echter overbodig.
Mocht het probleem blijven aanhouden, dan is het misschien een optie om een
voorbeeld te sturen.
Groet,
Guus
"EDRS" schreef:
Beste Guus,
zo ziet mijn file eruit. Onder SOM wordt de som gemaakt van de
aantallen per dag van de lopende maand.
Elke dag kunnen er lijnen bijkomen; er kunnen ook lijnen wegvallen,
zodat de lijst elke dag van lengte verschilt. Een macro "Lijn
toevoegen" zorgt ervoor dat onder de eerste naam een lijn wordt
ingevoegd en alle formules doorgesleept worden. Een lijn verwijderen
doe ik manueel met delete row.
En dan moeten de namen alfabetisch gesorteerd worden. Het totaal moet
onderaan blijven. Natuurlijk kan ik alle rijen manueel selecteren en
sorteren, maar de echte lijst bevat enkele honderden namen en de
gebruiker moet met één druk op de opdrachtknop waaraan de macro is
toegewezen, de sortering kunnen uitvoeren.
Hopelijk verduidelijkt dit voor jou mijn probleem?
groeten,
Eddy (EDRS)
ps: de tip van Erik Veldkamp werkt ook niet (tenzij ik een fout maak)
Mijn oplossing is deze.
Hou een lege regel tussen de laatste naam en Totaal
Naam
Som
dag1
dag2
dag3
Rubbens
0
Voet
0
Zee
24
2
3
1
kamp
0
Aerts
0
Totaal
24
2
3
1
Gebruik dan deze macro
Sub sorteren()
'
' sorteren Macro
' De macro is opgenomen op 30-10-2006 door Cor Reijers.
'
'
Range("A3").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess,
_
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End Sub
Dan is dit het resultaat
Naam
Som
dag1
dag2
dag3
Aerts
0
kamp
0
Rubbens
0
Voet
0
Zee
24
2
3
1
Totaal
24
2
3
1
Veel succes,
Cor Reijers
"EDRS" <eddy.d...@skynet.be> schreef in bericht
news:1162217687.6...@f16g2000cwb.googlegroups.com...
Mijn oplossing is deze,
Hou een regel vrij tussen de laaste naam en Totaal
NAAM SOM 01 02 03 04 .....31
Jansen 23 2 3 1 2 ..... 1
Peters 22 1 2 6 3..... 2
Aerts 35 2 1 5 1..... 4
TOTAAL 80 5 6 12 6..... 7
en voor dan deze macro uit :
Sub sorteren()
'
' sorteren Macro
' De macro is opgenomen op 30-10-2006 door Cor Reijers.
'
'
Range("A3").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess,
_
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End Sub
Veel succes,
Cor Reijers
"EDRS" <eddy.d...@skynet.be> schreef in bericht
news:1162217687.6...@f16g2000cwb.googlegroups.com...
NAAM SOM 01 02 03 04 .....31
Spijts al jullie goede tips blijft mijn probleem onopgelost. De kern
van de zaak is het "relatief" bepalen van de selectie die moet
gesorteerd worden, nadat de lijst is verlengd of verkort.
Een macro die relatief naar de laatste cel van de voorlaatste lijn
gaat, werkt telkens wel degelijk.
Als je dan vanuit die cel "absoluut" met Shift+Enter cel A1 selecteert,
beschouwt excel bij het volgende gebruik van de macro die selectie
blijkbaar niet meer als relatief,
Nogmaals, ik kan mijn te sorteren lijnen ook wel telkens manueel kiezen
en dan de sortering uitvoeren, maar de bedoeling is dat het steeds
automatisch gebeurt met één klik op een opdrachtknop.
Ik blijf zelf zoeken en hopen dat er toch iemand dit kan oplossen.
groeten.