• ベストアンサー

例えば、8月1日~8月31日の“~”中にある日(8月15日など)を抽出したいです!

エクセル2003を使っています。 一つのセルに、『8月1日~8月31日』などと入力しています。 オートフィルターを設定しておいて、オプションの中で、例えば“8月15日/を含む”にした場合に、 先程の『8月1日~8月31日』の行が表示されるようにしたいです。 オートフィルターでできますか?オートフィルターでできないなら、どのようにすればできるでしょうか? どうぞよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • s_yoshi_6
  • ベストアンサー率73% (1113/1519)
回答No.5

#3です。 >切り出した後に、B2からC2間に含まれる日付を検索できるやり方はありますか? >もちろんオートフィルターは使えないと思いますが・・・。 前の回答に書いていますが(#2さんも書いていらっしゃいますが)、開始日と終了日の隣のセルに求める日付が含まれているかどうかを判別する式を立てて、その列でオートフィルタをかける方法ではいけませんか。 #3で書いたことをもう少し詳しく書くと、 1)ワークシート上(例えばD1)に基準となる日付の入力欄を作る。 2)D2に=IF(AND(B2<=D$1,C2>=D$1),"○","")と入力して、以下適当な範囲まで(例えばD30まで)コピー。 以上で、D1に入力した日付に応じて、それが開始日と終了日の間に含まれる場合に○印が入るようになります。あとは、 3)D1:D30を範囲選択して、データ→フィルタ→オートフィルタ。 とすると、もしD2:D30の範囲に○印があれば、ドロップダウンリストの中に「○」と出てきますので、それを選択すると○印がある列だけが抽出されると思います。 もしおっしゃっていることを取り違えているようでしたら申し訳ありません。

gogodharma
質問者

お礼

再度のご回答ありがとうございます! やっとIF関数判定の式が理解できました。 もっと単純な日付の羅列の時ならば使えそうですが、今回は少々難しそうです。 やはり私が思っているような感じの検索はできないんだなぁと思えてきました。 がっくりですが、それが分かっただけ良かったです。 本当にありがとうございました!

gogodharma
質問者

補足

#3&5様 教えていただいた数式をちょっと改良し、データについては○が出る精度が上がるように入れ替えました。 セルの内容もちょこちょこと入力し直したりしました。 そのお陰で、一発で欲しいデータが抽出される訳ではないのですがかなり形になりました! 四苦八苦しましたが、教えていただかなければ出来ませんでした!! 補足内容を書く欄ではありますが、お礼をお伝えしたくて書いています。 これからもよろしくお願いします。ありがとうございました。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

A列にある日付をスタートとエンドに分解する質問ではなく、期間はある1セルに8月1日~8月31日のようにあるとしても、A列は日付が入っているのでしょう。 そして指定期間に属する行だけを選択したいという問題でしょう。 この質問のあいまいなところは、いつも月初ー月末なのか、たまたま思いつたのがそういう例なのか。大幅に答えが変わる。月で決められるならMonth(a1)で月を捉えられる。 Sheet3のA1に2005/7/1 Sheet3のB1に2205/7/31 A3:B8に 2005/7/23 山田 1 2005/6/23 上田 2005/5/13 下田 2005/7/13 河合 2 2005/6/30 近藤 2005/7/1 南 3 とあるとする。 C3に=IF(AND(A3>=$A$1,A3<=$B$1),MAX($C$1:C2)+1,"") といれて下方向に複写する。 結果は上記C列のとおり。 Sheet4に行って A3に=OFFSET(Sheet3!$A$3,MATCH(ROW()-2,Sheet3!$C$3:$C$8,0)-1,0) 下方向に式を複写 B3に=OFFSET(Sheet3!$A$3,MATCH(ROW()-2,Sheet3!$C$3:$C$8,0)-1,1) と入れて下方向に式を複写。 結果 Sheet4noA3:B5に 2005/7/23 山田 2005/7/13 河合 2005/7/1 南

gogodharma
質問者

お礼

ご回答ありがとうございます。 あいまいな質問ですみません。 #4さんの言われるように、いつも月初-月末ではありません。 実は、セル内には (例:イベント日)5月11日*6月12日*6月27日*7月1日~7月9日*8月31日 などと入力されています。イベントが細かく分かれているために、日付ばかりがびっしり入力されているシートなのです。 この例でいうと、オートフィルターのオプションで5月11日を含むにすると、検索に引っかかってきますが、7月3日などは、~に含まれる日にちの為検索に引っかかってきません。 これをどうにか引っかかるようにする方法があれば・・・!と思い質問しました。 ○月○日~○月◎日の間の日にちを認識させるようなダイレクトな数式って無いんだなぁと分かってきました。 ありがとうございました。

  • s_yoshi_6
  • ベストアンサー率73% (1113/1519)
回答No.3

やり方としては#1さん、#2さんの方法でなさるとできると思いますので、ちょっと『8月1日~8月31日』を『8月1日』と『8月31日』に分ける方法について補足します。 A2に『8月1日~8月31日』、以下A列に期間が入力されているとして、 B2を『=DATEVALUE(LEFT(A2,FIND("~",A2,1)-1))』 C2を『=DATEVALUE(RIGHT(A2,LEN(A2)-FIND("~",A2,1)))』 として以下コピーとし、B列、C列の書式を「日付:○月×日」にしてやると、開始日と終了日が「○月×日」という日付形式で切り出せます。(ただしA列に「~」が必ず含まれているという前提ですので、もし含まれていないセルがあったら、別途処理が必要になります) あと(多分蛇足になると思いますが)、日の指定については、ワークシート上(例えばD1)に入力欄を作っておいて、D列に入力するIF関数の判定(例えば=IF(AND(B2<=D$1,C2>=D$1),"○","")など)に使うようにされた方が、数式に直接入力したりするより、指定日を変更する際の手間がかからないと思います。

gogodharma
質問者

お礼

ご回答ありがとうございます。 >A2に『8月1日~8月31日』、以下A列に期間が入力されているとして、 >B2を『=DATEVALUE(LEFT(A2,FIND("~",A2,1)-1))』 >C2を『=DATEVALUE(RIGHT(A2,LEN(A2)-FIND("~",A2,1)))』 と切り出した後に、B2からC2間に含まれる日付を検索できるやり方はありますか? もちろんオートフィルターは使えないと思いますが・・・。 どうぞよろしくお願いします。

  • syonep
  • ベストアンサー率26% (64/242)
回答No.2

オートフィルタでは、無理です。 実現する一つの方法として、 「○月○日~×月×日」というのを 「○月○日」「×月×日」と列をわけて、日付フィールドにしておき、上記でいう8月15日のような日付を入れるセルを表外につくり、「○月○日」「×月×日」の列の隣に、それぞれの値の間に8月15日が含まれるのかどうかを大小比較のif文でつくり、条件を満たすものだけ「1」とかを立てて、その値「1」でオートフィルタを掛ければ絞り込めます。 表計算を文書で説明するのは、難しいので、上記の文を参考に、やってみて下さい。

gogodharma
質問者

お礼

お礼が遅くなってすみません。 ご回答ありがとうございます。 ただ、検索する日は固定ではないので、〔8月15日だけ〕の日付を軸に大小比較するような数式では対応できそうにありません。 でも、数式を組み立てる時に色々な考え方があるなぁと分かりました。 何かの機会に試してみたいと思います。 ありがとうございました。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

ひとつのセルでは無理だと思いますよ。 開始日 終了日 8月1日 8月31日 なら 開始日 8月15日 以下 終了日 8月15日 以上 で検索できます。

gogodharma
質問者

お礼

ご回答ありがとうございます。 お礼が遅くなってすみません。 日付の数式を入力したり、その他何かの方法でできないかなぁと思ったのですが、 ひとつのセルでは無理なのですね~。 ありがとうございました。

関連するQ&A