Excel (一般機能)

Excelの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 11全般 : Microsoft 365)
指定日付に有効な値を取得
投稿日時: 22/10/18 12:18:16
投稿者: Jasmine809

お世話になります。
 
下記のような製品の価格テーブルデータがあり、指定した日付に有効な価格を取得したいです。
EXCEL の関数を活用すれば、取得可能でしょうか?
ご教示頂けますよう、何卒よろしくお願いいたします。
 
例)2021/7/20に有効な単価=23円 を取得したい。
 
■入力日付    2021/7/20    
 
■価格DB
製品    有効開始日    価格
A    2019/8/1    \15
A    2019/9/2    \17
A    2020/1/13    \16
A    2020/7/1    \23
A    2021/2/3    \21
A    2021/12/18    \18
A    2022/3/20    \27
        
        

回答
投稿日時: 22/10/18 12:39:11
投稿者: メジロ2

>例)2021/7/20に有効な単価=23円 を取得したい。

例)2020/7/20に有効な単価=23円 を取得したい。
の誤記として解釈しました。
 
セルE1に日付が入力されているとして。
 
 =VLOOKUP(E1,B2:C8,2)

回答
投稿日時: 22/10/18 14:04:35
投稿者: Suzu

商品「A」があると言う事は、商品「B」の単価も同じ表の中にあるのではないでしょうか?
 
その場合、FILTER関数を使います。
 
FILTER関数とは?複数条件の抽出に最適!作業効率に差をだす便利関数
https://exceljoshi.cocoo.co.jp/media/excel-filter
 
 
 
複数条件で、商品名順、日付順でデータが並んでいるのが確定しており、作業列を用いて良いなら
VLOOKUP関数でも良いでしょう。
 
エクセルで複数条件に一致したデータを抽出する方法
https://office-hack.com/excel/extraction-of-multiple-conditions/
 
ただし、商品名順・日付順以外の並び順要素あるなら、意図しない結果になる場合がありますので注意が必要です。
 
 
・FILTER関数が使えない環境(Excel2019以前)
・並び順に左右されない結果が欲しい
なら、INDEX/MACH を使う事になりますね

回答
投稿日時: 22/10/18 15:27:51
投稿者: WinArrow
投稿者のウェブサイトに移動

別案:Filter関数を使わない方法
 
前提
価格DBを、シート名とします。
順番は、製品、有効開始日の昇順とします。
 
入力側は、別シートとします。
A1:製品
B1:入力日付
以下、作業セル
C1:指定製品の先頭行 =MATCH(A1,価格DB!$A$1:$A$8,0)
D1:指定製品の件数 =COUNTIF(価格DB!$A$2:$A$8,A1)
E1:取得した価格(答え)=VLOOKUP(B1*1,INDIRECT("価格DB!$B$"&C1&":$c$"&D1),2,TRUE)
※B1*1:安全策
※INDIRECT("価格DB!$B$"&C1&":$c$"&D1):価格DBの指定製品の範囲
※指定製品が存在しないというチェックは省略
 
 
 

回答
投稿日時: 22/10/18 16:46:40
投稿者: んなっと

メジロさんの回答で解決だと思いますよ。
 
A列の条件を考慮するとしても、メジロさんの式を少し変えるだけです。
 
    A      B   C D     E  F
 1 製品 有効開始日 価格 A 2020/7/20 \23
 2   A  2019/8/1  \15 B 2020/7/20 \11
 3   A  2019/9/2  \17          
 4   A  2020/1/13  \16          
 5   A  2020/7/1  \23          
 6   A  2021/2/3  \21          
 7   A 2021/12/18  \18          
 8   A  2022/3/20  \27          
 9   B  2019/8/8  \24          
10   B  2019/9/9  \13          
11   B  2020/1/20  \24          
12   B  2020/7/8  \11          
13   B  2021/2/10  \27          
14   B 2021/12/25  \48          
15   B  2022/3/27  \44          
 
F1
=LOOKUP(E1,B$2:B$500/(A$2:A$500=D1),C$2:C$500)

投稿日時: 22/10/18 17:43:29
投稿者: Jasmine809

皆様
 
早々にご回答頂きまして、ありがとうございます。
おかげ様で、希望していた処理が実現できそうです!大変助かります。
 
LOOKUP関数について、大変勉強になりました。