質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.45%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

2回答

729閲覧

ExcelVBAのオートフィルター機能で「●●日/●●月/2021」以降の日付に絞るコードを書きたいです

sa_world

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/10/06 23:11

前提・実現したいこと

ExcelVBAのオートフィルター機能で「●●日/●●月/2021」以降の日付に絞るコードを書きたいのですが、
自分が作成したコードでは絞ることができません。どなたか教えていただけないでしょうか?

Sub bo_report_t()
Dim yr, ye As String
Dim n As Integer

※途中のコードは省略しております。

Sheets("〇〇ツール").Select

ye = Cells(1, 28) →こちらのセルに「20/09/2021」のように日付を記載しております。

Sheets("〇〇レポート").Select

ActiveSheet.Range("$A$1:$BI$2251").AutoFilter Field:=41, Criteria1:=">=" & ye, Operator:=xlAnd

※途中のコードは省略しております。

End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hex309

2021/10/06 23:55

Operator:=xlAndがありますが、他にも抽出条件があるように見えます。 すべてのコードを提示できないのは仕方ありませんが、前提条件はきちんと提示いただきたいと思います。
sa_world

2021/10/07 10:05

ご返信ありがとうございます。他の抽出条件も確認してみます。
guest

回答2

0

ExcelVBA

1Sub Macro2() 2 Dim dtmFrom As Double, dtmTo As Double 3 4 With Worksheets("Sheet1") 5 dtmFrom = .Cells(1, 27).Value2 6 dtmTo = .Cells(1, 28).Value2 7 End With 8 9 Worksheets("Sheet2").Range("A1").CurrentRegion.AutoFilter _ 10 Field:=2, _ 11 Criteria1:=">=" & dtmFrom, _ 12 Operator:=xlAnd, _ 13 Criteria2:="<=" & dtmTo 14End Sub

こんな感じ。
エクセルの検索する値は文字列(画面に表示されている文字列)で検索されるので、
書式を合わせるか、Value2プロパティでシリアル値を取得し、
以降と以前を指定して抽出します。
つまり、Range("A1")とかと言っても、
表示されている値かセルの中身の値か、
何を示すのかよくわからないです。
エクセル君は忖度して何かを返してくれますが、
プロパティを指定することを省略しては、
意図しない動作がでるようなコードになるかもしれませんのでご注意を。

気になるとこいろいろあるけど、人のコードをたくさん見て勉強してみてください。
分からないところは、いちいちこまごま聞いて解消してください。

投稿2021/10/07 02:19

mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sa_world

2021/10/07 10:10 編集

ご連絡ありがとうございます。 以下のように修正してみましたがデッバクになりました。 Sub bo_report_t() Dim dtmFrom As Double, dtmTo As Double Dim n As Integer Worksheets("〇〇レポート").Activate '// オートフィルタが設定されている場合 If (ActiveSheet.AutoFilterMode = True) Then ActiveSheet.ShowAllData ActiveSheet.Range("A1").AutoFilter Field:=16, Criteria1:="N*" '// オートフィルタが解除されている場合 Else ActiveSheet.Range("A1").AutoFilter Field:=16, Criteria1:="N*" End If With Worksheets("検索ツール") dtmFrom = .Cells(1, 20).Value2 ★ここでデバックになります。 dtmTo = .Cells(1, 28).Value2 End With Sheets("〇〇レポート").Select Worksheets("〇〇レポート").Range("A1").CurrentRegion.AutoFilter _ Field:=2, _ Criteria1:=">=" & dtmFrom, _ Operator:=xlAnd, _ Criteria2:="<=" & dtmTo End Sub
mattuwan

2021/10/08 08:10

エラーメッセージをお教えください。
guest

0

日付の絞り込みは意外と面倒です。
以下を参考にしてください。

https://officedic.com/excel-vba-autofilter-date/

投稿2021/10/06 23:57

hex309

総合スコア761

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.45%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問