『複数条件から料金を取得する方法』(らすてい)
お世話になります。
日付・料金ランク・部屋タイプ・人数を指定し、別シートの料金表から条件に一致する料金を取得するための関数についてご教示いただけますと幸いです。
INDEX関数とMATCH関数を組み合わせるのかな、と調べていましたが息詰まりました…
【料金シート】
タイプ | 人数 | ランク | |ーーー|ーーー|ーーー | | A | B | C ーーーー|ーーー|ーーー|ーーー|ーーー Room-1 | 2 | 6000 | 8000 |10000 Room-1 | 3 | 4000 | 6000 | 8000 ーーーー|ーーー|ーーー|ーーー|ーーー Room-2 | 2 | 8000 |10000 |12000 Room-2 | 3 | 6000 | 8000 |10000 Room-2 | 4 | 4000 | 6000 | 8000 ーーーー|ーーー|ーーー|ーーー|ーーー
<照会シート>
タイプ→ | Room-1 ←タイプの入力 ーーーーー|ーーーー|ーーー|ーーー|ーーー 人数→ | 2 | 3 | 4 ←人数は2〜4まで固定 ーーーーー|ーーーー|ーーー|ーーー|ーーー ↓日付 |↓ランク| 単価 | 単価 | 単価 ←ランクは別シートから取得済み ーーーーー|ーーーー|ーーー|ーーー|ーーー 2025/04/01| A | 取得 | 取得 | 取得 ←料金シートから取得 2025/04/02| A | ・ | ・ | ・ ←料金シートから取得 2025/04/03| C | ・ | ・ | ・ ←料金シートから取得 ・ | | | | ・ | | | | ・ | | | | 2025/04/29| B | ・ | ・ | ・ ←料金シートから取得 2025/04/30| A | ・ | ・ | ・ ←料金シートから取得
【取得条件】
・料金を取得する部屋タイプを入力(ここでは、Room-1)
・部屋タイプ、ランク、人数と一致する料金を取得
・Room-1は4名目の料金設定がないためブランク
※Room-2を指定した場合は、4名目までの料金を取得
料金を取得するために、レイアウトを変更することも可です(検索用の列を追加など)
ご教授のほどよろしくお願いいたします。
< 使用 Excel:Excel2019、使用 OS:Windows10 >
レイアウトを提示する際は、行番号/列番号も提示した方が親切です。 以下、一例としてです。
<料金> |[A] |[B] |[C] |[D] |[E] [1]|タイプ|人数|ランク | | [2]| | |A |B |C [3]|Room-1| 2| 6000| 8000| 10000 [4]|Room-1| 3| 4000| 6000| 8000 [5]|Room-1| 4|設定なし|設定なし|設定なし [6]|Room-2| 2| 8000| 10000| 12000 [7]|Room-2| 3| 6000| 8000| 10000 [8]|Room-2| 4| 4000| 6000| 8000
<照会> |[A] |[B] |[C] |[D] |[E] [1]|タイプ |Room-1| | | [2]|人数 | | 2| 3| 4 [3]|日付 |ランク|単価 |単価|単価 [4]|2025/04/01|B | 8000|6000|設定なし [5]|2025/04/02|A | 6000|4000|設定なし [6]|2025/04/03|C |10000|8000|設定なし
C4 =IFNA(INDEX(料金!$C$3:$E$8,MATCH($B$1,料金!$A$3:$A$8,0)+COLUMN(A$1)-1,MATCH($B4,料金!$C$2:$E$2,0)),"") 対象範囲へコピペ (RB) 2025/03/12(水) 07:45:52
C4:=SUMIFS(INDEX(料金!$C$3:$E$8,0,FIND($B4,"ABC")),料金!$A$3:$A$8,$B$1,料金!$B$3:$B$8,C$2) 表示形式をユーザー定義で 0;; または #,##0;; にし、対象範囲にコピーでも (かんたんレシピ) 2025/03/12(水) 09:24:09
照会シートの表は下にどんどん追加されていくんですね?
表をテーブルにするか、または C4:=IF($B4="","",SUMIFS(INDEX(料金!$C$3:$E$8,0,FIND($B4,"ABC")),料金!$A$3:$A$8,$B$1,料金!$B$3:$B$8,C$2)) としてください。 (かんたんレシピ) 2025/03/12(水) 10:32:13
C4: =SUMPRODUCT((料金!$C$2:$E$2=$B4)*(料金!$A$3:$A$8=$B$1)*(料金!$B$3:$B$8=C$2),料金!$C$3:$E$8)
ただし、「Room-1で人数4人」の場合は「0」と表示されますので
不都合であれば、表示形式は「ゼロサプレス形式」を設定してください。
(メジロ) 2025/03/12(水) 13:29:35
|[A] |[B] |[C] |[D] |[E] |[F] [1] |タイプ|人数 |ランクA|ランクB|ランクC| [2] |Room-1| 2| 6000| 8000| 10000|Room-12 [3] |Room-1| 3| 4000| 6000| 8000| [4] | | | | | | [5] |タイプ|人数 |ランクA|ランクB|ランクC| [6] |Room-2| 2| 8000| 10000| 12000| [7] |Room-2| 3| 6000| 8000| 10000| [8] |Room-2| 4| 4000| 6000| 8000| [9] | | | | | | [10]| | | | | | [11]| | | | | | [12]|日付 |タイプ|人数 |ランクA|ランクB|ランクC [13]| |Room-1| 3| 4000| 6000| 8000 D13=IFERROR(INDEX($C$2:$E$8, MATCH(1, INDEX(($A$2:$A$8=$B13)*($B$2:$B$8=$C13), 0), 0), COLUMN(A1)), "") → へコピー B13 入力規則 リスト 「Room-1,Room-2」 C13 入力規則 リスト 「2,3,4」 で遊んでみました。 (IT) 2025/03/12(水) 15:22:23
SUMIFSやSUMPRODUCTといった利用するならば条件付きの合計などを求めるときに使うことがありますが、
使い方により、検索と値取得でも利用ができたんですね…
ご提示したサンプル表で、RBさんの式で実現できました。
しかし、現在は、この式を元に本表への組み込みで四苦八苦しているところですが、
指定するセルなどの誤りだろうと見直しを行なっているところです。
ITさんからご提示いただいた式や、入力規則も取り入れていこうと思ってます。
みなさんプロフェッショナルですね…
求める結果に対し、どのような関数を組み合わせていくのか、論理的思考と着眼点というか、凄いですね。
経験と知識なんでしょうね…
自力で解決できるよう努めていきますが、また助けていただきますようお願いいたします。
今回もありがとうございました。
(らすてい) 2025/03/12(水) 21:33:24
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.