• ベストアンサー

OR関数の使い方

シート2のA3の文字列がシート1のD3:D200のいずれかにあれば、C3:C200の列で同じ行にある文字列を返す、そこになければE3:E200を探しそれでもなければF3:F200を探す・・・という関数を以下のように作成しましたが#N/Aになってしまいます。 本当はC3:F200で一気に探したいので、他にもっと適切な関数があればご指導をお願いします。 =OR(LOOKUP(A3,sheet1!D3:D200,sheet1!C3:C200),LOOKUP(A3,sheet1!E3:E200,sheet1!C3:C200),LOOKUP(A3,sheet1!F3:F200,sheet1!C3:C200))

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

  • ベストアンサー
noname#9284
noname#9284
回答No.5

INDEX関数を使ってみてはいかがでしょうか。 =INDEX(C3:C200,SUMPRODUCT((Sheet2!A3=D3:F200)*ROW(D3:F200))-2,1) 解説: SUMPRODUCT((Sheet2!A3=D3:F200)*ROW(D3:F200))-2 でC3:C200の中の何行目にあたるかを出しています。 探している値がD3:F200に重複して存在するとエラーになるようです。 その他あわせてエラー処理はしていませんので続きは状況に応じて工夫していただけませんでしょうか。

chutohanpa
質問者

お礼

関数の意味もわからずそのままコピーしましたが、私が求めていた方法でした。 時間のある時にもっと関数のことを勉強します。 ありがとうございました。

その他の回答 (6)

noname#9284
noname#9284
回答No.7

再びANo.#5です。 重複した時のエラー処理を入れるのであれば =IF(COUNTIF(D3:F200,Sheet2!A3)>1,"重複",INDEX(C3:C200,SUMPRODUCT((Sheet2!A3=D3:F200)*ROW(D3:F200))-2,1)) (なぜか2行になりましたがこのまま数式バーに貼り付けてもOKです) で、 入力がなかった、あるいは値が見つからなかった時のエラー処理を入れるのであれば =IF(COUNTIF(D3:F200,Sheet2!A3)=0,"",INDEX(C3:C200,SUMPRODUCT((Sheet2!A3=D3:F200)*ROW(D3:F200))-2,1)) になります。 ISSERROR関数を使いますと、一つの同じ数式を2度使う事になりますので、 状況に応じて使い分けてください。

  • hinebot
  • ベストアンサー率37% (1123/2963)
回答No.6

#1です。 #4の方の方法で、OKだと思いますが、 元のD列、E列、F列に重複がなければ =VLOOKUP(A3,Sheet1!C3:F200,4,0) だけでもOKでしょう。 データに重複があり、検索する列に優先度があるなら #4の方のように、ISERROR で振り分ける必要がありますね。

chutohanpa
質問者

お礼

ありがとうございました。 これを機会にもっと関数を勉強します。

  • zebrabody
  • ベストアンサー率37% (17/45)
回答No.4

#2です。 ・D列からF列から該当する値を探し、C列の同行の値を返すという前提でもしよければ下記の数式で問題ないはずです。もっと簡単な式もあるかもしれませんが・・・とりあえずご紹介します。 ・数式を入れる前にLookupの前提としてC列を切り取りF列とG列の間に挿入してください。元のC列がF列に、元のD列がC列に、元のE列がD列に、元のF列がE列になります。 その後以下の数式を入れてください。 =IF(ISERROR(VLOOKUP(A3,Sheet1!C3:F200,4,0)),IF(ISERROR(VLOOKUP(A3,Sheet1!D3:F200,3,0)),VLOOKUP(A3,Sheet1!E3:F200,2,0),VLOOKUP(A3,Sheet1!D3:F200,3,0)),VLOOKUP(A3,Sheet1!C3:F200,4,0))

chutohanpa
質問者

お礼

できました! VLOOKUPは使ったことがありましたが、ISERRORは初めての関数です。勉強しようと思います。 zebrabody様、この度は本当にありがとうございました。

  • hinebot
  • ベストアンサー率37% (1123/2963)
回答No.3

#1です。 単純にLOOKUPで、というのはちょっと見当違いの回答をしたみたいです。済みません。 改めてお伺いしますが、 >D3:D200のいずれかにあれば、C3:C200の列で同じ行にある文字列を返す、そこになければE3:E200を探しそれでもなければF3:F200を探す この作業ですが、シート2のA3の文字列を探すのは、D~F列であり、返すのはいずれの場合もC列、ということで宜しいでしょうか?

chutohanpa
質問者

お礼

はい、C列で同じ行にある文字列を検索したいです。 よろしくお願い致します。

  • zebrabody
  • ベストアンサー率37% (17/45)
回答No.2

はじめに確認ですが、D3:F200で探し、C列の値を返すということで良いのでしょうか?

chutohanpa
質問者

お礼

早々にありがとうございます。 はい、そのとおりです。 よろしくお願い致します。

  • hinebot
  • ベストアンサー率37% (1123/2963)
回答No.1

OR関数は論理値(TRUEかFALSE)について、「または」の演算をするものなので、書かれているような使い方はできません。 単純に =LOOKUP(A3,sheet1!C3:F200) で良さそうに思うのですが、これじゃダメなんでしょうか?

chutohanpa
質問者

お礼

早々にありがとうございます。 LOOKUPは1行または1列からなる配列を検査範囲とするようなのですが、複数でもできるのでしょうか。 もう少し考えてみます。

関連するQ&A

専門家に質問してみよう