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

Sorteren met VBA

Status
Niet open voor verdere reacties.

Michael485

Gebruiker
Lid geworden
16 apr 2019
Berichten
11
Goedemiddag,

Ik wil graag 2 kolommen kunnen sorteren, waarbij kolom B gesorteerd wordt op getallen en kolom C op datum.
Is dit mogelijk om in 1 keer te verwerken in VBA?
Als ik het handmatig wil doen, zou ik eerst kolom C moeten sorteren en daarna kolom B. Als ik alleen kolom B sorteer staat de datum niet gesorteerd.

In de bijlage een voorbeeldbestand. In tabblad "Data" kan je de data opnieuw kopiëren na het sorteren in tabblad "sorteren". Er staat al een stukje VBA hoe ik het tot nu toe heb geprobeerd.

Nog een tweede vraag, is het mogelijk om een filter optie in kolom C te plaatsen waar ik jaren, maanden en dagen zie staan i.p.v. de hele regel zoals nu.

Ik hoor het graag.
 

Bijlagen

  • Sorteren VBA.xlsm
    773,2 KB · Weergaven: 40
Voor het sorteren.

Code:
Sub VenA()
  Cells(1).CurrentRegion.Resize(, 7).Sort [C1], , [B1], , , , , xlYes
End Sub

Als je wil filteren op datums dan moet je ervoor zorgen dat er datums in de kolom staan. Nu is het tekst en dan krijg je de hele regel te zien.
 
Bedankt voor je snelle bericht!

Die code werkt niet helemaal, de nummers in kolom B staan dan niet gesorteerd, de datum wel.

In principe werkt dit: eerst kolom C daarna B, maar dat moet toch simpeler kunnen lijkt mij?

lastrow = ThisWorkbook.Sheets("Sorteren").Cells(Rows.Count, 3).End(xlUp).Row
Range("B1").Select
Selection.AutoFilter
ActiveWorkbook.Worksheets("Sorteren").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sorteren").AutoFilter.Sort.SortFields.Add2 Key:=Range _
("C1:C" & lastrow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Sorteren").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Selection.AutoFilter

Range("B1").Select
Selection.AutoFilter
ActiveWorkbook.Worksheets("Sorteren").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sorteren").AutoFilter.Sort.SortFields.Add2 Key:=Range _
("B1:B" & lastrow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Sorteren").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Selection.AutoFilter


Ik krijg dat stukje tekst van de datum ergens uit geëxporteerd. Ik heb al geprobeerd om met de functie "DEEL" alleen het eerste stukje van de cellen te krijgen en er dan datum van te maken i.p.v. standaard. Alleen dan krijg ik alsnog letterlijk de cijfers te zien en geen maanden. Ik heb dit in kolom A geplaatst, misschien dat jij er iets mee kan?
 
Met Gegevens, Ophalen En transformeren, Nieuwe query, van Tekst is het een fluitje van een cent om deze import direct in een met Excel leesbaar format te krijgen met alle andere sorteringen en filters kant en klaar er in.
 
Snap niet precies wat je bedoeld.
Het punt is dat ik wel gewoon van CSV een normaal excel bestand kan maken met kolommen splitsen, maar dat ik daarna het niet voor elkaar krijg om de filter opties overzichtelijk te krijgen.

Als ik een datum normaal invoer krijg ik dit:
Schermafbeelding 2019-04-18 om 15.53.18.png



Als ik met DEEL(B2;1;10)
B2 = 2019-04-18T12:48:07+00:00
krijg ik dit:
Schermafbeelding 2019-04-18 om 15.54.39.png
 
Wil je voor de leesbaarheid jouw code even tussen codetags zetten.
DEEL() maakt er nog steeds tekst van.

Code:
[COLOR="#FF0000"]--[/COLOR]DEEL(B2;1;10)
Code:
=--links(B2;10)
Code:
=datumwaarde(links(B2;10))
En de celeigenschappen even op datum zetten.

Waarom staan in het voorbeeld bestand de 'datums' in kolom C? Dat maakt het een beetje verwarrend.
 
Laatst bewerkt:
Dank je. De functie "datumwaarde" kende ik nog niet.
ps. "datumwaarde" i.c.m. "deel" werkt ook.


Had je toevallig ook nog een suggestie om de kolommen te sorteren? Heb het idee dat dit niet helemaal de juiste notatie is, het doet wel wat ik wil hebben maar kan vast makkelijker.

Code:
lastrow = ThisWorkbook.Sheets("Sorteren").Cells(Rows.Count, 3).End(xlUp).Row
Range("B1").Select
Selection.AutoFilter
ActiveWorkbook.Worksheets("Sorteren").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sorteren").AutoFilter.Sort.SortFields.Add2 Key:=Range _
("C1:C" & lastrow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Sorteren").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Selection.AutoFilter

Range("B1").Select
Selection.AutoFilter
ActiveWorkbook.Worksheets("Sorteren").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sorteren").AutoFilter.Sort.SortFields.Add2 Key:=Range _
("B1:B" & lastrow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Sorteren").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Selection.AutoFilter

Alvast bedankt.
 
Die is ook wel te maken maar ik heb hier geen antwoord op gelezen

Waarom staan in het voorbeeld bestand de 'datums' in kolom C? Dat maakt het een beetje verwarrend.

In jouw formule haal je de datum uit kolom B terwijl deze in het bestand in kolom C staat. Plaats even een gelijkend voorbeeld. Met het getal in kolom A en de datum in kolom B

Code:
Sub VenA()
  Cells(1).CurrentRegion.Sort [A1], , [B1], , , , , xlYes
End Sub
 
O, Mac Excel. Tsja, dan ben je toch een beetje een tweede-rangs burger. Windows Excel heeft veel nieuwe functionaliteit die juist met dit soort dingen enorm helpt.
 
De datums horen inderdaad in kolom C zoals in het voorbeeldbestand.

Stukje met
Code:
DEEL(B2;1;10)
had ik als voorbeeld getypt in een leeg document, had eigenlijk niks met de VBA code zelf te maken.

Deze code werkt inderdaad als ik getallen in kolom A plaats en datums in kolom B
Code:
Cells(1).CurrentRegion.Sort [A1], , [B1], , , , , xlYes

Kan je mij uitleggen hoe dat met die komma's werkt? En ik neem aan dat als ik de getallen in B zet en datum in C dan ik van A1 en B1 gewoon B1 en C1 maak?
 
Top, bedankt!
Ga ik van het weekend even lezen, ben nog niet echt bekend met VBA.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan