• ベストアンサー

関数IFで、指定日付範囲のデータの取得

はじめまして。 過去ログで、近いのはあったのですが、 あと一歩でしたのでよろしくお願いいたします。   A   B     C 1 金額 日にち   結果 2 200  2004/4/20 3 100  2004/3/21  4 440  2004/8/8 5 250  2004/9/25 6 300  2004/10/15 7 150  2004/11/12 C列に、B2が2004/4/1~2004/9/30の範囲内なら、 A2をそのまま参照したいだけです。 つまり、=IF(2004/4/1<=B2>=2004/9/30,A2,"") じゃ、駄目なんですか?

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

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

質問に書かれている式の誤りは 1)ケアレスミスと思いますが、不等号の向き(「B2>=2004/9/30」ではなく「B2<=2004/9/30」) 2)数式中で「2004/9/30」というような書式は使えない(「2000÷9÷30」になってしまいます。DATE関数を使ってシリアル値に変換してやる必要があります→DATE(2004,9,30)) 3)「2004/4/1<=B2<=2004/9/30」というように、一度に2つの不等式を記述することはできません。この場合AND関数を使って「2004/4/1以降」かつ「2004/9/30まで」というふうに2つに分けます→AND(DATE(2004,4,1)<=B2,B2<=DATE(2004,9,30))) (関数についてはExcelのヘルプも参考にして下さい) 以上をまとめて =IF(AND(DATE(2004,4,1)<=B2,B2<=DATE(2004,9,30)),A2,"") とすれば、お求めの結果が出ると思います。

noname#37281
質問者

お礼

早速ありがとうございました。 大変わかりやすかったです。 参考にさせていただきました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.4

こんにちは。maruru01です。 こんな方法も。 B2に、 =IF(OR(TEXT(B2,"yyyymm")="20040"&{4,5,6,7,8,9}),A2,"") もし日付データが、今年(2004年)しかないなら、 =IF(OR(MONTH(B2)={4,5,6,7,8,9}),A2,"") だけでもいいです。

noname#37281
質問者

お礼

なるほど。機会には しかし今回のは2005年もありまして、残念ですが覚えておきます。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

この質問で2つのポイントがあります (1)条件が2つ(以上)ある場合の関数の書き方    本質問は日付に関してで、条件は(A)何日より先  (B)何日より後の2つです。    この場合は=AND(1つの条件,2つ目の条件) です。これを=IF()で聞く。    数学のように変数を挟んで200<A>300    の表現は、エクセル関数では駄目です。 (2)日付定数の関数式の中での表現のし方    時刻などは、””で括るとか、プログラム言語(例   VB)では##で括るとか有りますが、エクセル関   数の場合それらは駄目でした(何かやり方がありそ   うなのですが、浅学のため判らず)。    2004/4/1は駄目で、2004÷4÷1即ち501と解されて   しまいます。    どうも=DATE(2004,4,1)か=DATEVALUE("2004/4/1") と表現するしか無い様です。    日付2004/4/1は値としては38078という整数であっ   て、A>=38078でも良いのですが、38078を見つけ    る点や、表現上で良くなく使わないでしょう。 結果は#1のご回答か =IF(AND(C4>=DATEVALUE("2004/4/1"),C4<=DATEVALUE("2004/9/30")),A4,"") です。  

noname#37281
質問者

お礼

ありがとうございます。 そのようでした。 条件分岐はANDでとのことですね。 なんか基礎中の基礎で恥ずかしいことをしました・・・。

すると、全ての回答が全文表示されます。
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

横から失礼します。 既に、No.1 の s_yoshi_6 さんが回答されていますが、補足です。 文字列の日付式をシリアル値に変換するにはDATEVALUE関数でもOKです。 =IF(AND(DATEVALUE("2004/4/1")<=B2,B2<=DATEVALUE("2004/9/30")),A2,"")

noname#37281
質問者

お礼

ありがとうございます。 NO1さんで、ほぼ私の要望は満たされましたよ。 多少追加関数もありまして、 その際に直しながら使用しました。 KenKen_SPさんのも次回は是非使わせていただきますね。

すると、全ての回答が全文表示されます。

関連するQ&A