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

VBA code sorteren vereenvoudigen

Status
Niet open voor verdere reacties.

selsmakke

Gebruiker
Lid geworden
19 mei 2015
Berichten
11
Hallo

Ik wil graag mijn huidige code voor het sorteren van gegevens vereenvoudigen. Mijn huidige code (opgenomen macro) geldt maar voor 1 sub:

Code:
Range("A1:BR197").Select
    ActiveWorkbook.Worksheets("week1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("week1").Sort.SortFields.Add Key:=Range("BR1:BR197") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("week1").Sort
        .SetRange Range("A1:BR197")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("A1:BR197").Select
    ActiveWorkbook.Worksheets("week1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("week1").Sort.SortFields.Add Key:=Range("M1:M197"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:="1,0", _
        DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("week1").Sort.SortFields.Add Key:=Range("C1:C197"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("week1").Sort
        .SetRange Range("A1:BR197")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("A1").Select


Ik heb deze code voor iedere maandag van het jaar (52x dus) en ook voor de andere dagen van de week heb ik zo'n code. Hij is hier gekoppeld aan week1.

Mijn vraag is dus: Hoe kan ik de code dusdanig aanpassen dat ik op 1 plek "week1" (en dus ook week2, week3 enz) kan ingeven en dat hij dan op de juiste manier sorteert.

Een voorbeeld bestand gaat moeilijk, het originele bestand is ca. 26 mb groot en is gekoppeld aan allemaal andere sheets. Ik hoop dat jullie me zo kunnen helpen.

Alvast bedankt!

Fokke
 
Maak er een losse routine van die je daar aanroept waar nodig, daar bepaal je dan ook om welke week het gaat:
Code:
Call SorteerWeek("week1")

De routine zelf gebruik je dan zo. De string "week1" is overal vervangen door Week:
Code:
Sub SorteerWeek (Week As String)
    Range("A1:BR197").Select
    ActiveWorkbook.Worksheets(Week).Sort.SortFields.Clear
    ActiveWorkbook.Worksheets(Week).Sort.SortFields.Add Key:=Range("BR1:BR197") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets(Week).Sort
        .SetRange Range("A1:BR197")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("A1:BR197").Select
    ActiveWorkbook.Worksheets(Week).Sort.SortFields.Clear
    ActiveWorkbook.Worksheets(Week).Sort.SortFields.Add Key:=Range("M1:M197"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:="1,0", _
        DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets(Week).Sort.SortFields.Add Key:=Range("C1:C197"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets(Week).Sort
        .SetRange Range("A1:BR197")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("A1").Select
End Sub
 
Laatst bewerkt:
.....en verwijder alle defaultargumenten.
.... en verwijder iedere 'select'.

Dan kom je hiermee ook al een eind:

Code:
Sub SorteerWeek (Week As String)
  with ActiveWorkbook.Worksheets(Week)
      .Range("A1:BR197").Sort .[BR1],,.[M1],2,,,.[C1],,xlguess
  End With
End Sub
 
Laatst bewerkt:
Mijn reactie was alleen als antwoord op de eigenlijke vraag.
Die code kan inderdaad veel beter maar zie je vaak zo bij niet gewijzigde opgenomen macro's.
 
Ik had 'vereenvoudigen' iets anders geïnterpreteerd. ;)
 
Bedankt heren!

De code van edmoor werkt in eerste instantie uitstekend, had hem al toegepast en is prima!
Ik vind de code van snb ook erg interessant, en ook die heb ik toegepast maar daar krijg ik een foutmelding bij. Hij blijft hangen op het sorteren... Ik kan niet ontdekken waar het aan ligt, de code is mij te simpel.:o
Zou je mij nog even op weg kunnen helpen snb?

Fokke
 
Met de hulpfunktie in de VBEditor (F1) kun je dit ook zelf. Leer je veel van.

Code:
With ActiveWorkbook.Worksheets(week)
  .Range("A1:BR197").Sort .[BR1], , .[M1], , 2, .[C1], , 0
End With
 
Bedankt!

Nu is ie goed.

Met F1 in de editor (ook met een foutmelding) wordt ik doorgestuurd het internet op...

Fokke

Fokke
 
Had je maar niet moeten 'up'graden. Ik werk met Excel 2010.
Ik word zelfs zonder t niet doorgestuurd.

Verder lijkt me het verschil tussen de code waarmee je startte, en de huidige tamelijk dramatisch.
 
Laatst bewerkt:
Met F1 in de editor (ook met een foutmelding) wordt ik doorgestuurd het internet op...

Prima toch?
Als het goed is ben je dan direct in de sectie waarover je meer informatie wilde hebben.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan