[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『日付からの抽出』(ももんが)
お世話になっております。 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)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.