『日付からの抽出』(ももんが) お世話になっております。 Sheet1は1行目A列より「日付」「ID」「氏名」とタイトルがあります。2行目からデータを入力していくデータベースの形です。 Sheet1のデータをSheet2に抽出したいと思っております。抽出方法は、日付範囲指定、本日から3ヶ月前の範囲、本日から6ヶ月前の範囲ができればと思っているのですが、何か良い方法はあるでしょうか。マクロは少しだけ経験があります。 ネットで検索しましたが、日付の抽出は難しいというのがわかっただけで、うまく見つけることができませんでした。 どうぞよろしくお願いいたします。 < 使用 Excel:Excel2007、使用 OS:Windows7 > ---- フィルタの詳細設定で、日付を指定して抽出するのはどうですか?   (HANA) 2014/07/07(月) 11:36 ---- (HANA)様、ありがとうございました。先日、やっと2007になったばかりでこんな便利な機能があるとは思いませんでした。(2003の時はこんな感じではなかった気がします) もしお分かりになればですが、これをマクロですることは可能でしょうか?例えばA1とB1に日付を入れるとその範囲を抽出、3ヶ月ボタンを押すと本日から3ヶ月前の範囲を抽出できれば理想的と思っております。 上記の方法でも非常に助かっておりますので、お時間あれば教えていただけたらと思っております。 ずうずうしいお願いで大変申し訳ありません。 (ももんが) 2014/07/07(月) 15:10 ---- 2003の時は「フィルタオプションの設定」って名前でした。 マクロにするのは、基本的にはマクロの記録で出来ます。 >A1とB1に日付を入れるとその範囲を抽出 >3ヶ月ボタンを押すと本日から3ヶ月前の範囲を抽出 これは、ボタンを二つ作る と言う事で良いですか? また、結果はどこに表示しますか? 合わせて、手作業でやった操作をマクロの記録にとって 出来たコードをこちらにのせてもらえますか?   (HANA) 2014/07/07(月) 16:05 ---- (HANA)様、お返事ありがとうございます。マクロで記録をした結果を以下に掲載します。 結果はSheet2に抽出をしたいと思っております。ボタンは2つの予定です。 3ヶ月前の範囲を指定。 Sub Macro5() ' ' Macro5 Macro ' ActiveSheet.Range("$A$1:$C$157").AutoFilter Field:=1, Criteria1:= _ "<2014/7/7", Operator:=xlAnd, Criteria2:=">=2014/4/7" Range("A8:C98").Select Selection.Copy Sheets("Sheet2").Select Range("A2").Select ActiveSheet.Paste End Sub 日付の範囲指定 Sub Macro6() ' ' Macro6 Macro ' ActiveSheet.Range("$A$1:$C$157").AutoFilter Field:=1, Criteria1:= _ ">=2014/4/1", Operator:=xlAnd, Criteria2:="<=2014/7/31" Range("A2:C157").Select Selection.Copy Sheets("Sheet2").Select ActiveSheet.Paste ActiveWindow.SmallScroll Down:=-18 End Sub よろしくお願いいたします。お忙しいのにありがとうございます。 (ももんが) 2014/07/07(月) 18:31 ---- オートフィルタではなく、フィルタの詳細設定です。  ・結果は別シートに表示  ・日付の範囲を指定したい と言う事であれば、フィルタの詳細設定を使ってもらう方が良いと思います。 そちらも確認してみて下さい。   別シートに結果を表示する場合は、結果を表示したいシートがアクティブな状態から   設定を開始して下さい。 まずは、載せてもらったコードで話を進めますが 日付の部分とか コピーする範囲が そのつど変わってきますよね。 オートフィルタの範囲〜Range("$A$1:$C$157")〜 や コピーする範囲〜Range("A2:C157")〜 は、大雑把ですが A:C列全体 Range("A:C") と言う事にします。 日付は、Date関数で 今日の日付が取得できます。   ワークシート関数の =TODAY() みたいな感じです。 それを使って「"<2014/7/7"」と言う文字を作ります。 ワークシート上で ="<"&TODAY() と式を入れると "<2014/7/7" になってくれそうですが 実際は、"<41827" になってしまいます。 VBAでも同じなので、Format関数で日付を yyyy/m/d の形に直したものと "<" をくっつけます。   ワークシート関数の TEXT関数の様に使用します。 "<" & Format(Date, "yyyy/m/d") ~~~~~~~~~~~~~~~~~~~~~~~~この部分が "2014/7/7"になる。 3か月前は、一月30日とみなして 90日前にします。   もっと厳密に3ヶ月前の指定が必要なら 変更が必要です。 90日前の日付は Date - 90 で求められますので   ワークシート上でも =TODAY()-90 で、90日前の日付が求まりますよね。 やはりこちらも Format関数で日付に直した後 ">=" とくっつけます。 抽出が済んだら、A:C列をコピーして Sheet2のA1セルからはりつけます。 後は、オートフィルタの設定を解除して終了します。 '------ Sub 三か月前() ActiveSheet.Range("A:C").AutoFilter Field:=1, _ Criteria1:="<" & Format(Date, "yyyy/m/d"), Operator:=xlAnd, _ Criteria2:=">=" & Format(Date - 90, "yyyy/m/d") Range("A:C").Copy Sheets("Sheet2").Range("A1") ActiveSheet.AutoFilterMode = False End Sub '------ Sheet2(抽出結果を貼り付けたシート)をアクティブにして終わるのが 親切だと思いますが、オートフィルタの方に関してはこの程度で フィルタの詳細設定の方に重きを置きたいと思います。   (HANA) 2014/07/08(火) 09:23 ---- (HANA)様、丁寧な説明までありがとうございます。詳細設定でのマクロの記録を下記に記載します。 Sub Macro1() ' ' Macro1 Macro ' Sheets("Sheet1").Columns("A:C").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("Sheet1!Criteria"), CopyToRange:=Range("A1"), Unique _ :=False ActiveWindow.SmallScroll Down:=-12 End Sub 検索条件はsheet1のE1、F1がタイトルでE2に>=2014/4/1、F2に<=2014/7/31を入力してsheet2をアクティブにした 状態で実行しました。よろしくお願いいたします。 (ももんが) 2014/07/08(火) 11:53 ---- 記録でできたコードは、E2,F2に条件(日付)を入力して 実行すれば、抽出されますよね。 たとえば、三か月ボタンが押されたら  E2に ">=" & 3か月前の日付 F2に "<=" & 今日の日付  を入力後、Macro1を実行 という流れになれば良いと思います。 '------ Sub フィルタの詳細設定で三か月前() Range("E2").Value = ">=" & Format(Date - 90, "yyyy/m/d") Range("F2").Value = "<=" & Format(Date, "yyyy/m/d") Call Macro1 End Sub '------ Macro1の最後の行「ActiveWindow.SmallScroll Down:=-12」は 不要であれば削除してもらうと良いと思います。   (HANA) 2014/07/09(水) 12:52 ---- (HANA)様、ありがとうございました。 思い通りのものができました。大変助かりました。 (ももんが) 2014/07/09(水) 16:40 ---- 出来ましたか、よかったです。 日付範囲の方も大丈夫ですか? あとは、 日付範囲の片方だけ入力がある状態で実行した時 ・開始日にSheet1の最小値を入れる ・終了日に今日の日付を入れる とか、 何件あるかメッセージを表示する とか出来たら良いかもしれません。 (HANA)