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

Automatisch sorteren (meerdere ranges in 1 werkblad)

Status
Niet open voor verdere reacties.

Edwinvd90

Gebruiker
Lid geworden
14 jan 2021
Berichten
13
Goedemiddag,

Ik ben bezig met een Excel-bestand met meerdere werkbladen. Op één werkblad wil ik meerdere ranges sorteren, maar ik kom er met VBA en zoektochten op internet niet uit. Elke range moet gesorteerd worden van hoog naar laag op Kolom B. Maar dit moet dus in de 4 ranges onafhankelijk van elkaar gebeuren. En tussen elke range zitten enkele lege rijen met andere belangrijke gegevens. Hoe is dit te doen? Even een voorbeeld:

Kolom A - Kolom B - Kolom C - Kolom D
Lege rij
Lege rij
Lege rij
Lege rij
Header-rij nieuwe range (zeg maar A6 : D9)
Inhoud A - Inhoud B - Inhoud C - Inhoud - D
Inhoud A - Inhoud B - Inhoud C - Inhoud - D
Inhoud A - Inhoud B - Inhoud C - Inhoud - D
Inhoud A - Inhoud B - Inhoud C - Inhoud - D
Lege rij
Lege rij
Lege rij
Lege rij
Header-rij
Inhoud A - Inhoud B - Inhoud C - Inhoud - D
Inhoud A - Inhoud B - Inhoud C - Inhoud - D
Inhoud A - Inhoud B - Inhoud C - Inhoud - D
Inhoud A - Inhoud B - Inhoud C - Inhoud - D
Lege rij
Lege rij
Lege rij
Lege rij
Header-rij
Inhoud A - Inhoud B - Inhoud C - Inhoud - D
Inhoud A - Inhoud B - Inhoud C - Inhoud - D
Inhoud A - Inhoud B - Inhoud C - Inhoud - D
Inhoud A - Inhoud B - Inhoud C - Inhoud - D
Lege rij
Lege rij
Lege rij
Lege rij
Header-rij
Inhoud A - Inhoud B - Inhoud C - Inhoud - D
Inhoud A - Inhoud B - Inhoud C - Inhoud - D
Inhoud A - Inhoud B - Inhoud C - Inhoud - D
Inhoud A - Inhoud B - Inhoud C - Inhoud - D
 
Plaats een relevant voorbeeldbestand
 
Zo iets mischien

Option Explicit
Sub sorterenNamenLijst()
Application.ScreenUpdating = False
Range("D4:E103").Select
Selection.Sort Key1:=Range("D5"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("D4").Select
Application.ScreenUpdating = True

Application.ScreenUpdating = False
Range("I4:J103").Select
Selection.Sort Key1:=Range("I5"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("I4").Select
Application.ScreenUpdating = True
End Sub
 
Dat kan niet. Of het is leeg of er staan gegevens.

Er staan gegevens, maar van ander belang dan de ranges die gesorteerd moeten worden. Ik heb nu even niet het voorbeeldbestand binnen bereik, maar plaats ik zsm.
 
Stuur ik zodra ik deze even in bereik heb, staat op mijn werkcomputer. Het idee is dat er 4 ranges zijn A8 tot F23, A29 tot F44, A50 tot F65 en A71 tot F86. Deze moeten allemaal aflopend gesorteerd worden op kolom B.

Het gaat in dit geval om recepturen die verdeeld moeten worden over 4 bakken in de aflopende volgorde. Tussen de ranges staat informatie over de bak, de persoon die het maakt e.d. Dus vandaar de multiple ranges.
 
2 versies, 1e versie zal het nu vermoedelijk niet meer doen, want aanvankelijk was alles leeg tussen die blokken.
Code:
Sub sorteren_op_B()
   For Each ar In ActiveSheet.Columns("B").SpecialCells(xlConstants).Areas
      With ar.CurrentRegion
         .Sort .Range("B1"), xlDescending, Header:=xlYes
      End With
   Next
End Sub

Sub Sorteren_Op_B2()
   For Each ar In Range("A8:F23,A29:F44,A50:F65,A71:F86").Areas
      ar.Sort ar.Range("B1"), xlDescending, Header:=xlYes
   Next
End Sub
 
Laatst bewerkt:
Als ik goed geteld heb dan zo.

Code:
Sub VenA()
  For j = 8 To 71 Step 21
    Cells(j, 1).Resize(16, 6).Sort Cells(j, 2), , , , , , , xlYes
  Next j
End Sub
 
Een .xlsx bevat geen macro's. Het bereik is anders dan eerst doorgegeven. Gebruik geen samengevoegde cellen en al helemaal niet in combinatie met VBA. Maak van jouw tabellen echte tabellen. Dan kan je eenvoudig met een lusje de tabellen sorteren.
 
je maakt het jezelf gemakkelijker als je VenA's opmerkingen opvolgt.
Of anders
Code:
Sub Sorteren_Op_B2()
   With Sheets("blad1")                          'in dit blad
      .Range("A1:A200").Name = "kolomA"          'gedefinieerde naam
      arr = Filter([transpose(if(kolomA="grondstof",row(kolomA),"~"))], "~", 0)   'bepaal alle A-cellen met "grondstof"

      If UBound(arr) = -1 Then Exit Sub         'stop in geval er geen zijn
      For i = 0 To UBound(arr)                   'in een loopje aflopen
         With .Cells(arr(i), 1).Resize(18, 8)    'bereik van 18 rijen en 8 kolommen
            .Sort .Cells(1, 2), xlDescending, Header:=xlYes   'sorteren op B-kolom aflopend
         End With
      Next
   End With
End Sub
 
Een .xlsx bevat geen macro's. Het bereik is anders dan eerst doorgegeven. Gebruik geen samengevoegde cellen en al helemaal niet in combinatie met VBA. Maak van jouw tabellen echte tabellen. Dan kan je eenvoudig met een lusje de tabellen sorteren.

Het originele bestand is een .xlsm waarin op Werkblad 1 al een ander VBA werkt, ik had nu even een snel voorbeeldbestand gemaakt omdat in het originele bestand vertrouwelijke informatie staat. Sorry dat het bereik iets afwijkt van wat ik heb doorgegeven, dat deed ik vrijdag thuis vanuit mijn hoofd en nu heb ik de werkelijke opmaak even in dit snelle .xlsx bestand gemaakt.
 
Laatst bewerkt:
je maakt het jezelf gemakkelijker als je VenA's opmerkingen opvolgt.
Of anders
Code:
Sub Sorteren_Op_B2()
   With Sheets("blad1")                          'in dit blad
      .Range("A1:A200").Name = "kolomA"          'gedefinieerde naam
      arr = Filter([transpose(if(kolomA="grondstof",row(kolomA),"~"))], "~", 0)   'bepaal alle A-cellen met "grondstof"

      If UBound(arr) = -1 Then Exit Sub         'stop in geval er geen zijn
      For i = 0 To UBound(arr)                   'in een loopje aflopen
         With .Cells(arr(i), 1).Resize(18, 8)    'bereik van 18 rijen en 8 kolommen
            .Sort .Cells(1, 2), xlDescending, Header:=xlYes   'sorteren op B-kolom aflopend
         End With
      Next
   End With
End Sub

Deze code werkt nu op Rolcontainer 1, alleen werkt nog niet door in de andere Rolcontainers. Heb ook de samengevoegde cellen gesplitst.
 
Op deze manier heb je helemaal geen VBA nodig.

Thank SNB. Maar in het originele bestand wordt Smaak: aangestuurd door een ander werkblad en een keuze lijst. Dus elke smaak/receptuur heeft zijn eigen volgorden en recepturen dus vandaar dat ik deze wil 'programmeren'.
 
sorteer uw gegevens in [Receptuurberekening.xlsm]Receptuur' dan komen ze gesorteerd uit de formule
 
sorteer uw gegevens in [Receptuurberekening.xlsm]Receptuur' dan komen ze gesorteerd uit de formule

Dit kan niet. Aangezien er in dat werkblad meerdere grondstoffen staan die op verschillende manieren (met formules e.d.) verdeeld zijn over de rolcontainers. Ik ga even kijken of ik het voorbeeldbestand nog duidelijker kan maken.
 
Het quoten van volledige berichten is niet nodig. Als het originele bestand anders in elkaar steekt dan wat jij hier plaatst. dan kunnen alle helpers hier wel wat verzinnen maar heeft dan weinig nut aangezien geen van de aangedragen suggesties schijnt te werken.
 
Het quoten van volledige berichten is niet nodig. Als het originele bestand anders in elkaar steekt dan wat jij hier plaatst. dan kunnen alle helpers hier wel wat verzinnen maar heeft dan weinig nut aangezien geen van de aangedragen suggesties schijnt te werken.

Het is mijn eerste keer dat ik hulp vraag bij dergelijke vragen, dus misschien is het wat rommelig maar als het tot een eindresultaat leidt is dat de uitdaging wel waard lijkt mij. En de verschillende oplossingen helpen wellicht om daar te komen, dus niks is nutteloos lijkt mij.

Maar bij deze een duidelijker voorbeeldbestand met daarin de verwijzingen tussen Werkblad 1 en 2. De het vraagstuk ligt hierin bij het werkblad Rolcontainers.

Mijn excuses voor de verwarring, maar ik ben dankbaar voor alle hulp en bijdragen.
 

Bijlagen

Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan