[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『表データから複数条件で抽出』(しみず)
すいません、お願いします。
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.