• ベストアンサー

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

  • 関数で対応が可能でしょうか?

    次のような、エクセル表で、関数(IF関数?)を使って、コピーが出来ますか? <sheet1>    A列    B列  C列  D列  E列  F列  ・・・ 1行 タイトル1  1 2行 数式1        2 3行 タイトル2          3 4行 数式2                4 5行                       タイトル1をコピー 6行                       数式1をコピー 7行                       タイトル2をコピー 8行                       数式2をコピー (1)B1=1 且つ C2=2 のとき、A1のタイトル1をF5にコピー (2)B1=1 且つ C2=2 のとき、A2の数式1をF6にコピー (3)D3=3 且つ E4=4 のとき、A3のタイトル2をF7にコピー (4)D3=3 且つ E4=4 のとき、A4の数式2をF8にコピー

  • エクセルのMATCH関数について

    エクセルのMATCH関数についての質問ですが、どうしてもエラーが表示され悩んでいます。どうか教えていただければと思います。 たとえば下記のような場合なぜかエラーが発生してしまいますがどうしてでしょうか?      A列   B列   C列   D列   E列   F列 1行              A     B    A+B  戻り値 2行    2.0        1.0    1.2   2.2   2 3行    2.2        0.9    1.1   2.0   1 4行    2.4        1.1    1.3   2.4   #N/A 5行    2.6        1.0    1.4   2.4   3 使用している関数は、 E列2行 =C2+D2  F列2行 =MATCH(E2,$A2:$A5,0) E列3行 =C3+D3  F列3行 =MATCH(E3,$A2:$A5,0) E列4行 =C4+D4  F列4行 =MATCH(E4,$A2:$A5,0) E列5行 =C5+D5  F列5行 =MATCH(E5,$A2:$A5,0) です。ここでどうしても、F列4行にエラー値(#N/A)が発生してしまいます。どうしてでしょうか? E列4行とE列5行は同じ値にもかかわらず戻り値が違うのはどうしてでしょうか? また、不思議なことにE列4行に手入力で2.4の値を入力した場合は戻り値は3となり、正しい値を表示します。どうしてでしょうか? 以上、よろしくお願いします。

  • エクセルVBA及び関数

    初心者です。お教えお願いします エクセル2003です 空白行及び0をなくしたいのですが(C列を入力された時点で自動でE列のようにしたい) 関数の場合及びVBAのシートコードを両方教えていただけないでしょうか VBAのコードは勉強の為です Sheet1    A    B     C     D     E     F 16          文字A        文字A 17          文字B        文字B 18            0         文字C 19          文字C        文字D 20            0         文字E 21          文字D        文字F      22      23          文字E 24 25          文字F 文字はC16~C80まで入っております B16~E80までのセルのみで行いたいのですが 他の場所は関数やグラフ等がすでに入ってますのでいじりたくありません E16~をフォームのコンボボックスのリストにしようと思ってます よろしくお願いましす

  • エクセルのLOOKUP関数について教えてください。

    エクセルのLOOKUP関数について教えてください。 日にちごとに、AさんからEさんの順位を表示しています。 その表を元に、日にちごとに、1位から5位には誰がなったのかを 表示したいと考えています。 LOOKUP関数を用いて行ったところ、正しい答えとそうでない答えが出てしまいました。 間違った答えがでた箇所(ピンク表示)には、下記のような計算式が入っています。 E15=LOOKUP(E13,$C$4:$G$4,$C$2:$G$2) E16=LOOKUP(E13,$C$5:$G$5,$C$2:$G$2) D17=LOOKUP(D13,$C$6:$G$6,$C$2:$G$2) F18=LOOKUP(F13,$C$7:$G$7,$C$2:$G$2) D19=LOOKUP(D13,$C$8:$G$8,$C$2:$G$2) F19=LOOKUP(F13,$C$8:$G$8,$C$2:$G$2) 調べたところ、LOOKUP関数は昇順になっていないとできないとあったので、 その理由でうまく表示されないのか?とまでは推測がついたのですが、 では、どうしたらいいか?というところで作業がとまっております。 LOOKUP関数以外の関数でも構いませんので、どのようにしたら表が完成できるか どうかお知恵を拝借願いますm(_ _)m

  • エクセルの関数

      A B C D E F 1 × 8/1 8/2 8/3 8/4 8/5 2 ○ 3 4 3 4 5 3 △ 0 1 4 3 2 4 ■ 6 0 2 1 2 5 □ 5 3 2 1 1 6 ● 3 4 2 1 2 上記の表がSheet1にあり sheet2 に ○の8/3の数値を抽出する関数がわかりません。 =SUMIF(Sheet1!A1:Sheet1!A6,"○",Sheet1!D1:Sheet1!D6) で抽出できるものの、日付が変わったとき対応が全く出来なくて行き詰ってしまいました。行、列ともに条件が必要だと思うのですが、どなたか教えて頂けると助かります。

  • EXCELの関数について

    いつもお世話になってます。ありがとうございます。 excelの関数についてお聞きしたいことがあり質問しました。      A列 B列 C列 …        a   c   e  g  i 1行 2日 ○  △ □ ● ■ となっているデータを      A列 B列 C列 …      a   b   c  d   e  f  g  h  i … 1行 1日 2行 2日 3行 3日 こんなシートに自動的に打ち込めるようにしたいのです。      A列 B列 C列 …      a   b   c  d   e  f  g  h  i … 1行 1日 2行 2日○    △    □    ●    ■ 3行 3日 が完成図イメージです。 一番上の色々なデータから表を完成させたいのですがどうすればできるでしょうか。 vlookupやhlookupでは一行ずつの打ち直しが必要になってしまいます。 よろしくお願いします。

  • エクセル関数2

    シート(1) A B C D 作業列    コード    顧客名     金額 3        300001     A 10,000 3        300002   B 15,000 3        300003   C 20,000 3        300004   D 25,000 3        300005   E 30,000 4        400001   F 35,000 4        400002   G 40,000  4 400003 H 45,000 4 400004 I 50,000 4 400005 J 55,000         シート(2) A B C D E F 「1」 「2」 「3」 「4」 「5」 「6」 10,000 35,000 15,000 40,000 20,000 45,000 25,000 50,000 30,000 55,000 ※ シート(1)にコード、顧客名、金額を入力すると、シート(2)にあるように該当するコードの先頭行の列に表示するようにしたいと思っています。 シート1で作業列を作りその作業列を基にシート2でVLOOKUP関数を使い‥シート2の10,000のセルの場合、 VLOOKUP(C$2,sheet1!$A$3,$D$12,4,false)として、下にコピーすると同じ金額になってしまいます。 セルが空白にならず、シート1の金額が上から順番にシート2に表記されるようにするにはどうしたらよいでしょうか。マクロはできませんので、関数で詳しく教えて下さい。宜しくお願いします。

  • 関数の質問

    エクセル2003を使用しています。 下記のシート1に不規則な空白行があり、それをシート2に空白行を詰めて 表示させたいのですがわかりません。 関数でよろしくおねがいいいたします。 シート1 A B C D E F G 1 1 1 1 1 1 1 1 2 3 2 2 2 2 2 2 2 4 3 3 3 3 3 3 3 5 6 7 4 4 4 4 4 4 4 8 9 5 5 5 5 5 5 5 10 11 12 13 6 6 6 6 6 6 6 14 7 7 7 7 7 7 7 15 8 8 8 8 8 8 8 16 9 9 9 9 9 9 9 17 18 シート2 A B C D E F G 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 10 11 12 13 14 15 16 17 18 ・ ・ ・ ・

  • LOOKUP関数について

    現在、次のようなエクセルのシートを作成中ですが、どうしても、上手くいかないものですから教えていただけませんでしょうか。    A    B    C    D 1 7日間  0.7  7日間  0.1 2          15日間  0.2 3          1ヶ月間  0.3 4 2ヶ月間 0.4 5          3ヶ月間  0.5 6          4ヶ月間 0.6 7          7ヶ月間 0.7 上記のシートを作成しているのですが、A1のセルに7日間と打ち込めばLOOKUP関数にて0.1とB1に出力させたいのですがどうしても、7ヶ月間の0.7が出力されるなど、上手く拾ってきてくれないのですが、関数式について教えてください。 ちなみに  =LOOKUP(A1,C1:C7,D1:D7) といった数式を入れてみております。Cの欄などは文字列に設定してみたりもしております。  

  • 関数の件

    年間の日にち及指定曜日に連動して表示の方法は?     A列      B列        C列       D列       E列      F列       1  2014/5/4   日曜日      AA       AA        AA      祝日  平日はE1にAA表示、土曜日はD1に表示、日曜日はD1及びE1にAA表示の関数は       D1に=IF(OR(WEEKDAY(A1,2)>5,COUNTIF(F2:F20、A1)=1)、C1,””)  E1に=IF(OR(WEEKDAY(A1,1)>6、COUNTIF(F2:F20、A2)=1)、””、C1)  上記の関数では5/4、5/5、はD1,E1にAAが表示されます、5/4から5/5までD1にAA  のみ表示又、7/20(日)はD1、E1にそれぞれAAが表示されます、7/20はD1にAA   のみ 表示関数有りますか、可能であれば教えてください。      よろしくお願いします。     

専門家に質問してみよう