エクセルのFIND関数の複数セル参照について

このQ&Aのポイント
  • エクセルのFIND関数を使用して複数のセルを参照する際に問題が発生しています。
  • 現在、該当する項目がない場合に「#N/A」と表示されてしまうため、IF関数を使用して「未使用」と表示するようにしましたが、うまく動作しません。
  • LOOKUP関数とCOUNT関数の内部で使用されているFIND関数の参照内容が異なるため、問題が発生しています。また、LOOKUP関数は旧バージョンとの互換性を維持するためのものであり、VLOOKUPやHLOOKUP、MATCH関数で代用することはできません。
回答を見る
  • ベストアンサー

エクセルのFIND関数の複数セル参照について

C4=LOOKUP(0,0/FIND(B4,テーブル1[アドレス]),テーブル1[名称])  「テーブル1」の「アドレス」列を部分一致で検索し、「B4」セルの文字列に該当する項目があったら、「テーブル1」の「名称」列のデータを「C4」セルに表示するよう、インターネット上の情報を参照しながら数式を組んでいます。  ところが、「B4」セルの文字列に該当する項目があるときはいいのですが、該当項目がない場合は「#N/A」と表示されるため、「IF」関数を追加し、以下のようにしたところ、うまく動きませんでした。 C4=IF(COUNT(FIND(B4,テーブル1[アドレス])),LOOKUP(0,0/FIND(B4,テーブル1[アドレス]),テーブル1[名称]),"未使用")  「数式の検証」で調べたところ、「LOOKUP」関数内の「FIND」関数は「テーブル1」の「アドレス」列の各セルをそれぞれ参照しているのに対して、「COUNT」関数内の「FIND」関数は同じ行(C4の場合は4)の「テーブル1」の「アドレス」列しか参照していませんでした。 「LOOKUP」関数内の「FIND」関数のテーブル1[アドレス]: {"アドレス1";"アドレス2";"アドレス3"} 「COUNT」関数内の「FIND」関数のテーブル1[アドレス]: "アドレス4"  参照内容が異なるのはなぜでしょうか。  この場合、どのようにすればよろしいのでしょうか。  また、「LOOKUP」関数は「旧バージョンとの互換性を維持するためのもの」となっており、代わりに「VLOOKUP」や「HLOOKUP」、「MATCH」関数などで代用はできないのでしょうか。  何卒ご教示よろしくお願いいたします。

  • inshin
  • お礼率78% (104/133)

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

回答を投稿してから部分一致に気がつきました。 そのときは =IFERROR(VLOOKUP("*"&B4&"*",G:H,2,FALSE),"未使用") =IFERROR(INDEX(G:G,MATCH("*"&B4&"*",H:H,0)),"未使用") のようにします。

inshin
質問者

お礼

ご教示いただきありがとうございます。 「"*"」という風に書くとそのままアスタリスクは文字として検索されるのかと思いきや、そうではなかったんですね! 大変勉強になりました。ありがとうございました。

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

ご利用のエクセルのバージョンがご相談に書かれていませんが,情報から2010以降を利用しているのが明らかです。 とりあえずご質問の数式をそのまま活かしたいなら =IFERROR(LOOKUP(0,0/FIND(B4,テーブル1[アドレス]),テーブル1[名称]),"未使用") とでもしてください。 普段使いの関数を使い アドレス列(仮にG列)のひとつ右隣(仮にH列)に名称列があるなら =IFERROR(VLOOKUP(B4,G:H,2,FALSE),"未使用") としたほうが,遙かに簡単です。 リストの配置をどうしても動かしたくないなら 仮にH列を検索してG列を取得する =IFERROR(INDEX(G:G,MATCH(B4,H:H,0)),"未使用") です。

inshin
質問者

お礼

ご回答ありがとうございます! 質問内容からOfficeのバージョンがお分かりになられるとは、流石です。 =IFERROR(LOOKUP(0,0/FIND(B4,テーブル1[アドレス]),テーブル1[名称]),"未使用") としたほうが遥かにスマートですね!ぜひそのようにさせていただきます^_^  なぜLOOKUP(0,0/FIND(B4,テーブル1[アドレス]),テーブル1[名称])のような面倒な書き方になっているのかといいますと、部分一致でないと照合しないデータが含まれているからです。  ご教示の方法で「LOOKUP」関数を「VLOOKUP」や「INDEX」関数に置き換えてしまいますと、完全一致となり、一部のデータが誤って「未使用」となってしまいます。

回答No.1

複数一致するときに、どこの値が返ってくるか安定しないけどいいのかなあ とか心配しつつ FIND(B4,テーブル1[アドレス]) は、ヘルプに載っているような基本的な使用方法ではなく、配列として返しています。 そのままでは配列として認識していません。INDEX関数やLOOKUP関数など、配列を扱う関数なら、配列として扱われますが、COUNT関数は、セル範囲として扱う関数になっています。 で、配列として認識させるためには、 =IF(COUNT(FIND(B4,テーブル1[アドレス])),LOOKUP(0,0/FIND(B4,テーブル1[アドレス]),テーブル1[名称]),"未使用") [Ctrl]+[Shft] +[Enter] で確定、配列数式。{ }で挟まれる。 または、配列として認識させるよう =IF(COUNT(INDEX(FIND(B4,テーブル1[アドレス]),)), LOOKUP(0,0/FIND(B4,テーブル1[アドレス]),テーブル1[名称]),"未使用") といった方法もあります。

inshin
質問者

お礼

ご教示いただいた方法で無事に配列として認識させることができました。ありがとうございます! 「テーブル1[アドレス]」にはゴミデータが入っていて、部分一致でないと照合しませんが、重複することはないのでご心配なく^_^

関連するQ&A

  • 【エクセル関数】参照するセル

    エクセル関数で教えていただきたいです。 セル参照で、参照するセルを、ある法則道理に参照していきたいのです。 例えば、シートA,シートB、とあったときに、 シートBのC3に → シートAのC3を参照、 シートBのC6に → シートAのC4を参照、 シートBのC9に → シートAのC5を参照、 シートBのC12に → シートAのC6を参照・・・・ ・・・・・・・・・・・ という風に、参照元の列は1行づつ増やしていきたいのですが、 それをシートBでは、3行ごとに表示したいのです。 自分でいろいろ試してみましたが、うまくできません。 こういったことは、関数でできるのでしょうか? もし、あれば、教えていただけると助かります。 よろしくお願いします。

  • セル番地の入力されているセルを参照する方法を教えてください

    それぞれaddress関数を使って、A1~A4にセル番地が入っています。A1とA3のセル番地を参照した数式を作りたいのですが、どうすればできるのでしょうか。教えてください。  | A | B | C | D| 1 A4 2 A10 3 C4 4 C10

  • セルの参照

    横1列の各セルの各数字データーを 縦1列に各 参照したいのですが どんな関数をつかうのでしょうか たくさんありますので いちいち = イコール参照出来ません       5  10  15  20を   5   10  5のセルにはどんな関数や数式をやればいいですか   15   20 宜しくおねがいします めんどうでしょうが

  • エクセルのセル参照、一つずつ参照セルをずらしていきたい

    エクセルのセル参照の方法について教えてください。 2つのシートがあって、 ひとつのシートにはC4,D5,E6…というように行と列がひとつずつ増えていくところに値が入力されています。 このシートから、C4,D5,E6…のセルの値を取り出して 別のシートのA1,A2,A3…に縦に並んで表示させたいのですが、どのようにセルを参照させればC4,D5,E6…という 行と列がひとつずつ増えていくセルを参照できるでしょうか? よろしくお願いいたします。

  • エクセル2007:セルを参照する関数

    Sheet1とSheet2があり、 Sheet2のC1=Sheet1!B3 Sheet2のC2にSheet1のB6の値を入れたいです。 Sheet2のC3にSheet1のB9の値を入れたいです。 C2=OFFSET(Sheet1!B3,0,3) でできましたが、 C3を、C2の式を使って表したいです。 気持ち的には、 C3=OFFSET(C2,0,3) としたいのですが、当然ながらエラーです^^; このように入れられれば C4から下は、コピー&ペーストで行けるのになぁ…と思います。 C3=OFFSET(C2,0,3)としたときに、 関数中のC2が、C2の値ではなく参照しているセルの数式(OFFSET(Sheet1!B3,0,3) )を表すようにはできないものでしょうか???

  • セル参照先のアドレスから一定値離れたセルの参照

    エクセルで、セル参照先のアドレスを使って、そのアドレスから一定列離れたセルの値を得たいのです。 たとえば、以下のような処理をマクロを使わずに行うことは可能でしょうか? A1にはセル参照(=A2)が入力されています。 B1に、何らかの数式で、A1での参照先(A2)から3列右側のセル値(D2)を参照したいのです。 (offset を使うのかと思いますが、この場合、基準セルの指定をどうすればよいかわかりません。)      A   B   C  D ---------------------------- 1   12    9    (=A2)  (=?) 2   12           9 よろしくお願いいたします。

  • セルを参照させる関数について

    C列には関数で返ってきている値が入っています。(たとえば単純にC1のセルには=SUM(A1:B1)と入っている)そのままC1を横にドラッグしてコピーするとD1のセルには単純に=SUM(B1:C1)となりますが、見に行くセルをC2に、E1のセルの参照するセルはC3を。。。という風に参照させるにはどんな関数を使用すればいいのでしょうか? (単純にD1のセルに=C2と設定はしたくないのが前提です)

  • エクセルCOUNT関数について

    こんばんは、COUNT関数についてお伺いします。 たとえばA列に関数(SUMなど)の数式が入っています。そのA列を範囲指定してCOUNT関数をしたところ、数値が現れているセルのみをカウントしたいのですが、空白の数式が入っているセルもカウントしてしまいます。数値を示しているセルのみをカウントしたいのですが、うまく行きません。 どうすれば解決できますか、教えていただけないでしょうか。

  • EXCELでセルに入力されたセルを参照したい。

    はじめまして、EXCEL 2000 で質問です。 セルに入力されている文字列を、参照する関数があれば教えていただきたいです。 たとえば、セルA1に 文字列"B32"を入力します。 セルB1に =sansyou(A1) という関数を入力すれば セルB32の内容が参照される。 ということがやりたいのです。 C言語ですと、ポインタに相当するとおもいます。 どうか皆さんの知恵を分けてください。

  • excelのfind関数について

    複数のキーワードで検索させるにはどうしたらいいのでしょうか? 例) 1A              B 2秋は冬色、柿が実る~   1 3桜の咲く季節、子ども~ 4柿の葉は医薬効能~ 5柿のしぶみは色が~    1 キーワードは、柿・色 でA列を検索させ、両方あればB列に1を立てさせたいのです。 このキーワードは臨機応変に増やしたいので、セルで指定をしたいです。 シンプルな関数を希望します。 1つのキーワードの場合は、IF関数とfind関数で成功しました。っが、複数になるとfind関数では指定できないようなのです。。 宜しくお願いいたします。

専門家に質問してみよう