2017-02-13 6 views
0

Ich arbeite an einem Excel, die alle Monat Daten haben. Wenn ich erst Monate nach meinem aktuellen Arbeitsmonat filtern muss. dann, wie man Kodierung für dasselbe schreibt.Filter nur nächsten Monat

Für zB. Jetzt arbeite ich am Februar 17 Monat. Ich möchte bis Feb'17 filtern. Ausschließen aller zukünftigen Monate nach von Feb'17

Mein Code

ActiveSheet.Range("$A$:$AA" & LastRow2).AutoFilter FIELD:=18, Criteria1:=">=01/01/2006",Criteria2:="<=28/02/2017" 
+0

Klingt wie ein Plan. Jetzt, wenn Sie so freundlich sein werden, Ihren Codeversuch zu teilen, wo benötigen Sie unsere Hilfe, und wir werden unser Bestes tun, um Ihnen zu helfen –

+0

Mein Code ist unten - ActiveSheet.Range ("$ A $: $ AA" & LastRow2) .AutoFilter FIELD: = 18, Criteria1: = "> = 01/01/2006", Criteria2: = "<= 28/02/2017" – Saran

+0

'ActiveSheet.Range (" A1: AA "& LastRow2) .AutoFilter FELD: = 18, Criteria1: = "> = 01/01/2006", Operator: = xlAnd, Criteria2: = "<= 28/02/2017" ' – user3598756

Antwort

0

für die Kriterien2 Sie das heutige Datum konvertieren, indem DATE() Funktion erhalten können, sie zu Zeichenfolge verwenden mid() zu bekommen nur Monat und Jahr Werte ... schreiben Sie eine if-Funktion auf dem Monatswert basiert das letzte Datum Wert zu erhalten .... eine Funktion hinzuzufügen, die Jahr für Sprung zu überprüfen und Datumswert Feburar

Month_1=datepart("m",date()) 
year_1=datepart("yyyy",date()) 
if month in (01,03,05,07,08,10,12) then 
last_day=31 
elseif month <> 02 then 
last_day=30 
else 
isLeapYear = (Month(DateSerial(Yr, 2, 29)) = 2) 
if isLeapYear = True then 
last_day=29 
else 
last_day=28 
end if 
end if 
criteria_2=cdate(last_day & "/" & Month_1 & "/" & year_1) 

fügen diese Variable als das hinzufügen Kriterium 2 in Ihrem Filter .... Sie erhalten immer den letzten Tag des aktuellen Monats mit thi s Code.

Ich habe den Code nicht getestet. Bitte vergib mir, wenn es Bugs hat.

+0

mit DateSerial erhalten haben, Der letzte Tag eines Monats ist der 0. Tag des nächsten Monats. Um beispielsweise den letzten Tag des Februars zu erhalten, können Sie 'DateSerial (2017,3,0)' verwenden. Um den letzten Tag des aktuellen Monats zu erhalten, können Sie 'DateSerial (Jahr (jetzt), Monat (jetzt) ​​+1,0)' verwenden. –

0

Sie können versuchen, den WorksheetFunction.EoMonth zu verwenden, um den letzten Tag des aktuellen Monats (oder eines anderen Datums) zu erhalten.

Versuchen Sie auch, sich von ActiveSheet fernzuhalten und verwenden Sie stattdessen vollständig qualifizierte Objekte.

Hinweis: mit meinen Tests habe ich festgestellt, dass, wenn ich Criteria2:="<=" & Cdbl(toDate) benutze es funktioniert. Wenn ich es ohne das Casting von Cdbl versuchte, tat es das nicht (wegen des Datumsformats meiner Zellen), in Ihrem Fall brauchen Sie es vielleicht nicht.

Codebeispiel

Option Explicit 

Sub FilterNextTwoMonths() 

Dim toDate As Date 

' get the last date of the current month 
toDate = WorksheetFunction.EoMonth(Date, 0) 

With Worksheets("Sheet1") '<-- replace "Sheet1" with your sheet's name 
    .Range("$A$:$AA" & LastRow2).AutoFilter Field:=18, Criteria1:=">=01/01/2006", Operator:=xlAnd, Criteria2:="<=" & CDbl(toDate)  
End With 

End Sub 
Verwandte Themen