• ベストアンサー

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

  • エクセル2010 商品リストを参照したい

    注文書作成時、商品リストを参照して入力を簡略化したいです。 注文書の商品名を入れると、それに連動して 商品リストの商品コード、得意先コードも表示されるようにしたいです。 商品名は入力規則のドロップダウンリストで入力するようにして 入力された文字列を検索値にVLOOKUPを使う?と考えましたが 商品名は文字列のせいか、うまく検索されません。 よい考え方や、関数はありますでしょうか。 宜しくお願い致します。

  • EXCEL リスト連動 リスト自動拡張

    商品の在庫をエクセルで入力します。 商品名(人参、りんご、さんま、片栗粉等)を入力する際に、 INDIRECT関数と入力規則を利用して、 種別(野菜、フルーツ、海鮮類、粉類等)を絞り、 それぞれの商品名をリストから選択し入力できるようにしたい。 新商品を入荷したりするので、元の商品名のデータを追加したり削除したりする時に、自動的に元の商品データのリスト範囲を拡張するようにしたい。 今、ドラッグして範囲指定してリスト範囲を指定しています。 OFFSET関数とCOUNTA関数を使用して、自動的にリストが拡張できるようなのですが、何を入力したらいいのでしょうか?うまくできません。

  • 売れ残った商品をリストから抽出(エクセル2010)

    以下のような表があります。 商品リストから売上リストを引いて別表に売れ残った商品のリストを作りたいんですが、どのようにしたらいいんでしょうか? 抽出や関数などいろいろ試しているんですがわかりません。簡単にできる方法はないでしょうか?

  • エクセルで商品管理

    エクセルの商品管理で賞味期限を管理したいのですが今日のひずけを 入れると商品名のセルの背景色がその日付から賞味期限2カ月前をピンクの背景色、一か月前をオレンジの背景色、10日前を薄赤色、賞味期限切れを赤の背景色に色分けして出るようにしたいのですが可能ですか もしかのうだとしたらどんな関数を使いどのようにしたらよろしいでしょうか、又なにかいい方法でうまく賞味期限を管理する方法があれば教えていただきたいのですが

  • 商品名から商品検索ができるようにしたい

    EXCELを使って、商品検索できるように作ってみたのですが、VLOOKUP関数で作ってみたものの、同じ名前で規格のちがうものや、同じ商品名でもコードが違うものがあったりしてうまくいきません。 作りたいものは、商品名を入れたら、規格サイズ・入数・品質保持期限・商品コード・納価・売価・・・など登録しているデータ(一覧表を作成している)を参照できるようなものを作りたいのです。 ※検索する商品名は登録されているものと全く同じではない事も多いので、その検索にかける商品名の一部でも当てはまれば該当するものの一覧が全部でる、という風にできれば理想です。 EXCELで作れる範囲なのか、どうやればそこにたどりつけるのか、アドバイスでもいただければありがたいです。 文章が分かりづらいかもしれませんが、宜しくお願いいたします。

  • エクセルで、賞味期限を、製造年月日の「4か月半後」というように表示したいのです。

     エクセルで、表題のように、製造年月日の「○○か月半」後、のように表示したいのですが、わたしのようなエクセル初心者でもわかるようにできる方法はないですか?  仕事は商品管理をやっている者です。賞味期限の管理を製造年月日を入力すれば、自動的に○○か月後の、賞味期限が表示される表をつくりたいとおもいました。  いろいろ調べた結果、賞味期限管理には、edate関数がいいらしいというところまではわかりました。  ほとんどの表はそれで埋まったのですが、ところどころ、わたしの扱っている商品は、はんぱな賞味期限なものがあるのです。たとえば、製造年月日の、4か月半後、などです。  通常の賞味期限であれば、たとえば、一年後だと、 A   B 製造年月日  賞味期限 1 2009/12/5 =edate(A1,12) などでできますが、これをたとえば4か月「半」とかにはどうすればできるのでしょうか?=edate(A1,4.5)とかやってみてもできないようですし.........  edateは 「月」単位でしかやはりできないのでしょうか?  お手すきな方、お教えねがえませんか?お願いいたします。

  • エクセルでドロップダウンリストとオートフィルタ連動

    お世話になります。 当方、初めてエクセルのVBAを扱います。 エクセルのバージョンは2010を使用しています。 商品群が多く、コンボボックスもしくは入力規則のドロップダウンリストを 使用して規格と商品種類1-商品種類3を選択しオートフィルターを掛けて 必要な情報を抜き出したいと考えています。 No, 物質名 規格1・・・規格10 商品名1-1・・・商品名1-50 商品名2-1・・・商品2-50・・  1   鉄    1              1   2   鉛         1                 1 3   銅 4  アルミ   1              1 ・   ・ ・   ・ ・   ・ このような表が有ります。 物質名と規格または商品が一致する場所に「1」を掛けています。 また、シートは 入力シート⇒上記表が有る場所 作業シート⇒データ処理上必要な作業をする場所        ※コンボボックスの選択肢を作るうえで入力シートの横並びの状態では難しかったので         縦並びに該当データをリンクして並べました。 検索シート⇒検索結果を表示する場所 の3つを製作済みです。 現在、コンボボックスを使い、  コンボボックス1⇒商品種類(商品種類1~3を選択し、コンボボックス2に連動)  コンボボックス2⇒商品名  コンボボックス3⇒規格群  ここまで準備はできており、 VBAで  Sub 検索() Application.ScreenUpdating = False '入力シートのオートフィルター表示 Worksheets("入力シート").Range("$A$1:$FM$1").AutoFilter field:=1 '検索シート「商品名」及び「規格」の設定内容でオートフィルターソート '検索シートに検索結果をコピー Sheets("入力シート").Range("$A$1").CurrentRegion.Copy Sheets("検索シート").Range("$B$8") '入力シートのオートフィルター解除 Worksheets("入力シート").AutoFilterMode = False まで作成しましたが、商品群と規格群のコンボボックスとオートフィルタの連動がどうやっても解かりません。 どなたか、ご指導して頂けないでしょうか。 よろしくお願いいたします。 

  • エクセルで画像付き商品台帳を製作したいんですが?

    エクセルで仕事に使用してます商品台帳(簡単な関数を使い、別シートに商品データ一覧を作りそこからデータを抽出し、商品コードを入力すれば、JANコードや商品名、原価売価などのデータが表に一発で表示されるようにしてます)を何とか画像付きの物に替えたいのですがそのような事はエクセルでできるのでしょうか?理想は商品コードを入力すれば画像、JANコード、商品名などがすぐに表示されるようにしたいのですが。どなたか助けてはいただけないでしょうか?よろしくお願いいたします。

  • エクセルのドロップダウンリストについて質問です。

    エクセルのドロップダウンリストについて質問です。 作成したい表ですが・・・ (1)A1: リストから商品名を選択。 (2)B1: (1)で選択した商品名に対するサイズのリストが表示される。 (3)C1: 単価が自動的に表示。   商品名に&やスペースがある為、名前の定義が出来ず、サイズリストを連動させることができません。 表を完成する良い方法はないでしょうか? (商品名の&やスペースを_や・で代用しないで) 他の方の質問を探してみたのですが、検索方法が悪いためか見つからず。 同じ質問があったらすみませんが、よろしくお願いします!

  • エクセル2000 商品名のリストについて

    プログラムシートに商品名と単価の一覧があり、 別のシート(12月度)に商品名を入力すると単価が自動的に出るように VLOOKUP関数を使って作ったのですが、 いちいち商品名を入力するのは、面倒だし、ちょっとした文字の違いで反映されなかったりするので、リストから選ぶようにしたいのですが、 別のシート(プログラムシート)の商品名を別シートのリストにする事は可能でしょうか? よろしくご回答お願い致します。

専門家に質問してみよう