『別のシ−トへ抽出したいのです』(初心者)  はじめまして。  基本的な質問ですみません。   A B     C    D     E      F G  1 氏名 生年月日 01/01/99 01/05/99 03/05/99   ○  ×   2田中 05/09/74 03/05/99 02/08/99 0304/99 ×  × ・ ・ 上記のような表があり、これを元に別のシ−トへ抽出をしたのです。  条件としては、   C.D.Eそれぞれの日付が"今日"を過ぎているもの。(シ−トを開けた日) F.G それぞれが×のもの。   これをボタンにして、抽出できればと思います。   C期限切れ D期限切れ E期限切れ F×のもの G×のもの   ↑こんな感じです。  わかりづらいですが、ご回答お願いいたします! ---- >基本的な質問ですみません。 ボタンで処理したいと言うことは、マクロ(VBA)のご質問ですよね? 初心者さんのレベルによって回答方法が異なってくるのですが、 VBAはどのくらい理解されていますか? (INA) ---- >マクロはVBAから作った事はないです・・・・ メニュ−バ−から新しいマクロを登録する、でやった事はあります・・・ ---- 各日付は、日付形式で入力されていますか? それとも文字列ですか? もし日付形式ならオートフィルタを使うだけで良さそうですが・・ (INA)   ---- 平成15年1月1日など、文字列で入力しています。 特に日付の表示形式では設定していません・・・。 オ−トフィルタでやるとできるんですか????? ---- せっかく日付データなのに、書式設定の表示形式を文字列にしてあるのですか?  ' ←先頭にコレを付けてるとか? (INA) ---- なぜか見たらユ−ザ−定義で、[$-411]ge.m.d となっていす。。。。。。。 ---- [$-411]というのは、どのような設定なのでしょうか? >オ−トフィルタでやるとできるんですか????? 文字列でなく、日付として入力されているようなので、 まずは試してみては如何でしょうか? (INA) ---- >[$-411]というのは、どのような設定なのでしょうか? 「平成e年m月d日」で入力したときに自動的に [$-411]ge.m.dに設定されます。 つまり、文字列として入力しているつもりでも、シリアル値に変換されています。 [$-411]は「国と地域」の設定を表すものみたいですが、これも2002からは自動的に 追加されます。消しても日本語環境なら問題はないみたいですが、詳しくは下記。 http://office.microsoft.com/assistance/hfws.aspx?OfficeXP=true&AssetID=HA010346351041&CTT=6&Origin=EC010272491041 失礼しました。 (KAMIYA) ---- 上記の通り、「平成e年m月d日」と入力していますので自動でなったと思われます。  この場合でデ−タを抽出したいとき、どうすればいいですか???? ---- INAさんのお勧めになっているオートフィルタは試されましたか? (KAMIYA) ---- KAMIYAさん。情報ありがとうございます。 (INA)  いろいろすみませんっ。  オ−トフィルを使ってみたのですが、ファイルを開けた日より1ヶ月前のデ−タをシ−トに自動で抽出したりする方法がわかりません。  それをボタンなどでできたらいいのですが・・・・・・(@_@。 ---- 日付の指定方法はおいといて、フィルタを使うことにより お望みの結果を抽出することは可能なのでしょうか? フィルタ機能で問題がないようであれば、あとは日付の指定方法を工夫して、 マクロで自動化するだけです。 しかしオ−トフィルタを使っても、目的の結果を抽出できないようであれば、 オ−トフィルタ以外の方法で抽出しなければなりません。 オ−トフィルタを試して頂きたいと書いたのは、目的とする結果を得るための 手段を検討するために確認して頂きたかったのです。   ちなみに オ−トフィル と  オ−トフィルタ は別物です。 (INA) ---- はい。オ−トフィルタを使ってみましたが、     ●ファイルを開けた日から1ヶ月前までの日付だけ取り出す。     ●これをボタン化したい。 これをどうやって設定するのかがわかりません。。。。。 ---- どうやら私の言っていることが、通じていないようですね・・・(-_-;) >●これをボタン化したい。 これはどのように処理するかが決まった後の話です。 実行させる方法はどうにでもなりますので、いまは関係ないです。 >●ファイルを開けた日から1ヶ月前までの日付だけ取り出す。 たとえば、今日であれば、2004/1/19〜2004/2/19 として  オ−トフィルタで抽出できるデータなのか知りたいのです。 繰り返しになりますが、 >オ−トフィルタを使っても、目的の結果を抽出できないようであれば、 >オ−トフィルタ以外の方法で抽出しなければなりません。 >オ−トフィルタを試して頂きたいと書いたのは、目的とする結果を得るための >手段を検討するために確認して頂きたかったのです。 ということです。 それともオ−トフィルタの使い方自体が分からないのでしょうか? ところで、データは全部で何件(何行)くらいありますか? (INA) ---- オ−トフィルタは試しましたよ。 デ−タは100件ほどです。 デ−タの表示形式は上記に記載されているとおりです。 ただ、私の知っているオ−トフィルタの使い方ですと、開けた日以前のものを抽出できません。ただ入力されている日付の中から選択しなくてはいけなくなっています。 意味が通じなく、いらつかせてしまってすみません。。。。。 ---- オートフィルタを設定することで可能なこと -複数の条件でのデータ絞込み -数値データでは特定のデータ範囲での絞込み -特定文字列を含むものでの絞込み また、「フィルタオプションの設定」を利用することで -オートフィルタ機能を利用した絞込み後のデータを別範囲へデータ抜き出し このような機能があるので、ご希望の処理はたぶん可能です。 >●ファイルを開けた日から1ヶ月前までの日付だけ取り出す。 一応、オートフィルタでの手順を説明しておきます。 これはオートフィルタを設定し、日付の入力された列のプルダウンボタンを 押すとリスト中の日付のリストがプルダウンしますが、この中で「(オプション)」 という項目があるので、ここをクリックして日付期間を設定します。 「オートフィルタオプション」というダイアログが表示されるので、 「2004/2/19」「以下」 「AND」にチェック。 「2004/1/19」「より大きい」 として「OK」とします。 (KAMIYA) ---- ありがとうございます(^^♪ ちなみに、毎月何度かファイルを開けた日より1ヶ月前の日付だけ取り出したいとき、毎回「オートフィルタオプション」のダイアログで入力指定をしないとダメですか? 例えばTODAY関数などを使用して、開けた日を基準にボタンで抽出というのはできるでしょうか???? ---- その部分はオートフィルタではインスタントにはできません。 「手動でやる」方法を提示したまでです。 「ボタンで一発で」というのであればマクロプログラムを作ってボタンに登録。 ということになります。 どんなデータが入っているかわからないと、正確に動くマクロはつくれないので、 INAさんは苦慮しておられるわけです。 「ボタンで一発に」というのは「Cool!」ですが、そういう苦労があるわけです。 (KAMIYA) ---- どうやらオートフィルタで抽出できるようですね。 to KAMIYAさん ところでフィルタオプションでも出来ると思いますが、 標準の関数でセルに1ヶ月前の日付って取得できますでしょうか? フィルタオプションの検索条件なのですが、 =C2<=NOW() と =C2>=NOW()-30  くらいしか思いつかなくて・・ DateAdd関数がつかえれば簡単なのですが・・ (INA) ---- こちらにアドインでないものを掲載させていただきました。 [[20040219101310]] 前月日付は、A1に=TODAY()で、B1の数式は、この方式では、以下のようになります。 月末日付の調整を独自に試行していますので、ご用向にマッチするかは、判りません。 =IF(AND(MONTH(A1+1)=MONTH(A1), (YEAR(DATE(YEAR(A1),MONTH(A1)-1,DAY(A1)))-YEAR(A1))*12 +MONTH(DATE(YEAR(A1),MONTH(A1)-1,DAY(A1)))-MONTH(A1)=-1), DATE(YEAR(A1),MONTH(A1)-1,DAY(A1)), DATE(YEAR(A1),MONTH(A1),))        ↓ 2004/2/29 2004/1/31 2004/1/29 2004/2/28 2004/1/28 2004/1/28 2004/3/31 2004/2/29 2004/2/29 2004/3/30 2004/2/29 2004/2/29 2004/9/30 2004/8/31 2004/8/30 2004/9/29 2004/8/29 2004/8/29 2004/2/20 2004/1/20 2004/1/20             ↑            =EDATE(A1,-1) (LOOKUP) ---- やはりLOOKUPさんに先を越されてしまいましたか。(笑) 昨日からぼちぼち考えてはいたんですが、 「一ヶ月前」の具体的な処理方法のご希望がわからないので・・・ 単に30日前なら、TODAY()-30 OR、NOW()-30 でいいと思いますが 日付を前月の中にすべて収めるという形なら、(ジャンプする日付が出ますが) =IF(DAY(TODAY())=1,DATE(YEAR(TODAY()),MONTH(TODAY())-1,1),IF(OR(MONTH(TODAY()+1)=MONTH(DATE(YEAR(TODAY()),MONTH(TODAY())+1,1)),MONTH(TODAY())=MONTH(DATE(YEAR(TODAY()),MONTH(TODAY())-1,DAY(TODAY())))),DATE(YEAR(TODAY()),MONTH(TODAY()),0),DATE(YEAR(TODAY()),MONTH(TODAY())-1,DAY(TODAY())))) (結果は同じですが、やはりまとめきれてませんねぇ) フィルタオプションの検索条件はたとえば「日付」という項目から抽出する場合は AND条件は(当日から当日の30日前まで) 日付 日付 ="<"&TODAY() =">="&TODAY()-30 OR条件では(当日、もしくは当日の30日前の日) 日付 =TODAY() 日付 =TODAY()-30 のようにできると思います。 (KAMIYA) ---- お二人ともすごい数式ですね・・・(∋_∈;) ありがたくメモ帳にとっておきます。(__) これで、フィルタオプションと併せて使えば、一般機能だけでも ある程度は、初心者さんの希望に添ったことができますね。 でも「ボタンで」とのことなので、マクロを考えないといけませんね・・・ (INA) ---- プログラムの仕様について、ご質問があります。 1)抽出先となるシートは既に存在するのでしょうか? それともボタンを押したときに、自動で新規シートを追加するのでしょうか? また、シート名は決まっていますか?   2)抽出先となるセルはどこになりますか? ボタンを押すごとに対象シートの最終行に追加していくのでしょうか? それともシートをクリアしてから貼り付けですか? (INA) ---- オートフィルター → 抽出範囲の選択( ctrl + shift + * ) → コピー → 別シートに貼り付け を「マクロの自動記録」して、基本となるコードを自動作成したら、 以下のようなコードが自動作成されると思います。 Columns("A:G").Select Selection.AutoFilter Selection.AutoFilter Field:=3, _ Criteria1:=">=2004/1/20", Operator:=xlAnd, Criteria2:="<=2004/2/20" Range("A1").Select Selection.CurrentRegion.Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste  オートフィルタの検索のキーワードの指定部分は以下の行になりますので、 >Criteria1:=">=2004/1/20", Operator:=xlAnd, Criteria2:="<=2004/2/20" を Criteria1:=">=" & Format(DateAdd("m", -1, Date), "yyyy/m/d"), _ Operator:=xlAnd, _ Criteria2:="<=" & Format(Date, "yyyy/m/d") のように変更してみて下さい。 (INA)