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

van jaartal naar tekst in vba

Status
Niet open voor verdere reacties.

Theophiel

Gebruiker
Lid geworden
17 jan 2016
Berichten
89
Hallo beste forumleden,

Mijn eerste bezoekje aan dit forum!
Mijn kennis is beperkt en hoop dat iemand me even verder kan helpen.
Ik heb al enkele uren gespendeerd naar het zoeken voor de juiste vba voor volgend probleem:

Ik haal een datum van een andere sheet en van deze datum wil ik enkel het jaartal als tekst overhouden.
Dit doe ik om via vba te filteren op jaar.
Ik heb al geprobeerd met de macrorecorder en dan de vba aan te passen maar helaas het lukt me niet.

Hopend op wat hulp alvast bedankt op voorhand!
 
Welkom bij Helpmij :)
Een datum is normaal gesproken geen tekst, dus om erop te filteren is het afhankelijk van hoe het in je werkblad is opgeslagen.
Een voorbeeld document is daarom gewenst.

Ennuh, nee, ik laat me geen stofzuiger aansmeren :P
 
Laatst bewerkt:
Gebruik in je vba-code de format-instructie

Code:
datum = format(date, "mmmm")   'of "m" of "mm" of "mmm"

Ja stom deze geldt voor de maand.
 
Laatst bewerkt:
Als dat is wat je kan gebruiken om te filteren maak van mmmm dan yyyy.
 
Gelukkig is dit zo'n vraag die weinig met Excel van doen heeft, maar alles met VBA. In de cursus Access staat in hoofdstuk 14 een functie uitgelegd die getallen omzet naar tekst. En aanzien een jaartal gewoon een getal is, kun je die functie daar prima voor inzetten. Kijk daar maar eens naar!
 
Overigens, ben ik het met de andere heren wel eens, als je wilt filteren op een jaar, heb je aan het jaartal meer dan genoeg. Er is weinig reden om daar een tekst van te maken. Dat filtert niet beter als een getal. Sterker nog: als je het jaartal als tekst behandelt, wordt het veld ook alfanumeriek gefilterd en niet numeriek. Dat maakt bij jaartallen niet zoveel uit (bijna altijd 4 cijfers) maar je bouwt een extra foutmarge in die nergens voor nodig is.
 
Bv. als de datum op blad2 in cel A1 staat.
Code:
Sub hsv()
 Cells(1).CurrentRegion.AutoFilter 1, , xlFilterValues, Array(0, Format(Blad2.[a1], "m-d-yyyy"))
End Sub

N.B.
array(0,date) = filter op jaar.
array(1,date) = filter op maand.
array(2,date) = filter op dag.
 
hallo beste forumleden,

Alvast bedankt voor de reacties,
Om de leeftijd te bepalen volgens geboortedatum en trainingsdatum heb ik de formule
Code:
=TEKST(Tabel24[[#Deze rij];[datum]];"jjjj")-TEKST(Tabel24[[#Deze rij];[geboortejaar]];"jjjj")
, deze redenering had ik genomen om iets in die zin in een macro te plaatsen zodat ik in sheet filter ook kan filteren op jaargetal door het gewenste jaargetal in de groene balk in te typen.
het gaat dus over sheet filter.

Ik heb het ondertussen gedaan gekregen om het gewenste te verkrijgen maar nu zit ik echt vast. Het loopt fout wanneer ik in de groene balk het jaargetal ingeef waarop ik wens te filteren.

Graag had ik hierop wat hulp gekregen.

Alvast bedankt op voorhand!

en oh ja het was niet de paraplu verkoper, maar was wel een leuke opmerking
 

Bijlagen

Zet een geldig datum in C3 van tabblad filter (bv. 1-1-2015).
Code:
Sub MacroFilterData()
 With Sheets("training")
    .Cells(1).CurrentRegion.AutoFilter 2, , xlFilterValues, Array(0, Format(Sheets("filter").[c3], "m-d-yyyy"))
    .ListObjects(1).DataBodyRange.Copy
    Cells(Rows.Count, 2).End(xlUp).Offset(1).PasteSpecial xlPasteValues
    .Cells(1).CurrentRegion.AutoFilter
 End With
End Sub
 
hartelijk dank voor de reactie,

nu wordt er wel gefilterd op jaartal maar de bedoeling is dat alle filters in de groene balk gelijktijdig gebruikt kunnen worden of ik heb de oplossing fout ingeplant.
Code:
Sub MacroFilterData()

' filterd adta uit training en plaatst gegevens op blad filter

    Sheets("training").Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("B2:N3"), CopyToRange:=Range("B5:N5"), Unique:=False
        
'sorteerd data op tijd
    
'zet rij C op jaartallen
    With Sheets("training")
    .Cells(1).CurrentRegion.AutoFilter 2, , xlFilterValues, Array(0, Format(Sheets("filter").[c3], "m-d-yyyy"))
    .ListObjects(1).DataBodyRange.Copy
    Cells(Rows.Count, 2).End(xlUp).Offset(1).PasteSpecial xlPasteValues
    .Cells(1).CurrentRegion.AutoFilter
 End With
End Sub
Mijn fout, ik had dit niet meegegeven in mijn vraag.

Mag ik nog wat hulp?

Alvast bedankt op voorhand!
 
Hartelijk dank voor alle snelle hulp,

SNB, dit had gekunnen maar dan zit ik met meerdere datums die ingevuld moeten worden.
Ik heb mijn probleem (eventueel voorlopig) opgelost met een extra tabel in het werkblad training met de formule
Code:
=TEKST(Tabel24[[#Deze rij];[datum]];"jjjj")

de macro is dan
Code:
Sub MacroFilterData()

' filterd adta uit training en plaatst gegevens op blad filter

    Sheets("training").Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("B2:O3"), CopyToRange:=Range("B5:O5"), Unique:=False
        
'sorteerd data op tijd
    
    Range("B6").End(xlDown).CurrentRegion.Sort [E6], Header:=xlYes
    
End Sub

Indien dit eenvoudiger kan (hoogst waarschijnlijk wel), dan kan ik er alleen maar van leren.


Alvast bedankt voor alle aangeboden hulp!
 
Je hebt over het hoofd gezien dat de derde persoon enkelvoud tegenwoordige tijd altijd eindigt op een t: filtert en sorteert.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan