[[20151009220130]] 『表データから複数条件で抽出』(しみず) ページの最後に飛ぶ

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

 

『表データから複数条件で抽出』(しみず)

すいません、お願いします。

    1 月 1 月   2 月  2月 ・・・・・・・・・・・・・・・・12月  12月
 種類 参加者 参加日数  参加者 参加日数      参加者  参加日数
トマト   4    15       5    10          5    12
メロン  10     5       9     4          3    18

このように、収穫物別に、毎月の収穫に参加した人数と参加した日数の表があります。

ここから、2月 トマト の参加者 「5」を抽出したいのです。
条件は「種類」「月」「参加者or参加日数」の3つに合致したものを関数で抽出できないでしょうか?

自動計算させたいため、ピボットではなく、関数で実現したいと思ってます。

お知恵をかしてください

   

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


 サンプルデータはセル番地がわかるようにしましょう。

	A	B	C	D	E		X	Y
1		1月	1月	2月	2月	〜	12月	12月
2	種類	参加者	参加日数	参加者	参加日数		参加者	参加日数
3	トマト	4	15	5	10			
4	メロン	10	5	9	14			
5								
6								
7	2月	トマト	参加者	5				

 A7:C7が検索条件

 D7 =IFERROR(INDEX(B3:Y5,MATCH(B7,A3:A5,0),MATCH(A7,B1:Y1,0)+(C7="参加日数")),"")

 または、A7は数値で入力(「月」は入力しない)

 D7 =IFERROR(VLOOKUP(B7,A3:Y5,A7*2+(C7="参加日数"),FALSE),"")

 ただし、VLOOKUPの方は「1月〜12月」の順であることが前提

 こんな感じかな。
(笑) 2015/10/09(金) 22:57

ありがとうございます。

indexとmatchを使うんですね!
目から鱗です。

もうひとつ教えてください。

+(C7="参加日数")

この数式の意味がちょっとわかりません。
確かに いただいた数式でC7を変えることで抽出できているのですが、ちょっと理屈を教えてもらえますか?
(しみず) 2015/10/09(金) 23:55


 2行目は「参加者」「参加日数」のくり返しになっていることを前提としている。

 =MATCH(A7,B1:Y1,0)

 この式は、A7の検索値がB列から数えて何列目にあるかを返す。
 A7が「2月」なら「3」になる。
 B列から数えて3列目だからD列(参加者)ですね。

 ただしこれだけだと「参加者」の列しか検索できない。
 C7が「参加日数」だったら +1 して「4」にしないとダメ。

 ここまではわかりますか?
 
 
 (C7="参加日数")

 C7が「参加日数」なら TRUE
 そうでなければ    FALSE になる。

 この論理値(TRUE、FALSE)を足し算など四則演算すると
 TRUEは「1」、FALSEは「0」として扱われるので、

 =MATCH(A7,B1:Y1,0)+(C7="参加日数")

 A7が「2月」で、C7が「参加者」だったら
 =MATCH(A7,B1:Y1,0)+FALSE → 3+0=3 → D列(参加者)

 C7が「参加日数」だったら
 =MATCH(A7,B1:Y1,0)+TRUE  → 3+1=4 → E列(参加日数)

 になる。

 IFを使って =MATCH(A7,B1:Y1,0)+IF(C7="参加日数",1,0) でも同じこと。
 
 
 ところで VLOOKUP の方ではできなかったのかな?

 1行目の順番が「1月〜12月」とは限らないのなら

 =IFERROR(VLOOKUP(B7,A3:Y5,MATCH(A7,A1:Y1,0)+(C7="参加日数"),FALSE),"")
                  ~~~~
 こんな感じ。
(笑) 2015/10/10(土) 01:30

コメント返信:

[ 一覧(最新更新順) ]


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