プロが教えるわが家の防犯対策術!

お世話になります。
エクセルの関数でどうしてもわからないことがあり、質問させていただきます。
Aのセルに、とある年月日が記入されています。
この年月日について、特定の期間内であれば、特定の値を返すようにできたらと思います。
(期間と返す値については、下記の通りです)

<期間>           <返す値>
1943/4/1以前         空白
1943/4/2 ~ 1945/4/1  62
1945/4/2 ~ 1947/4/1  63
1947/4/2 ~ 1949/4/1  64
1949/4/2 以降        65

エクセルの知識があまりなく、本やネットなどで調べてみたのですが、なかなかうまくいきません。
詳しくていらっしゃる方にご助力いただければと思います。

どうかよろしくお願いいたします。

A 回答 (4件)

Excelでは1900/1/1以前の日付は日付として扱えないため、「1943/4/1以前」ではなく「1900/1/1~1943/4/1」を空白とすると言う事でよろしいですか?



開始年と対応した値の一覧をシート上に作り、Vlookup関数で値を表示します。
例として、D1:E5に以下の様に一覧が入っているとします。
1900/1/0
1943/4/2 62
1945/4/2 63
1947/4/2 64
1949/4/2 65

B1セルに =""&VLOOKUP(A1,D1:E5,2) と入力し、A1セルに適当な日付を入れて見てください。
「エクセル 特定の期間内の場合に、特定の値」の回答画像1
    • good
    • 1
この回答へのお礼

早速のご回答、ありがとうございます!
VLOOKUPを使うのですね。
浅い知識しか持ち合わせておらず、IF関数付近で必死に考えていて、全く思いつきませんでした。
エクセルは、関数の知識と発想力(論理力?)だなぁ、とつくづく思いました。
そして、1900/1/1以前の日付が日付として扱えないとのこと、勉強になりました。

おっしゃる式で、無事にデータが作成できました。
少し急ぎだったので、素人でも分かりやすく迅速に(そして画像まで!)ご回答下さったことに、感謝の気持ちでいっぱいです。

これからももっと勉強したいと思います。
本当にありがとうございました。

お礼日時:2011/11/03 00:42

エクセルでは、「日付のセルの値」は(日付シリアル値という)正整数なのだ。

1900年1月1日以来のその暇での日数(「順序数)なんだ。これを知らないから、日付で怖気ついたのではないか。
だから例えば、1から9、10から20、・・といった区間にコードを割り当てるのとおなじなんだ。
ーー
またこういう区間で値を割り当てるのは、VLOOKUP関数のTRUE型という、エクセルでは常識の関数がある。
それを使えば仕舞い。もう回答も有るので、書かないが、Googleででも「エクセル VLOOKUP関数 TRUE型」で照会すれば、こんなところへ質問しなくても、腐るほど記事が出てくるのだ。
エクセルの関数の問題などほとんどWEBに解説があるのだ。
ーー
もうひとつ>1943/4/1以前 と不用意に書いているが、エクセルでは,1900年1月1日の前日以前を扱うのは尋常では出来ないのだ。だから、1900/1/1(あるいはそれ以降日付)~1943/4/1とするとエクセルのことが判っているということになる。
ーー
今後エクセル関数を使うなら、都度質問にな無いように、エクセルの解説書(最低でも「エクセル関数50選」など)などを通読してからにすべきだ。
    • good
    • 1
この回答へのお礼

ご回答、ありがとうございます。
そして、この質問が、回答者様をご不快にさせてしまったようで、大変申し訳ありませんでした。
日ごろ使い慣れていない関数でしたので、咄嗟に思いつきませんでした。
回答者様はきっと、エクセルを熟知なさっているのですね。
うらやましい限りです。

基本的に私も、ネットや解説書を参考にして問題を解決するようにしていますが、今回はあたりのつけ方が悪くてどうしても解決策が見つからず、最終手段としてこちらで質問させていただきました。
日付で怖気づいて、皆さんに問題を丸投げしたわけではないのです。
素人には、あたりをつけることもなかなかに難しいことを、どうかご理解いただけますと幸いです。

今後も、私を含め、エクセルに不慣れな方が、勉強する気持ちで質問されることもあるかと思います。
その際は、あたたかい目で見守っていただけますと幸いです。

貴重なお時間を割いてのご意見、ありがとうございました。

お礼日時:2011/11/03 02:10

方法1)


添付図のように対応表を用意してVLOOKUPしてみるのが一番基本形です。
ただし,対応表の作り方に幾つかコツがあります。

E2のセルには必ずゼロを記入しておくこと
G2のセルには ’(Shift+7) を記入しておくこと

すると数式は
=VLOOKUP(A1,$E$2:$G$6,3)
とします。



方法2)
添付図のように一度日付を記入したあと,E列を選び,ツールバーのカンマボタンをクリックして桁区切り表示にします
すると開始日の日付の表示が
15,798
16,529
17,259
17,990
に変わります。この数字を使って計算します。対応表は使いません

=LOOKUP(A1,{0,15798,16529,17259,17990},{"",62,63,64,65})


方法3)
添付図のF列,「まで」の日付を記入したF2:F5を使います。
B列に
=SUMPRODUCT(FREQUENCY(A1,$F$2:$F$5)*{0;62;63;64;65})
と数式を入れた後,B列を列選択,右クリックしてセルの書式設定の表示形式のユーザー定義で
#
と設定しておきます。
「エクセル 特定の期間内の場合に、特定の値」の回答画像3
    • good
    • 0
この回答へのお礼

早速のご回答、ありがとうございます。

質問文の内容から、式を3パターンも考えつくことができるなんて、素晴らしいです。
(そしてとってもうらやましいです。)
VLOOKUP関数が一番簡単ですね。
関数の知識があまりないため、知っている関数でどうにかなるのではないかと、狭い視野で模索していました。
反省しています。
方法3については、初めて見る関数なので、ちょっと勉強してみますね。

たくさんの方法をご教授いただき、ありがとうございました!

お礼日時:2011/11/03 01:54

B2セルに


=IF(A2<="1943/4/1"*1,"",VLOOKUP(A2,$D$3:$G$6,4))
下へオートフィル(添付図参照)
=IF(A2<=15797,"",INDEX($G$3:$G$6,MATCH(A2,$D$3:$D$6)))
でもOK
「エクセル 特定の期間内の場合に、特定の値」の回答画像2
    • good
    • 0
この回答へのお礼

早速のご回答、ありがとうございます。

IF関数とVLOOKUP関数で、こんなに簡潔な式が完成するんですね!
まずVLOOKUP関数についての知識が不十分だったため、IF関数で長々とした式を・・。
しかし、どうしてもきちんとした数値が返ってこず、皆さんのお力をお借りした次第です。
添付図までつけていただき、とても分かりやすかったです。

表の作り方次第で関数も変わってくることも、勉強になりました。
丁寧にご教授いただき、ありがとうございました!

お礼日時:2011/11/03 01:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています