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

Filter op "last month" en lege cellen

Status
Niet open voor verdere reacties.

Meaurk

Gebruiker
Lid geworden
29 jun 2012
Berichten
146
Hallo!

In een database heb ik in kolom AM allerlei datums staan. Middels een macro wil ik graag dat alleen de datums van de laatste maand én de lege cellen zichtbaar worden. Ik heb al iets geprobeerd zoals:
Code:
ActiveSheet.Range("$B$5:$AP$7500").AutoFilter Field:=38, Criteria1:=xlFilterLastMonth, Criteria2:="=", Operator:=xlFilterDynamic

Helaas krijg ik dit niet werkend. Heeft iemand een idee of dit mogelijk is en zo ja, hoe?
Alvast bedankt!
 
Welke Excel-versie?
Anders deze constructie gebruiken voor de wat oudere versie:
Code:
Sub Test()
 Dim StartD As Double
 Dim EndD As Double

 EndD = WorksheetFunction.EoMonth(Date, -1)
 StartD = DateSerial(Year(EndD), Month(EndD), 1)

ActiveSheet.Range("$B$5:$AP$7500").AutoFilter Field:=1, Criteria1:= _
 ">=" & StartD, Operator:=xlAnd, Criteria2:="<=" & EndD
 End Sub
 
Excel 2013, excuus.

Helaas, Cobbe. Jouw macro doet hetzelfde als mijn macro. Hij laat alleen de regels zien van de afgelopen maand, niet van de lege cellen.
 
Met de macro recorder heb ik gefilterd in AM1:AM100 en in het lijstje aangevinkt: april 2016 en lege cellen. Resultaat:
Code:
ActiveSheet.Range("$AM$1:$AM$100").AutoFilter Field:=1, Criteria1:=Array( _
        "="), Operator:=xlFilterValues, Criteria2:=Array(1, "4/30/2016")

Wellicht brengt dit je in de richting van de oplossing.
 
Dat is dus het probleem, Marcel. Het is geen vaste datum, maar het moet altijd een maand terug zijn. Dus als ik bijvoorbeeld. 3 juni kijk, moet ik 3 mei tot 2 juni te zien krijgen.
 
Probeer het zo eens

Code:
Sub VenA()
c00 = """"
For j = 0 To Day(DateSerial(Year(Date), Month(Date), 0))
    c00 = c00 & "|" & CDate(DateSerial(Year(Date), Month(Date) - 1, 1) + j)
Next j
    ActiveSheet.Range("$B$5:$AP$7500").AutoFilter 38, Split(Mid(c00, 2), "|"), Operator:=xlFilterValues
End Sub
 
Laatst bewerkt:
Het was ook maar een oplossingsrichting... :rolleyes:

Dat van die arrays lijkt toch wel OK. In ieder geval heb ik het in mijn testbestandje aan de praat met de volgende
Code:
Sub testArray()
    Dim i%
    Dim arr
    Dim startDate As Date
    startDate = WorksheetFunction.EDate(Date, -1)
    ReDim arr(1 To 2 * CDbl(Date - startDate))
    For i = 1 To UBound(arr) / 2
        arr(i * 2 - 1) = 2
        arr(i * 2) = Format(startDate + i - 1, "M/D/YYYY")
    Next i
    ActiveSheet.Range("$AM$1:$AM$100").AutoFilter Field:=1, Criteria1:=Array( _
        "="), Operator:=xlFilterValues, Criteria2:=Array(arr)
End Sub
Een bedreven VBA-er - edit: zoals VenA - kan hier wellicht nog een mooie oneliner van maken, maar vooralsnog hebben we iets werkends (althans bij mij lijkt het te werken).
 
Laatst bewerkt:
@VenA - Jouw macro maakt van alle lege cellen een 00-00-1900 waarde. Er gebeurd dus niets met de cellen van de afgelopen maand.

@MarcelBeug - Jouw macro werkt, top! :)
 
Dan weet ik niet wat je gedaan hebt maar er wordt niets naar het blad geschreven. Alleen werd er datum teveel zichtbaar

Code:
Sub VenA()
c00 = """"
For j = 0 To Day(DateSerial(Year(Date), Month(Date), 0)) - 1
    c00 = c00 & "|" & CDate(DateSerial(Year(Date), Month(Date) - 1, 1) + j)
Next j
    [A1:A80].AutoFilter 1, Split(Mid(c00, 2), "|"), Operator:=xlFilterValues
End Sub
 

Bijlagen

  • Filter vorige maand en lege cellen.xlsb
    15,1 KB · Weergaven: 24
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan