[[20140707105659]] 『日付からの抽出』(ももんが) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『日付からの抽出』(ももんが)

 お世話になっております。
 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.