• 締切済み

ExcelのVlookup関数の応用について

ExcelのVlookup関数においての質問です。 画像のような場合において、 どのようにしたら”最終入庫”と”最終出庫”の値を 『導き出したい値』のように引っ張ってこれますでしょうか? (画像では手入力しています) 品目が複数のセルに存在し、入出庫ステータスがバラバラであり、 各入出庫の最新の日付を検索したい場合どのようにしたらよいか お知恵を拝借できますと幸いです。 宜しくお願い致します。

みんなの回答

  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.7

ピボットテーブルを作成して それぞれの品目の入出庫ごとの最大の 日付を集計すればいいと思います。

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.6

1式で、して しまいましょう B10に =MAX(INDEX($A$2:$A$6=$A$10)*($B$2:$B$6=SUBSTITUTE(B$9,"最終",""))*$C$2:$C$6,,)) とか =MAX(INDEX(($A$2:$A$6=$A$10)*NOT(ISERROR(FIND($B$2:$B$6,B$9)))*$C$2:$C$6,,)) とか =MAX(INDEX(($A$2:$A$6=$A$10)*(LEN(B$9)<>LEN(SUBSTITUTE(B$9,$B$2:$B$6,"")))*$C$2:$C$6,,)) とか 入力して 横に、フィル 頂ければ https://1drv.ms/x/s!AjviygfJDgV_1FjxHjQUuSrGxX6r

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.5

MAXIFSがぴったりだろう。 しかし、質問者はまさかエクセルバージョンが関係していると知らず、書いてない。 下記WEB記事にあるが、 現在(2016/4/11)この関数MAXIFSが使用できるのは以下の場合に限られています。このページではExcelOnlineの画像を使って説明しています ーー 例えば2016ならつかえるはず(2013以前はダメ) http://www.eurus.dti.ne.jp/~yoneyama/Excel/kansu/maxifs.htm Excel(エクセル)基本講座:MAXIFS関数(条件付きで最大値を求める) で求まるのでは。 =MAXIFS(最小範囲,条件範囲1,条件1,[条件範囲2,条件2],・・・) ーー 質問者は、エクセルの日付は、日付シリアル値の仕組みによって、最新日は最大の整数値なのだが知っているか。 ーー 「ExcelのVlookup関数においての」といっているが、VLOOKUP関数は該当は一つの探索に限られるのを知っているか。条件2項目や3項目は、不自然な工夫が必要で、むつかしいのだ。 ーー 2013までで行うなら、 複雑な関数式を教えてもらうか、 VBAやSQLででも使うことになるのかな。 (1)フィルタを使う。 (2)ソートを使う。その後品目・出入りを探す など。しかしユーザー関数で関数化できるかな。

回答No.4

こんにちは。 VLOOKUP関数では難しいです。 「日付とは数値である→最終日付とは最大日付である」 という考え方で、MAX関数で最大値を求めましょう。 B10に =MAX(INDEX(($A$2:$A$6&$B$2:$B$6=$A10&RIGHT(B$9,2))*$C$2:$C$6,0)) という数式を普通の数式として普通に設定して、 C10までフィルコピー。 仮にA11が"B"みたいに下方向に連続するような作表でしたら、 B10:C10を下方向に必要なだけフィルコピーします。 結果、日付を数値として(42738とか42739とか)返しますから、 セルの書式、表示形式を日付形式に変更して 2017/1/3とか2017/1/4と表示されるようにしてください。 数式の意味としては、  A2:A6の値{"A","B",...} と B2:B6の値{"入庫","出庫"} を 横に連結した文字列  と  A10の値"A" と B9の値の右2文字"入庫" を 横に連結した文字列  とが、一致するかどうか{1,0}を  C2:C6の日付値に掛けて(一致しない日付を0値に見立てて)  INDEX関数で配列として収めた中の  最大値をMAX関数で求めます。 えっと、この場合は、並べ替えとかは必要ないです。 A10以下に設定する品名を参照しますし、 B9:B10に設定された分類を参照していますから、 品名、分類が増えてもそのまま対応可能です。 以上です。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.3

B列を昇順とC列を降順で並べ替え D2セル以下 =A2&B2 E2セル以下 =C2 B10セル =VLOOKUP(A10&"入庫",D:E,2,FALSE) C10セル =VLOOKUP(A10&"出庫",D:E,2,FALSE)

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.2

VLOOKUP関数では目的の日付を抽出できません。 INDEX関数とMAX関数を組み合わせて数式を組み立ててください。 B10=MAX(INDEX((A2:A6=A10)*(B2:B6="入庫")*C2:C6,0)) C10=MAX(INDEX((A2:A6=A10)*(B2:B6="出庫")*C2:C6,0))

  • msMike
  • ベストアンサー率20% (363/1775)
回答No.1

範囲 B9:C9 に "最終"@ という書式設定を施しておき、それぞれのセルに「入庫」「出庫」と入力。 式 =MAX(IF($B2:$B6=B8,$C2:$C6,"")) を入力したセル B9 を右にオートフィル。 ただし、上式は必ず配列数式として入力すること。

関連するQ&A

  • Vlookup関数について

    Vlookup関数での質問です。 検索範囲内に日付表示の項目があります。元の表は日付表示になっていても、Vlookupの式で返したい値が日付の場合、式を入れたセルに、日付では表示されずシリアル値で表示されます。文字列の場合はそのまま文字列の表示となります。 これはエクセルの仕様なのでしょうか?シリアル値になっているものを表示形式の変更によって日付表示に直すしかないのでしょうか?

  • Excelで条件に一致する数値の合計を求める

    日付け列と商品名(商品ID)列と入庫、出庫列を作ったとして、一日に何回にも分かれて同じ商品が入出庫された場合、伝票でその都度入力したとします。後日見て何日に商品ID"何"が合計何個入庫したかをほかのセルに表示したい場合どのような関数を使えばよいのでしょうか?解りずらい質問ですが、ご回答頂きたく御願い致します。

  • エクセル関数について

    エクセルの部品管理表を作成しています。 エクセルのシート1に入出庫表、シート2に、実在庫数表、シート3に発注表、シート4に部品名と作成しました。 シート1のA1セルに部品名、B1セルに部品サイズ、C1セルに日付、E1セルに、実在個数(箱数)、F1セルに実在個数(本数・入数)、G1セルに入庫、H1セルに出庫、と入力しました。 シート2にはA1セルに部品名、B1セルに部品サイズ、C1セルに期首在庫(箱数)、D1セルに期首在庫(本数・入数)、E1セルに実在個数(箱数)、F1セルに実在庫数(本数・入り数)と入力。 シート3のA1セルに部品名、B1セルに部品サイズ、C1セルに発注日、D1セルに発注数、E1セルに受取日(入庫日)、F1セルに受取個数(入庫数)、G1セルに受取本数(入庫本数・入数)と入力。 シート4のA1セルに部品名、B1セルに部品サイズ、と入力。(部品名は約200種類、部品名は同じでもサイズ違いの部品がある、部品コードは存在しない。) 教えて頂きたいことは、 ・在庫管理を行うにあたり、上記のようなファイルの作り方でいいのか?。(縦に表を使うのか、横など) ・付け足したほうがいい項目があるか。 ・シート1(入出庫表)には部品名と部品サイズは部品コードが無いため入力規則を使用し、日付、入庫数、出庫数は手入力で行うとし、実在個数(箱数)、のセルには関数を入れ値を表示したい。入庫数と、出庫数は箱数で入力するものとし、入庫があれば、実在個数(箱数)の値が増え、出庫があれば、実在個数(箱数)の値をへらしたい。実在庫数(本数・入数)は実際に入庫してみないと、1箱に何本入っているのか曖昧な為、大体の数値で設定した。(1箱に200本など) 実在個数(箱数)に値を表示するにはどのような関数を使えばいいのか。 ・シート2(実在庫表)に、部品名と部品サイズが約200行程度、入力されており、実在個数(箱数)、実在個数(本数・入数)を在庫一覧としたい。期首在庫(箱数)と期首在庫(本数・入数)は在庫を確認し、数字を入力済み。実在個数(本数・入数)は、大体の数値で設定済み。 部品名、サイズ毎に実在個数(箱数)に値を表示するにはどの様な関数を使えばよいのか。 説明不足でしたら申し訳ございません。 よろしくお願いします。

  • EXCEL: 日付を残す関数

    どなたか教えてください。 伝票明細に度々同じような編集を加えるので、自動的に編集した日付を履歴として残すようにしたいのです。 ↓ 明細行の一番左側(A5)に、プルダウンリスト(入力規則)から「入庫」または「出庫」を選ぶと、自動的にとなりのセルにその日の日付が入力されるようにする。 私が考えたのは、次のとおり。 (B5)にひとまずToday関数を入れる。→(C5)に次の関数を入れる。 C5=IF(OR(A5="入庫",A5="出庫"),B5,"") けど、これじゃ値ではなく数式をもってきちゃうので、別な日に開くと日付が更新されてしまうのです。 どうすればよいですか?よろしくお願いします。

  • SUMIFS関数で行が変わると反映されない。

    写真の、上のシートで入庫または出庫を選んで数を入れると下のシートの入庫数、出庫数に自動で反映されるようにしたいです。条件は製品番号が一致していることです。 SUMIFS関数を使ってみたらシート間で同じ行には数字が反映されたのですが、上のシートの6行目に出庫数を入れても、下のシートの同じ製品番号である1行目の出庫数に反映されません。 使用した関数は以下です。(写真内と同じもの) =SUMIFS(OFFSET(入出庫リスト!$H$3,0,0,COUNTA(入出庫リスト!C:C),1),OFFSET($E$3,0,0,COUNTA(入出庫リスト!C:C),1),[@製品番号],OFFSET(入出庫リスト!$G$3,0,0,COUNTA(入出庫リスト!C:C),1),"出庫") 関数のどこを間違えているのか教えて頂きたいです。 よろしくお願いします。

  • エクセル関数を教えてください

    セル番地A1に入庫重量が入っていますB1に出庫日C1の出庫重量とします、B1に入力するとC1にA1の重量が入るようにしたいのですが、そのような関数はありますか?エクセル初心者です宜しくお願いします。

  • ExcelでのVLOOKUP関数について

    キー1を1000倍したうえで完全一致のVLOOKUP関数を使うと#N/Aエラーが発生します。 表示上は同じように見えますが内部的に異なる値となっているのでしょうか? 試しにエラー行に対して、キーとターゲットとなる当該セルを「=」でつないで確認しても「TRUE」となります。 添付画像は、 検索先としてA列に基準キーを130.168~130.192(step 0.001)で各行へ入力し、B列はA列を1000倍、C列はB列をROUND関数で整数値に丸めたものをキーとしました。 D列にVLOOKUPで参照する値を入力し、E列以降で以下の異なるパターンで値を参照しています。 (1)【E・F列】 ・E列に整数値をキーとして130168~130192(step 1)で入力。 ・E列をキーとしてB~D列のVLOOKUP関数としています。   『=VLOOKUP(E3,B:D,3,FALSE)』 (2)【G・H列】 ・G列にE列/100をキーとして計算。 ・G列をキーとしてA~D列のVLOOKUP関数としています。   『=VLOOKUP(G3,A:D,4,FALSE)』 (3)【I列】 ・E列をキーとしてC~D列のVLOOKUP関数としています。   『=VLOOKUP(E3,C:D,2,FALSE)』 シートを複製し、キーの入力範囲を0.001~0.025(E列は1~25)にした場合はエラーがでませんでした。 その他の確認としてはTEXT、JIS、ASCなどを組み合わせて文字列としたキー同士のVLOOKUPではエラーにならず値を参照できています。

  • エクセル関数VLOOKUPのことですが

    VLOOKUPで別のシートのセルから数字を引っぱってくる設定をしたのですが、その参照するセルが空白だった場合、0が表示されてしまいます。 空白のときは空白にしたいのですが、以下の関数にどう付け加えればいいですか? =VLOOKUP(B2,Sheet1!B4:I52,8,0)

  • vlookup関数について

    vlookupの関数でお尋ねします。 vlookupで検索したセルが空欄の際に、値を返すと作成した表のセルの部分には「0」が表示されます。 「0」を表示させず、空欄にしたいのですが、方法が分かりません。 もしくは、印刷時のみ「エラー」のときと同じように印刷されない方法があるなら、それでも構いません。 よろしくお願いいたします。

  • エクセルのVLOOKUP関数について

    エクセルの関数で悩んでいます。 やろうとしていることは、たとえばA1のセルに日付(年月日)を入力すれば、入力した月だけを判断してその月の掃除当番の名前がセルB1に表示されるようにしたいのです。 1月から12月までの掃除当番は決まってますので、事前に別のセルに表を作成(たとえばH1~H12には1月、2月・・・・12月と入力し、I1~I12にはそれぞれの掃除当番名を入力して)し、VLOOKUP関数で呼び出せないかなぁと思っていたのですが、セルA1の日付(たとえば2006/8/27)から8月と判断する方法がわからないのです。 どなたかご存知でしたらご教授頂けないでしょうか。 他の関数を使用してする方法などでも結構です。 宜しくお願いいたします。

専門家に質問してみよう