Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Alfabetisch sorteren met een macro

489 views
Skip to first unread message

EDRS

unread,
Oct 26, 2006, 8:16:44 AM10/26/06
to
Ik heb een excel-file met een lijst met namen van personen en een
aantal berekende gegevens.
In de onderste rij worden per kolom alle gegevens van de rijen
opgeteld.
Dagelijks moeten in de lijst rijen verwijderd en/of andere toegevoegd
worden. Daardoor verschilt de lijst na elke aanpassing van lengte.

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?

Guus

unread,
Oct 26, 2006, 8:49:02 AM10/26/06
to
Hoi EDRS,
Zou onderstaande VBA-code (macro) iets kunnen zijn?
De macro sorteert de gehele dataset op basis van de kolom waarin de cursor
wordt gezet.

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

EDRS

unread,
Oct 27, 2006, 8:38:15 AM10/27/06
to
Beste Guus,
dank voor je snelle reactie. Ik heb een aantal dingen uitgetest met je
macro, maar het wil toch niet lukken.
Nu ben ik zover dat de macro altijd naar de laatste cel gaat, maar als
ik de lijst dan weer korter maak, gaat hij naar de laatste cel van wat
ooit de langste lijst geweest is, hoewel er geen gegevens of opmaak
meer in die cel staan.
Ik heb ook al getracht die totaallijn in de macro te deleten en na het
sorteren terug te laten berekenen, maar dat geeft hetzelfde resultaat.

Erik Veldkamp

unread,
Oct 28, 2006, 10:59:52 AM10/28/06
to
In plaats van

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

Guus

unread,
Oct 29, 2006, 2:04:01 PM10/29/06
to
Beste EDRS,
Wat ik nu begrijp uit jouw bericht is, dat de rijen, ondanks dat ze leeg
zijn, blijven bestaan in jouw bestand.

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:

EDRS

unread,
Oct 30, 2006, 9:14:47 AM10/30/06
to

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

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)

cor reijers

unread,
Oct 30, 2006, 4:35:36 PM10/30/06
to
Hoi,

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

cor reijers

unread,
Oct 30, 2006, 4:54:33 PM10/30/06
to
Beste EDRS,

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

EDRS

unread,
Oct 31, 2006, 5:13:19 AM10/31/06
to
Hallo,

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.

0 new messages