• ベストアンサー

Excelの商品リストに使用期限を入れて、1年、6ヶ月を切った商品がわかるようにしたい。

エクセルで商品管理表を作ります。表は、商品名、規格、使用期限、問屋くらいの簡単なリストなのですが、使用期限データから、検索日(たとえば今日)に1年、もしくは6ヶ月を切ってしまった商品がわかるようにする方法があったら教えてください。 基本的なエクセルは使用しますが、関数を使いこなすほど詳しくありません。よろしくお願いします。

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

  • ベストアンサー
回答No.6

あのさあ =IF(DATEDIF(TODAY(),F5,"M")<12,IF(MONTH(F5)-MONTH(TODAY())<12,"使用期限1年未満!",""),"") がうまくいくんなら、F5は日付形式ジャン。 おいおい。こまるなあ。 日付形式に変換するくだりは、全部無駄ジャン。 ああ、まいったなあ。

pimama
質問者

お礼

本当にすみません。せっかく教えていただいたのに、理解できなかったのです。

その他の回答 (5)

回答No.5

hakkiriitteです。 今からしばらくgooから離れるので、ANo.3のセルの位置をいじったものをアップしておきます。 F4から下にyyyy/m形式の文字列で使用期限が入っている L3に検索日入っているとして、 検索日の月の1日→M3 検索日の6ヵ月後の1日→N3 検索日の1年後の1日→O3 L4から下にF列を変換した日付形式のデータ J4から下に「1年以下」「6ヶ月以下」と表示させる というように変更します。 M3 =INT($L$3-DAY($L$3)+1) N3 =$M$3+190-DAY($M$3+189) O3 =$M$3+370-DAY($M$3+369) この3つを解説しておきます。 M3のINT()関数は小数点以下を切り捨てる関数です。日付をあらわすシリアル値は、整数部で日付、小数部で時刻を表すので、NOW()関数なので取得した日付には小数がつきます。大小判定には邪魔なので、切っておきます。 DAY()関数はシリアル値から「日」だけ抜き出します。9月29日だったら29を返します。9月29日から29を引くと8月31日になります。それに1足せば、9月1日になります。与えられた月の1日のシリアル値を返す常套手段の一つです。 この応用で、与えられた日付シリアル値に例えば6ヶ月ちょっとの日数を加えて「日」を引いて1を足せば、6ヶ月後の1日になります。 N3の190と189、O3の370と369はそれぞれ6ヶ月ちょっと、1年ちょっとの日数です。ちょっとを加えるのは、大小の月やうるう年に備えるためです。 これらのセルの表示形式を日付にして、ちゃんと「1日(ついたち)」の日付になっているか確認してください。 L4~下に =IF(ISBLANK(F4),"",DATEVALUE(F4&"/1")) J4~下に =IF(L4="","",IF(L4<=$N$3,"6ヶ月以下",IF(L4<=$O$3,"1年以下",""))) これも解説が必要ですね。 まず、IF()関数。書式は、IF(条件,式1,式2)。条件が真のとき式1の値を返し、偽のとき式2の値を返します。 ISBLANK()関数は、セルがブランクのとき真を返し、ブランクではないとき偽を返します。 したがって、L4~の式は、F4がブランクのときは「""」つまり空白が入り、何も表示されなくなります。 DATEVALUE()関数は、文字列を日付シリアル値に変換する関数です。F4に入っているのは、"2006/12"という月までの文字列ですから、これに"/1"をつけて、"2006/12/1"という文字列にしてDATEVALUE関数に渡せば、2006年12月1日のシリアル値が得られます。 J4~は、IF()が入れ子になっていて、L4の値がN4以下ならば「6ヶ月以下」、O4以下ならば「1年以下」と表示されるようになります。"1年以下"の次のパラメータの""をたとえば、"期限切れ"などとすれば、1年を超えた場合「期限切れ」と表示されます。 こんなところでご検討ください。

pimama
質問者

お礼

とっても詳しい説明を本当にありがとうございました。しかしながら、関数がちっともわかっていない私には、それでもむずかしすぎて・・・よけいなデータを全部取っ払って、期限データと、指定された場所(たぶん)に式をコピーしてみましたが、VALUEが出るばかり。そこで、「期限切れ」という言葉をヒントにgooのほかの質問を検索してみました。そこで、みつけました。 =IF(DATEDIF(TODAY(),F5,"M")<12,IF(MONTH(F5)-MONTH(TODAY())<12,"使用期限1年未満!",""),"") これは、2ヶ月後が期限切れというものでしたが、3を12にしたら、うまくいったようです。 もっともこれも、関数の意味は、わかっておりませんが、とりあえずできそうです。使用期限1年未満を○にでも変更すれば、素人向けには充分です。 親切なご回答ほんとうにありがとうございました。 今回教えていただいた関数については、別途勉強してみることにしました。今後役に立ちそうですから。

回答No.4

ANo.1です。三回目。 どこがだめなのでしょうか。 ついたちの日付は出ますか? こっからあとは、明日にしますが。

回答No.3

ANo.1です。 えーと、F列の日付は、日付形式じゃダメですか? だとすると、わかりやすくするために、セルをバンバン使ってやってみます。 ANo.2さんの表現方法をお借りして、G列に「1年以下」、「6ヶ月以下」と表示するようにしましょう。 H列に日付形式に変換したデータを入れてみましょう。 H4セルに、 =DATEVALUE(F4&"/1") と入れます。 このままだと、もし、F4セルがブランクだとエラーになりますから、 =IF(ISBLANK(F4),"",DATEVALUE(A1&"/1")) としておきましょう。 このセルを下にずずーっとコピーしておきます。 多分、H列には数字しか表示されませんが、これは日付を表すシリアル値です。表示形式を日付にすれば、ちゃんと日付になります。 次に、L3に入っている今日の日付を都合のいいように変換します。 L4セルに、 =INT($L$3-DAY($L$3)+1) と入れておきます。 これで、今月の1日のシリアル値が入ります。 L5セルに、 =$L$4+190-DAY($L$4+189) L6セルに、 =$L$4+370-DAY($L$4+369) とそれぞれ入れます。 半年後、1年後の1日のシリアル値が入ります。 それで、最後に、G列に =IF(H4="","",IF(H4<=$L$5,"6ヶ月以下",IF(H4<=$L$6,"1年以下",""))) と入れて、下にずずーっとコピーします。 これでどうでしょう。

pimama
質問者

補足

おそくまでおありがとうございます。リストに計算式をコピーして見ましたが、ダメみたいです。 元リストの並びを書いてみます。 A    B      C   D       50音  チェック欄  商品名 規格 使用期限 見出し                      E       F    G   H   I   2006/12(例) 卸 メーカー 単価  価格単位 これは、当然横につながっています。 夜中になりますので、今夜じゃなくて大丈夫です。この週末に何とかわかればと思います。よろしくお願いします。

  • rin01
  • ベストアンサー率43% (33/76)
回答No.2

こんばんは~♪ こんな表の場合ですが。。。    A    B     C     D   E 1 商品名 規格  使用期限  問屋  期限 2 AA   ***   2007/12/1 *** 3 BB   ***   2007/6/10 ***   1年以下 4 CC   ***   2007/3/28 ***   6ヶ月以下 これで良いのでしょうか? カン違いならゴメンナサイ!!。。。 E2: =IF(C2<=DATE(YEAR(TODAY()),MONTH(TODAY()) +6,DAY(TODAY())),"6ヶ月以下",IF(C2<=DATE(YEAR (TODAY())+1,MONTH(TODAY()),DAY(TODAY())),"1年以 下","")) 下にコピーしてください。。。 ....Rinでした~♪♪

pimama
質問者

補足

さっそく考えていただいてありがとうございます。 No.1のかたとNo.2のかたの両方の計算式を入れて試してみました。こちらのリストが使用期限が亜入っているところがF列4行目から期限データがはいっていたので、C2というところをF4にかえてやってみましたが、両方の式とも、期限データが空欄だと6ヶ月とか○が表示されますが、期限データをいれると何も表示されません。どこかがおかしいと思われますが、わかりません。それから、期限データは、年と月までしかありません。2006/12という感じです。 よろしくおねがいします。 修正した計算式をコピーしておきます。 =IF(F4<=DATE(YEAR(TODAY()),MONTH(TODAY())+6,DAY(TODAY())),"6ヶ月以下",IF(F4<=DATE(YEAR(TODAY())+1,MONTH(TODAY()),DAY(TODAY())),"1年以下",""))

回答No.1

えーと、他のセルはとりあえず無視して、「使用期限」がC2から下にずらっと並んでいるとします。 E1セルに検索日を入れておきます。 そんで、E2から下に一年(12ヶ月)過ぎたら○が表示されるようにします。 E2のセルに =IF(EDATE(C2,12)<$E$1,"○","") と入力してください。 エラーが出たら、EDATE関数が使えない環境なので、 =IF(C2+365<$E$1,"○","") とすると、365日過ぎたら○が表示されます。 E1セルに、 =NOW() と入れると、常に検索日が「今日」になります。 詳しい関数の説明はヘルプを見てください。

pimama
質問者

補足

さっそく考えていただいてありがとうございます。 No.2にいっしょに書かせていただきました。 修正した数式をコピーしておきます。よろしくお願いします。 =IF(F4+365<$L$3,"○","")

関連するQ&A