Cookies op Tweakers

Tweakers is onderdeel van DPG Media en maakt gebruik van cookies, JavaScript en vergelijkbare technologie om je onder andere een optimale gebruikerservaring te bieden. Ook kan Tweakers hierdoor het gedrag van bezoekers vastleggen en analyseren. Door gebruik te maken van deze website, of door op 'Cookies accepteren' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt? Bekijk dan ons cookiebeleid.

Meer informatie

Vraag


  • Ruud van Dijk
  • Registratie: februari 2021
  • Laatst online: 01-03 09:47
Mijn vraag
...
Ik heb een simpel werkblad als CSV bestand die uit het bedrijfsprogramma komt. Het betreft een prijslijst met iedere keer verschillende aantallen regels per blok, Blokken beginnen op kolom B, op regel 7. E.e.a. onder elkaar ingedeeld in groepen met 1 regel er tussen. Alles bij elkaar soms wel 10 van deze blokken gegevens a 6 kolommen breed, iedere keer verschillend in aantallen. De macro zou moeten sorteren op kolom C. Er zijn geen kolomkoppen. Het is makkelijk genoeg even een klein macrootje te maken om één blok te sorteren, maar dan laat ik de selectie sorteren met "Aangepast sorteren" op kolom C. Dit is één keer leuk maar dit komt best heel veel voor. Hoe kan ik er voor zorgen dat wanneer ik binnen 1 blok de meest linkse / bovenste cel selecteer, deze selectie uitbreid naar het blok rechts beneden, maar daarbij dus de sorteerfunctie (de ene keer dus voor 10 artikelen en het volgende blok voor 50 artikelen en dan weer 3.
Ik hoop dat ik het duidelijk uitgelegd heb.

Relevante software en hardware die ik gebruik
Excel / VBA
...

Wat ik al gevonden of geprobeerd heb
...Het is makkelijk genoeg even een klein macrootje te maken om één blok te sorteren, die heb ik wel maar daarachteraan dus steeds "Aangepast sorteren" Ik had ook een routine die sorteerde steeds eenzelfde hoeveelheid regels, dus niet werkbaar. :-(

Beste antwoord (via Ruud van Dijk op 01-03-2021 09:47)


  • Lustucru
  • Registratie: januari 2004
  • Niet online

Lustucru

26 03 2016

Dit moet het in principe doen:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Option Explicit

Sub RegionSort()
    Dim curRegion As Range
    
    'selecteer het eerste blok cellen. Als het blok niet begint op A1 moet je dat natuurlijk aanpassen
    Set curRegion = ActiveSheet.Range("A1").CurrentRegion

    DO
        'bewijs dat het werkt: in het venster direct verschijnt het adres van het gevonden blok
        Debug.Print curRegion.Address
        'sorteer het blok: je mag zelf even uitvogelen hoe sort verder moet worden aangeroepen
        curRegion.Sort
        'ga vanuit de onderkant van het blok twee regels naar beneden en selecteer het volgende blok
        Set curRegion = curRegion.End(xlDown).Offset(2, 0).CurrentRegion
    'we gaan er maar even vanuit dat ieder geldig blok minimaal twee regels bevat. 
    'Is een blok maar één regel dan denkt de macro dat hij klaar is
    Loop Until curRegion.Rows.Count < 2
End Sub

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland

Alle reacties


  • Lustucru
  • Registratie: januari 2004
  • Niet online

Lustucru

26 03 2016

Moet ieder blok apart gesorteerd worden of moeten alle blokken samengevat worden en dan gesorteerd?

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • Ruud van Dijk
  • Registratie: februari 2021
  • Laatst online: 01-03 09:47
Nee het gaat er om dat de groepen blijven dus ieder blok zou apart gesorteerd moeten worden.

  • g0tanks
  • Registratie: oktober 2008
  • Nu online

g0tanks

Moderator CSA
Is er toevallig een kolom waarin een soort Blok_ID staat? Dus waarmee je alle regels behorende bij één blok kunt identificeren?

Ultrawide gaming setup: AMD Ryzen 7 2700X | NVIDIA GeForce RTX 2080 | Dell Alienware AW3418DW


  • JukeboxBill
  • Registratie: juni 2003
  • Laatst online: 14-06 13:29
In LibreOffice zit een toetsenbord functie Ctrl+ * , waarbij (*) het vermenigvuldigingsteken op het numerieke toetsenblok is. Het selecteert het gegevensbereik vanaf de geselecteerde cel met uitbreiding naar een aaneengesloten blok dat gegevens bevat en begrensd wordt door lege rijen en kolommen.

Als ik het goed heb dan is dit in Excel Ctrl+Shift+Asterisk (*) en er zal vast ook wel een VBA functie voor zijn.

Soms ben ik bijna gelukkig


Acties:
  • Beste antwoord
  • +1Henk 'm!

  • Lustucru
  • Registratie: januari 2004
  • Niet online

Lustucru

26 03 2016

Dit moet het in principe doen:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Option Explicit

Sub RegionSort()
    Dim curRegion As Range
    
    'selecteer het eerste blok cellen. Als het blok niet begint op A1 moet je dat natuurlijk aanpassen
    Set curRegion = ActiveSheet.Range("A1").CurrentRegion

    DO
        'bewijs dat het werkt: in het venster direct verschijnt het adres van het gevonden blok
        Debug.Print curRegion.Address
        'sorteer het blok: je mag zelf even uitvogelen hoe sort verder moet worden aangeroepen
        curRegion.Sort
        'ga vanuit de onderkant van het blok twee regels naar beneden en selecteer het volgende blok
        Set curRegion = curRegion.End(xlDown).Offset(2, 0).CurrentRegion
    'we gaan er maar even vanuit dat ieder geldig blok minimaal twee regels bevat. 
    'Is een blok maar één regel dan denkt de macro dat hij klaar is
    Loop Until curRegion.Rows.Count < 2
End Sub

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • Ruud van Dijk
  • Registratie: februari 2021
  • Laatst online: 01-03 09:47
Het is voor mijn werk en nu zit ik thuis maar het betreft een lijst met in kolom A een groepsnaam op de zevende regel. De regels daaronder zijn leeg tot de daarop volgende groep.

  • Ruud van Dijk
  • Registratie: februari 2021
  • Laatst online: 01-03 09:47
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Option Explicit

Sub RegionSort()
Dim curRegion As Range

'selecteer het eerste blok cellen. Als het blok niet begint op A1 moet je dat natuurlijk aanpassen
Set curRegion = ActiveSheet.Range("A1").CurrentRegion

DO
'bewijs dat het werkt: in het venster direct verschijnt het adres van het gevonden blok
Debug.Print curRegion.Address
'sorteer het blok: je mag zelf even uitvogelen hoe sort verder moet worden aangeroepen
curRegion.Sort
'ga vanuit de onderkant van het blok twee regels naar beneden en selecteer het volgende blok
Set curRegion = curRegion.End(xlDown).Offset(2, 0).CurrentRegion
'we gaan er maar even vanuit dat ieder geldig blok minimaal twee regels bevat.
'Is een blok maar één regel dan denkt de macro dat hij klaar is
Loop Until curRegion.Rows.Count < 2
End Sub


Bovenstaande ga ik maandag direct uittesten, lijkt er wel op. Je hoort :)

  • g0tanks
  • Registratie: oktober 2008
  • Nu online

g0tanks

Moderator CSA
Ruud van Dijk schreef op zaterdag 27 februari 2021 @ 12:35:
het betreft een lijst met in kolom A een groepsnaam op de zevende regel. De regels daaronder zijn leeg tot de daarop volgende groep.
Dit is de eerste keer dat je over kolom A begint. Zeg je nou dat de data er zo uit ziet? Sorteren gaat er dan denk ik ook voor zorgen dat de groepsnaam niet meer onderaan elk blok komt te staan. Als je dat niet wil moet je de macro ook aanpassen dat alleen vanaf kolom B wordt gesorteerd.

Ruud van Dijk schreef op zaterdag 27 februari 2021 @ 12:40:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Geen idee wat je hiermee duidelijk wil maken.

[Voor 5% gewijzigd door g0tanks op 01-03-2021 09:35]

Ultrawide gaming setup: AMD Ryzen 7 2700X | NVIDIA GeForce RTX 2080 | Dell Alienware AW3418DW


  • Patrick_6369
  • Registratie: april 2010
  • Laatst online: 15-06 15:44
Dit klinkt als een klus voor PowerQuery.
Die Excel-tool is er voor gemaakt om gegevens in een semi-gestructureerde vorm te bewerken dat het in een gewenste tabel-vorm terecht komt. Afhankelijk van hoe je data er exact uit ziet is het makkelijk of extreem moeilijk om hem goed te bewerken, maar het is wel hiervoor bedoeld.

Hier zou een handtekening kunnen staan.


  • Ruud van Dijk
  • Registratie: februari 2021
  • Laatst online: 01-03 09:47

[Voor 27% gewijzigd door Ruud van Dijk op 01-03-2021 09:22]


  • Ruud van Dijk
  • Registratie: februari 2021
  • Laatst online: 01-03 09:47
Dit is een afbeelding hoe e.e.a. er uit ziet. Alleen wil ik dus niet dat kolom A mee sorteert.

  • g0tanks
  • Registratie: oktober 2008
  • Nu online

g0tanks

Moderator CSA
Als je nou was begonnen met die screenshot, dan had het een hele lap aan tekstuitleg gescheeld. ;)

De code van @Lustucru vergt dan iets meer aanpassing, bijvoorbeeld twee regels naar beneden voor het volgende blok werkt niet omdat er geen volledige witregel aanwezig is, maar is alsnog een zeer goed startpunt. Nu is het aan jou om het uit te werken.

Ultrawide gaming setup: AMD Ryzen 7 2700X | NVIDIA GeForce RTX 2080 | Dell Alienware AW3418DW


  • Ruud van Dijk
  • Registratie: februari 2021
  • Laatst online: 01-03 09:47
Ik ga er mee bezig. In ieder geval een leuke opgave er met bovenstaande uit te komen. Mensen bedankt zover.
Pagina: 1


Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Microsoft Xbox Series X LG CX Google Pixel 5a 5G Sony XH90 / XH92 Samsung Galaxy S21 5G Sony PlayStation 5 Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True