2017-07-07 2 views
0

私は、日付で完全な列を持つ作業指示書を持っています。私はそれをフィルタリングして、過去の日付がすべて現在の月の終わりまで表示されるようにしようとしています(EX:過去の注文すべて - 2017年7月末)。当月までにフィルターをかけるためのVBAコード

私は現在のコードを使用していますが、何らかの理由で、2011年7月31日に返されません。これは、2011年7月30日までのすべての前回の日付を返します。誰かが助けてくれますか?

Sub Macro3() 
Dim dtStart As Date 
Dim dtFinal As Date 

dtStart = CDate(Evaluate("DATE(YEAR(NOW()),-1,1)")) 
dtFinal = CDate(Evaluate("EOMONTH(NOW(),0)")) 

ActiveSheet.Range("$A$1:$N$709").AutoFilter 13, ">=" & dtStart, xlAnd, "<=" & 
dtFinal, Operator:=xlFilterDynamic 
End Sub 

答えて

0

dtFinalは、2017年7月31日午前12:00です。最終日を8月1日に設定し、フィルタを"<="から"<"に変更します。

+0

これは働いていた:

は、代わりにあなたの全体のコードの下の行を試してみてください!私が持っているデータはDynamics AXセットからのものなので、午前12時ではなく午前7時に時刻をリストアップしていました(私は時間について心配する必要はありません)。私はちょうどそれを修正する必要がありました。ありがとうございました! – Emartin1863

0

WorksheetFunction.EoMonth関数とDateSerialを使用し、NowDateに置き換えることができます。これは時間を混乱させる必要がないためです。

ActiveSheet.Range("A1:N709").AutoFilter 13, ">=" & DateSerial(Year(Date), -1, 1), _ 
           xlAnd, "<=" & WorksheetFunction.EoMonth(Date, 0), _ 
           Operator:=xlFilterDynamic 
+0

私はこれを試しましたが、それでもまだ7/31をリストアップしていませんでした。 @davidmneedhamの解決策は私のために働いた。ありがとうございました。 – Emartin1863

+0

@ Emartin1863それはあなたのセルが時間値を持っているからです。もしあなたが "ddmmyyyy"のように日付だけを書式化すれば、それはあなたのために働くでしょう。 –

+0

WorksheetFunction.EoMonth(日付、0)は、午前12時に2017年7月31日まで評価されます。 Emartin1863の完了日のすべての値に時間が含まれていないと、あなたのソリューションは機能します。 – davidmneedham

関連する問題