[[20151120105316]] 『貸し出し品の在庫管理を関数で行いたいです。出荷』(こてつ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『貸し出し品の在庫管理を関数で行いたいです。出荷日の入力で“貸出中”の表示。返却日の入力で“在庫あり”としたい!』(こてつ)

良く似た質問があったのですが、応用できなかったので、質問させてください。

会社の製品をサンプルとして貸し出しをしており、その管理表を作成したいです。
具体的には以下の通りです。

sheet1(リスト)

   A    B    C    D     E      F     G 
1  品番 品名 出荷日 着日 返却予定日 実返却日 出荷先

2  123  ○○ 11/20   11/21    11/30           ○○

3

リストには、品番(A)から返却予定日(E)までを入力します。

sheet2(在庫表)

   A    B    C    D     E
1  品番 品名  在庫  出荷先 返却予定日

2  123  ○○  在庫なし ○○   11/30 

在庫表は貸し出しできるアイテム一覧を掲載しており、リストの出荷日に日付を入力すると、該当製品の欄の在庫のセル(C2)に“在庫なし”と表示されるよう作成したいです。
併せて、出荷先と返却予定日も転記されるようにしたいです。

貸し出し品なので、当然返却されるのですが、リストの実返却日(F2)に日付が入力されると、表示が“貸し出し中”から“在庫あり”に変更されるようにしたいです。

こんな要望は難しいでしょうか?

< 使用 Excel:Excel2010、使用 OS:WindowsVista >


 リストのほうは同じ品番のものが複数あり、一番下のものが最新のデータということだろうか?
(ねむねむ) 2015/11/20(金) 11:46

こんにちは

Sheet2の

C2に
=IF(ISERROR(MATCH(Sheet2!$A2,Sheet1!$A:$A,0)),"",IF(OFFSET(Sheet1!$A$1,MAX(IF(Sheet1!A$1:A$10000=$A2,ROW(A$1:A$10000),""))-1,5)="",IF(OFFSET(Sheet1!$A$1,MAX(IF(Sheet1!A$1:A$10000=$A2,ROW(A$1:A$10000),""))-1,2)="","","在庫無し"),"在庫あり"))
でCtrl+Shift+Enter

D2に
=IF(ISERROR(MATCH(Sheet2!$A2,Sheet1!$A:$A,0)),"",OFFSET(Sheet1!$A$1,MAX(IF(Sheet1!A$1:A$10000=$A2,ROW(A$1:A$10000),""))-1,6))
でCtrl+Shift+Enter

E2に
=IF(ISERROR(MATCH(Sheet2!$A2,Sheet1!$A:$A,0)),"",OFFSET(Sheet1!$A$1,MAX(IF(Sheet1!A$1:A$10000=$A2,ROW(A$1:A$10000),""))-1,4))
でCtrl+Shift+Enter

C2:E2を下方にフィルコピー

と思ったのですが、同じ品番のものが複数あって上から返却されたら次のデータが入力される
という規則が守られないとおかしくなっちゃいますね。

また、Sheet1のデータが行削除されると数式がダメになっちゃいます。

うまく行かない・・・

(ウッシ) 2015/11/20(金) 12:10


 上に書いた条件でよい場合。

 C2:=IF(IFERROR(INDEX(Sheet1!F:F,MATCH(1,INDEX(0/(Sheet1!A:A=A2),0),1)),0),"在庫なし","在庫有り")
 D2:=IF(C2="在庫なし",INDEX(Sheet1!B:B,MATCH(1,INDEX(0/(Sheet1!A:A=A2),0),1)),"")
 E2:=IF(C2="在庫なし",INDEX(Sheet1!E:E,MATCH(1,INDEX(0/(Sheet1!B:B=B2),0),1)),"")
 入力後C2セルからE2セルを下へフィルコピー。

(ねむねむ) 2015/11/20(金) 12:46


早速ご回答ありがとうございます。
リストの方は、貸し出し品が返却され、再度貸し出す場合がありますので、同じ品番が複数存在します。

そこで、ねむねむさんの書いてくださった上の関数をコピーしてみたのですが、C2に“在庫あり”と表示されるのですが、リストに出荷日を入れても変わらないんです・・・
出荷先、返却予定日の欄も空欄のままです。

上記の関数より変更した点は、Sheet1!からリスト!に変更したのみです。

本当に初心者のため、もう少々おつきあいください。
(こてつ) 2015/11/20(金) 13:25


 すまない、C2セルの式を下記にしてくれ。
 =IF(IFERROR(INDEX(Sheet1!F:F,MATCH(1,INDEX(0/(Sheet1!A:A=A2),0),1)),1),"在庫有り","在庫なし")

(ねむねむ) 2015/11/20(金) 13:34


 たぶん大丈夫だとは思うがE2セルの式を念のため
 =IF(C2="在庫なし",INDEX(Sheet1!E:E,MATCH(1,INDEX(0/(Sheet1!A:A=A2),0),1)),"")
 としておいてくれ。
(ねむねむ) 2015/11/20(金) 13:40

何度も申し訳ありません。
変更してみたのですが、変化なしでした・・・
なにか根本的に違っているのかな!?
(こてつ) 2015/11/20(金) 13:51

 重ね重ねすまないがD2セルの式は
 =IF(C2="在庫なし",INDEX(Sheet1!G:G,MATCH(1,INDEX(0/(Sheet1!A:A=A2),0),1)),"")
 としてくれ。

 >変更してみたのですが、変化なしでした・・・ 

 >リストに出荷日を入れても変わらないんです・・・ 
 もしかして品番は入力されているが出荷日は入力されていない、というデータがあるのだろうか?

 こちらでは貸し出しを行う際にリストに入力する(品番がある場合は貸し出しを行っている)という前提で式を作っているのだが。

 もし、上記の場合であればたとえば
    A   B    C   D     E      F     G  
 1  品番 品名  出荷日  着日  返却予定日   実返却日  出荷先 
 2  123  ○○   11/20   11/21    11/30           ○○ 
 3   123   ○○
 のようなこともあるのだろうか?
(ねむねむ) 2015/11/20(金) 14:02

何度もありがとうございます。
やはりうまくいかなかったので、もう一度作っている表を書いてみます!

Sheet1(リスト)
リストは、貸し出し依頼があるごとにどんどん下の方へ書き込みしてゆく形式です。

  貸出品コード  品名  出荷日  着日  返却予定日  実返却日  出荷先名称

貸出品コードを入力すると品名が出ますが、後は手入力です。

sheet2(在庫表)

在庫は決まったものですので、こちらの表に書き込みはしません。

  貸出品コード  品名  在庫有無  出荷先名称  返却予定日

こちらの在庫有りの分に対して、リストを入力します。リストの出荷日欄に日付を入れることで
“在庫あり”から“在庫なし”表示に自動的に変更したいことと、同じくリストに出荷先名称と
返却予定日を入力すると、こちらの在庫表にも表示させたいです。
最終的には貸出品が返却されますと、リストの実返却日に日付を入れますので、その段階で、在庫表の
在庫有無も“在庫あり”に変更したいです。

さて、関係あるかどうかわかりませんが、教えていただいた関数をコピペすると、値の更新というポップアップが出てきます。キャンセルボタンを押していますが・・・・

本当に度々申し訳ありません。

(こてつ) 2015/11/20(金) 14:23


あ、今気づきましたが、返却された際、実返却日に日付を入れると、在庫有無の表を“在庫あり”に表示することが出来ても、出荷した際の出荷先名称と返却予定日を空欄にするっていうのは難しいですよね。

併せて教えていただけたら幸いです。
(こてつ) 2015/11/20(金) 14:31


 式を

 C2:=IF(IFERROR(INDEX(Sheet1!F:F,MATCH(1,INDEX(0/(Sheet1!A:A&""=A2&""),0),1)),1),"在庫aあり","在庫なし")
 D2:=IF(C2="在庫なし",INDEX(Sheet1!G:G,MATCH(1,INDEX(0/(Sheet1!A:A&""=A2&""),0),1)),"")
 E2:=IF(C2="在庫なし",INDEX(Sheet1!E:E,MATCH(1,INDEX(0/(Sheet1!A:A&""=A2&""),0),1)),"")
 とするとどうだろうか?

 これで正しく値が出る場合はリストと在庫表での品番のデータの型が異なっているのが原因だと思うが。
 (片方が数値で片方が文字列の数字)

 >出荷した際の出荷先名称と返却予定日を空欄にする
 これは上記の式ですでに「在庫なし」の時だけ出荷先名称と返却予定日を表示するようになっている。
(ねむねむ) 2015/11/20(金) 14:40

何度もすみません。
取り急ぎやってみましたが、以前と変わらずです。

(片方が数値で片方が文字列の数字)
これは、リストは日付入力なので、日付にしており、在庫表の方は標準となっていましたが
一応日付に変えてみましたが同じでした・・・(涙)

本当にすみません
(こてつ) 2015/11/20(金) 14:56


 では、数式タブの計算方法-計算方法の設定を開いた時に自動にチェックが入っているだろうか?
 もし、ほかにチェックが入っていたら自動に入れてみてくれ。

 あと、型が違って問題になるのはそれで検索を行っている品番だけ。
 他の部分は表示が異なってくるくらいで式そのものには影響ない。
(ねむねむ) 2015/11/20(金) 15:06

遅くなりましたが、相変わらず成功しておりません(涙)

まだ見てらっしゃたら教えていただけないでしょうか?

C2:=IF(IFERROR(INDEX(Sheet1!F:F,MATCH(1,INDEX(0/(Sheet1!A:A&""=A2&""),0),1)),1),"在庫aあり","在庫なし")

 D2:=IF(C2="在庫なし",INDEX(Sheet1!G:G,MATCH(1,INDEX(0/(Sheet1!A:A&""=A2&""),0),1)),"")
 E2:=IF(C2="在庫なし",INDEX(Sheet1!E:E,MATCH(1,INDEX(0/(Sheet1!A:A&""=A2&""),0),1)),"")

上記の数式の中で、Sheet1!をリスト!に変更して貼り付けています。
リストと在庫表の中で共通なのは貸出品コードなのですが、そこがうまく結びついていないのかな?
と思うのですが・・・数式が読み取れないので、なんとも言えないです。

もうすこしおつきあいお願いできますか?
(こてつ) 2015/11/25(水) 11:02


 >そこがうまく結びついていないのかな?
 これの確認。

 C2セルに
 =SUMPRODUCT((リスト!A:A=A2)*1)
 と入力して下へフィルコピーしてみてくれ。
 もし、両方の貸出品コードが同じであればリストにある貸出品コードの個数が表示されるはずだ。

 もし、これが「0」になるようであれば前後にスペースがあったりなどでリストと在庫表で貸出品コードが異なっていると思われる。
(ねむねむ) 2015/11/25(水) 11:14

早速やってみました。
リストは今からの記入になるので、とりいそぎサンプルで入れてみましたが、すべて0表示でした・・・
在庫表の貸出品コードにスペースがあるようには思えないのですが、調べる方法があるのでしょうか?
(こてつ) 2015/11/25(水) 11:47

 それでは
 =SUMPRODUCT((リスト!A:A&""=A2&"")*1)
 ではどうだろうか?

 また、
 =SUMPRODUCT((TRIM(リスト!A:A)=TRIM(A2))*1)
 ではどうかも試してみてくれ。
(ねむねむ) 2015/11/25(水) 11:52

いずれも0表示でした・・・
(こてつ) 2015/11/25(水) 12:00

 =SUMPRODUCT((CLEAN(リスト!A:A)=A2&"")*1)
 ではどうだろうか?

 で、念のため
 =SUMPRODUCT((TRIM(CLEAN(リスト!A:A))=TRIM(A2))*1)
 でも。
(ねむねむ) 2015/11/25(水) 15:37

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.