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

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

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

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

Office 365

Office 365は、マイクロソフトが販売している企業向けクラウドベースのグループウエアサービス。電子メールや予定表、Webサイト構築、オンラインストレージ、ビデオ会議などビジネスで必要な機能を備えています。クラウドサービスのため、自社での専用サーバーの設置の必要がないことが特徴です。

Q&A

解決済

2回答

1136閲覧

VBA 日付の絞り込み

tttkkk

総合スコア38

VBA

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

Office 365

Office 365は、マイクロソフトが販売している企業向けクラウドベースのグループウエアサービス。電子メールや予定表、Webサイト構築、オンラインストレージ、ビデオ会議などビジネスで必要な機能を備えています。クラウドサービスのため、自社での専用サーバーの設置の必要がないことが特徴です。

0グッド

0クリップ

投稿2021/01/14 13:26

VBAを使って、日付で表を絞り込みたいのですが、上手くいかないため、質問させて頂きました。

画像のような表で、「いつから」「いつまで」の指定した日付の範囲で、その日付があるIDの人をを絞り込みたいです。
例えば、この画像ですと、2021/01/03~2021/01/10までのIDの人は a と f が該当するので、その人をマクロを実行した時に表示させたいという感じです。

一つの列の日付では絞り込むことができるのですが、複数の列にまたがって絞り込む方法がわかりませんでした。
以下に私のコードを載せさせて頂きます。

VBA

1Sub filterDate() 2 3Dim fromDate As Date, toDate As Date 4fromDate = Sheet5.Cells(7, 2).Value 5toDate = Sheet5.Cells(8, 2).Value 6 7Sheet5.Cells(11, 1).AutoFilter 2, ">=" & fromDate, xlAnd, "<=" & toDate 8 9End Sub

上記のようなコードでは当然ですが、2列目でしか絞り込むとができず、 a も f も表示されない実行結果となってしまいます。

安直に考えて

VBA

1Sheet5.Cells(11, 1).AutoFilter 2 Or 3 Or 4 Or 5 Or 6 Or 7, ">=" & fromDate, xlAnd, "<=" & toDate

のように、fieldの引数をOrで繋げてみてもはやりダメでした。

複数の列から日付の範囲に入っている全ての人を絞り込むVBAはどのように書けば宜しいでしょうか。
イメージ説明

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

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

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

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

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

radames1000

2021/01/15 00:24

最終的にはどんな表にしたいのですか?
tttkkk

2021/01/16 06:28

最終的と言うと、私が的を射た回答をできているか分かりませんが、 日付で絞り込みをかけれるようなマクロを組みたいというのが私の最終的な部分です。 表はほとんどこれに近いものを作ろうと思っております。 ですので、この表で範囲内の日付の人を絞り込むことができれば、最終的な表には簡単に応用が効くかと思っております。
guest

回答2

0

ベストアンサー

AutoFilter に配列を組み合わせて複数条件に合致するものを抽出するようにしてみました。

IdAddress 、StartColumn 、EndColumn は実際のファイルに合わせて変えてください。
ここでは、StartColumn は最初の日付列(「日付①」)の列番号、
EndColumn は最後の日付列(「日付⑥」)の列番号としています。

VBA

1Sub filterDate() 2 3 Set Sheet5 = ActiveWorkbook.Worksheets("Sheet5") 4 5 Dim fromDate As Date, toDate As Date 6 fromDate = Sheet5.Cells(7, 2).Value 7 toDate = Sheet5.Cells(8, 2).Value 8 9 '指定した日付範囲の条件に合致するIDを格納する配列 10 ReDim FilterArray(0) As String 11 12 '「id」の見出しがあるセル番号 13 IdAddress = "A11" 14 '日付の開始列 15 StartColumn = 2 16 '日付の終了列 17 EndColumn = 7 18 19 Range(Range(IdAddress).Offset(1, 0), Cells(Rows.Count, 1).End(xlUp)).Select 20 21 For Each ID In Selection: 22 For col = StartColumn To EndColumn: 23 TargetDate = Cells(ID.Row, col).Value 24 'そのIDが日付を含んでいる場合は、配列に格納する。 25 If TargetDate >= fromDate And TargetDate <= toDate Then 26 n = UBound(FilterArray) + 1 27 ReDim Preserve FilterArray(n) 28 FilterArray(n) = Cells(ID.Row, 1).Value 29 Exit For 30 End If 31 Next 32 Next 33 34 ' 条件に合致するIDをフィルター 35 Sheet5.Cells(11, 1).AutoFilter 1, FilterArray, xlFilterValues 36 37End Sub

投稿2021/01/14 14:40

編集2021/01/14 14:42
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

tttkkk

2021/01/17 02:03

ありがとうございます。 このコードをそのままコピペしましたら私の意図している通りにフィルターをかけることが出来ました。 ただ私のスキルがまだ足りなく、どのメソッドがどの動きを示すのか分からない部分が多々あるので、それをまず勉強していきたいと思います!
guest

0

H11セルに"範囲判定"等の列名を指定し、
H12セルに

=OR((AND(D12>=fromDate,D12>=<=toDate),(AND(E12>=fromDate,E12>=<=toDate),(AND(F12>=fromDate,F12>=<=toDate))

を設定し、H列がtrueの行を絞り込めば、思惑の絞り込みができるでしょう。

投稿2021/01/14 14:12

seastar3

総合スコア2285

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問