• ベストアンサー

IF文についての質問

31歳の男です。 以前、似たような質問をさせて頂きましたが、表現が悪かったので 再質問させて頂きます。 宜しくお願いします。 ある関数を使って下記のようなモノを作成しようと思っています。(例) シート1→検索するシート E9→食べ物の名前(手入力) E10→どこで買うか(リストから選択) 以上が検索条件 以下が検索結果 E14→いくら(値段) シート2→元データが入っているシート 1行目   メロン 果物屋/スーパー 1500円  2行目   鮭    魚屋      200円 3行目   スイカ 果物屋      500円 この時、 E9→「メロン」を手入力 E10→「果物屋」をリストから選択 をして E14→「いくら」を出力しようとします。 この時の式はどのような関数を使えば良いでしょうか? ※果物屋/スーパーを選択したなら「真」  それ以外なら「偽」の式だと思うのですが  そこがよく分かっていませんので教えて下さい。 以上です。

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

またメロンに戻りましたか(^^)。さっきの質問  http://oshiete1.goo.ne.jp/qa3801491.html にも回答しましたが、今回の質問内容と、先の質問内容は似ているようで意味が違いますよ。かえって混乱しなければよいのですが… 今回の例ではC列が数値で書式が「0"円"」になっているなら  =SUMPRODUCT((Sheet2!A1:A100=E9)*(ISNUMBER(FIND(E10,Sheet2!B1:B100)))*(C1:C100)) で「1500」が求められます。ただしこの式では メロン  果物屋/スーパー 1500円 メロン  果物屋      1800円 のように「メロン+果物屋」の条件を満たす行が複数あると両方の値を合算してしまいますので不都合です。また求める値が「文字列」のときは使えません。 もし求める結果が文字列だったり、最初に見つけた行だけを表示するだけでよいのであればこんな式になりますが、結構難しい式になりますよ。  =INDEX(Sheet2!C:C,MIN(INDEX(SUBSTITUTE((Sheet2!A1:A100=E9)*ISNUMBER(FIND(E10,Sheet2!B1:B100)),0,10^5)*ROW(Sheet2!A1:A100),))) ついでに先の質問の追記をしておくと、末尾に書いた式を以下のようにすれば○/×を結果として表示させることが可能です  =IF(SUMPRODUCT((Sheet2!$A1:$A100=E9)*(ISNUMBER(FIND(E10,Sheet2!$C1:$C100)))*(Sheet2!$E1:$E100=E11)*1)>0,"○","×")

tatuya24_2006
質問者

補足

回答ありがとうございます。 度々すみません、前回と変更がありまして 今回はメロンの件でお願いします。 出力したいものは全て「文字列」です。 ・リストには「果物屋」「魚屋」「スーパー」があります。 ・出力は下記のようにしたいです。   ・メロン(手入力)→果物屋(リストから選択)→1500円が出力   ・メロン(手入力)→スーパー(リストから選択)→1500円が出力 ※1レコードに「果物屋/スーパー」が登録されている為、単独で(果物屋orスーパーを)リスト選択した場合、結果が出力されません。 宜しくお願い致します。

その他の回答 (4)

回答No.5

#1です。#2さんありがとうございました。 ところで、配列数式を使っても同じことができますね。 下記の数式をセルに入力して、「Ctrl」+「Shift」を押しながら「Enter」です。 =INDEX(Sheet2!C:C,MATCH(E9,IF(ISNUMBER(FIND(E10,Sheet2!B1:B100)),Sheet2!A1:A100,""),0))

tatuya24_2006
質問者

お礼

回答ありがとうございました。 おかげで上手くいきました。 お知恵を下さいましてありがとうございました。 感謝致します。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.4

#02です >※1レコードに「果物屋/スーパー」が登録されている為、単独で(果物屋orスーパーを)リスト選択した場合、結果が出力されません。 失礼ですが、これは#02の式を実際に試した結果で書かれていますか? 「果物屋/スーパー」のように1つのセルに2つの条件があるためFIND関数でどちらがきてもよいようにしたつもりです。テストして「果物屋」「スーパー」どちらもOKだったのですが… まず「この質問に書かれている通りのシート」を作って試してみて、どんなデータで、どんな式をE14に入力し、どんな値をE9,E10に入れたら、どんな結果になったかを補足してください。 (いきなり元のUNIXコマンドの表に当てはめても動くはずはありませんよ。判定する列が違うのですから、式の修正が必要になります) #03さんの補足回答にもなりますが、類似式の解説はこちらにも書きましたので参考にしてください。 http://oshiete1.goo.ne.jp/qa3796268.html

tatuya24_2006
質問者

お礼

回答ありがとうございました。 上手く結果が出力することができ とりあえず完成しました。 丁寧にご説明下さいましてありがとうございました。 感謝致します。

回答No.3

シート2の品名・店名のリストには重複はないものと思っておりましたが、もし重複が許されていて検索条件に一致した行の金額を合算して表示したいのであれば、#2の方が書かれた下記関数で実現できますね。 =SUMPRODUCT((Sheet2!A1:A100=E9)*(ISNUMBER(FIND(E10,Sheet2!B1:B100)))*(C1:C100)) さて、シート2に重複データはないとして、やはり#2の方がステキな関数を書いてくださっていますので、私の追記はひとまずやめます。私の書いた「方法1」「方法2」いずれの結果も、#2の方が書かれた下記の関数と同じになりますので。 =INDEX(Sheet2!C:C,MIN(INDEX(SUBSTITUTE((Sheet2!A1:A100=E9)*ISNUMBER(FIND(E10,Sheet2!B1:B100)),0,10^5)*ROW(Sheet2!A1:A100),))) 便乗で申し訳ないんですが、#2の方、上記2つ目の関数を解説してもらえると嬉しいです。

回答No.1

二つ方法を思いつきました。 1.シート2に検索キー列を作って、MATCH関数とINDEX関数を組み合わせて検索関数を作る 2.シート2にタイトル行を挿入して、DGET関数を使う(ただし、DGET関数は、検索式を表で指定する必要があるみたいなので、シート1の検索キーワードの入力欄をタイトル付きの表にしないとだめです) お好みの方法があれば、詳しく追記します。

tatuya24_2006
質問者

補足

早速の回答ありがとうございます。 当方あまり知識がないのでよく分かっておりません まずは「1」の方法を詳しく教えて頂けないでしょうか? 宜しくお願い致します。

関連するQ&A