• ベストアンサー

Excelの関数LOOKUP(1,0/FIND(....))の意味

Excelの関数やVBAなどをTips集の本で勉強中です。 その中の「検索値の一部の値を含むリストから抽出したい」という項目があります。例としては、 A15:B20の範囲に、 足立区 100 荒川区 200 板橋区 300 江戸川区 400 大田区 500 葛飾区 600 という区コード表が入力されており、 A1に「東京都板橋区大原町1-1-1」と入力されているとき、B1に上のテーブルから区コードを求めて表示する、とあります。 このときB1に入る式が、 =LOOKUP(1,0/FIND($A$15:$A$20,A1,$B$15:$B$20) となっているのですが、説明を読んでもなぜこの式で抽出できるのかがわかりません。(というか、この式の説明がないのです。こう入力すると求められます、としか書いてなくて…) 特に、 ・LOOKUP関数の最初の1とはなんなのか?(普通ここには検索値が入りますよね) ・0/FIND(...) のところの意味は? がわかりません。 ネットで検索しても、0/というのは日付などで大量にヒットするため、解説を見つけられません。誰か教えてください。

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

  • ベストアンサー
  • maron--5
  • ベストアンサー率36% (321/877)
回答No.1

>=LOOKUP(1,0/FIND($A$15:$A$20,A1,$B$15:$B$20) ◆式が違っていませんか? =LOOKUP(1,0/FIND($A$15:$A$20,A1),$B$15:$B$20) ◆こんなことでは、ないでしょうか? 1)式=LOOKUP(1,0/FIND($A$15:$A$20,A1),$B$15:$B$20) が入力されているセルを指定します 2)数式バーで、「0/FIND($A$15:$A$20,A1)」を選択して、「F9」を押します 3)表示が、「{#VALUE!;#VALUE!;0;#VALUE!;#VALUE!;#VALUE!}」になります 4)LOOKUP関数は、LOOKUP(検査値,検査範囲,対応範囲) です 5)検査範囲に、検査値が無い場合は「検査値に一致する値がないと、検査値以下の値の最大値を検査結果とします。」 6)ということで、3番目の0を検索し、対応範囲の3番目の「300」を表示します ◆ 0/FIND(...)  にすることで、検索値の「1」より小さくしています

ham_kamo
質問者

お礼

なるほど!延々と考えていたのですが、大変わかりやすい 説明で納得できました。それにしてもExcelは奥が深いですね…。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 余計な話なのかもしれませんが、私は、その数式の成立について考えてみました。だから、直接の回答ではありません。 #1さんが書いていらっしゃるから、同じことは書きませんが、その数式を導き出すための、確実な論理や方法が見出せません。この数式を作った人は、偶然の産物か、もしくは、内部的な作成コードを知っている人だと思います。Excelの関数の一般的な仕様に反するように思います。LOOKUPは、他社との共有化を図る関数だそうですから、もしかしたら、他社製の仕様ではないでしょうか? FIND($A$15:$A$20,A1) = {#VALUE!;#VALUE!;4;#VALUE!;#VALUE!;#VALUE!} 分子が0だから、その数字の部分は、0 になるけれど、本来は、FINDの戻り値ですね。 調べてみると、LOOKUPは、VALUEエラー値だけで、他のエラー値は受けないようです。 この場合、私なら、Excelでは、エラー値を、TRUE/FALSE に変換しないといけないと思ってしまいます。エラー値の連続の中で、値のみを見つけ出すような関数は、一般関数にはなかったように思います。エラー値が入れば、再び、同じか別のエラーを出すはずです。その仕様自体は、なぜ、そのようになっているのかは、製作側が提示していないとするれば、後は、偶然に一人の人が見つけたとしか思えません。 例えば、以下のような、私が配列で使うINDEX(ISERRORのINDEXは、過去の人たちが、使っていたワザなのですが、 =INDEX($B$15:$B$20,MATCH(FALSE,INDEX(ISERROR(FIND($A$15:$A$20,A1)),,),0),) 誰かが、見つけたワザです。私は、それを「定石」と呼んではいます。もともと、関数は、本当にMSが一環して作っているとは思えませんから、いろんな仕様があるのだとは思います。ある種、バグのようなもので、それは、自分が見つけようとしても、無理だと思います。こういうものは、ある日突然、神様のいたずらで見つかることはあっても、求めて求められるものではないような気がします。関数は、しょせん、結果論だから、VBAよりも遥かに難しい部分があると思います。

ham_kamo
質問者

お礼

詳しい考察をありがとうございます。 なるほど、確かにこのTipsに関しては、いくら考えてでもわからなかった理由がわかりました。 他のTipsは、どんなに複雑でも、それぞれの関数の外部仕様を理解してよく考えれば、「なるほど、これがこうだからこうなるのか」と仕組みが理解できました。しかしこのやり方に関してはいくら考えてもわからない。その理由が、仰るようにExcelの一般的な仕様に反した内部的な仕様を利用していたものだから、とすると説明がつきます。 Excelの関数の仕様について、まだ何が一般的かもわからない状態ですが、このように一般的でない内部的な仕様(あるいはバグ?)を利用したやり方は、将来的にExcelがバージョンアップしたときに、FIND()の機能として公開されている仕様に変更がなければ普通に使っている分には問題ないかもしれませんが、内部的な動作が変わってしまうと互換性がなくなって動かなくなるかもしれない、という可能性がありますね。 どうもありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ExcelでLOOKUP関数がうまくいきません

    EXCELでシート間でLOOKUP関数を使って「Sheet1」に関数を入れ、 コード(C5のセル)にコードを入れたら、「Sheet2」からデータを 持ってくるというようにしたいのですが、うまくいきません。 コードに「300」といれても「003」と入れても同じものをひっぱてきます。 【A列に入れた式です】    (コード)      (A列) =IF(C5="","",LOOKUP(C5,Sheet2!$B$5:$B$20,Sheet2!$C$5:$C$20)) 【Sheet1】 コード   A     B      C      D 001   △△市  △△区  △△丁目   520   ◇◇市  ◇◇区  ◇◇丁目  ◇◇ 300   □□市  □□区  □□丁目 003   □□市  □□区  □□丁目 【Sheet2】 コード   A     B      C      D 300   ○○市 001   △△市  △△区  △△丁目 003   □□市  □□区  □□丁目 520   ◇◇市  ◇◇区  ◇◇丁目  ◇◇ あまりうまく説明できませんが、よろしくお願いします。

  • EXCELでLOOKUPがうまくいきません。

    EXCEL2000です。解説書を見ながら、検索関数のVLOOKUPと LOOKUP関数を比較していたのですが、VLOOKUPだとうまくいくのですが、LOOKUPだと望むべき答えが出ません。D列にC列の値をA1:B4の表から参照するという簡単なものです。 この式で、単純に答え(D欄)が1、2、3、4となるべきだと思うのですが・・以下の具合です。  A B C D 1○ 1 ○ =LOOKUP(C1,$A$1:$A$4,$B$1:$B$4)答4  2× 2 × =LOOKUP(C2,$A$1:$A$4,$B$1:$B$4)答2 3△ 3 △ =LOOKUP(C3,$A$1:$A$4,$B$1:$B$4)答3 4□ 4 □ =LOOKUP(C4,$A$1:$A$4,$B$1:$B$4)答2 どこがおかしいのでしょうか?よろしくご指導ください。

  • エクセルの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」関数などで代用はできないのでしょうか。  何卒ご教示よろしくお願いいたします。

  • エクセルのLOOKUP関数で画像を呼び出す

    データーベース上のセル内に画像を貼り付けてあります(1列ですが)。そのデーターベースの画像をLOOKUP関数で検索して抽出したいのですが、不可能でしょうか? また、何か違う方法でもかまいませんのでどうにか別シートに呼び出せませんか?

  • EXCELの関数探してます、lookupのような

    A列に1,10,20,30とありB列に200,300,400,500とある場合を想定します LOOKUP関数を使い、1のときは200、10の時300,20の時400のように値を出したいとします。つまり横の値。 LOOKUP関数を使うと2,3,4,5,6,7,8や11,12,13~19などの検査値で不完全一致の場合の値を出すとき、 2,3,4,5,6,7,8のときは1の値の200がでて、11,12,13~19の時は10の値の300が出ますよね ようはその値より上の値の数字をだしてくれるんです。14なら300,26なら400,39なら500のように 質問は下の値を出してくれるLOOKUPのようなものはありませんか?14なら400,26なら500のような

  • エクセルの関数の使い方(ルックアップ?)

    エクセルの関数の使い方(ルックアップ?) 例えばシートが2枚あります。 ・1シート目 A列に 1 2 3 4 5 と並べます。 ・2シート目 A列に 3 5 と並べます。 この時、2シート目のA列に該当する数字が1シート目のA列に存在した場合、 1シート目のB列(A列の横)に○又は1を入力したいです。 どうすればできるでしょうか?

  • excelのfind関数について

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

  • 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の欄などは文字列に設定してみたりもしております。  

  • エクセルの関数LOOKUPなどについて

    Office2007のエクセルに関して質問です。 関数の挿入のfxを押してLOOKUP関数を入れたときに 検査値をセル指定をし、そのセルの中の数字で検索したいのですが、なぜかできません。 直接数字を入れればできるのですが、それでは関数を使う意味がないので・・・。 fxでのLOOKUPのダイアログで検査値を セル指定をした場合="数値" 直接数値を入力した場合=数値 となるので、「""」がおかしいのかと思うのですが「""」を外すこともできず困っております。 初心者の質問で恐縮ですが、お答えいただければと思います。

  • IF関数とLOOKUP関数の組み合わせについて

    指定したセルと等しい数値(文字列?)をLOOKUP関数を使って別シートのデータベースを検索させて、そのシートに無ければまた別のシートのデータベースを検索させるものを作りたいのですが上手くいきません。 指定したセルが空白なら空白を返すように次のような感じで作っています。 IF(A1="","",IF(LOOKUP(A1,シート1!A1:A15,A1:A15)<>A1,LOOKUP(A1,シート2!A1:A15,B1:B15),LOOKUP(A1,シート1!A1:A15,B1:B15))) VLOOKUP関数でもやってみたのですがこちらも上手くいきません。 IF(A1="","",IF(LOOKUP(A1,シート1!A1:A15,A1:A15)<>A1,VLOOKUP(A1,シート2!A1:B15,2,0),VLOOKUP(A1,シート1!A1:B15,2,0))) ご指摘いただければ嬉しいです。

このQ&Aのポイント
  • Canon 複合機TR9530の印刷で用紙サイズの違いで印刷品質に違いが出ます。
  • エクセルでA4罫線付きのシートを印刷すると文字/罫線は黒くしっかりと印刷できますが、はがきサイズの領収書(Googleスプレッドシート)を印刷すると文字・罫線ともに薄くコントラストがない印刷になってしまいます。
  • 原因が何かよくわかりません。どなたかご教示願います。
回答を見る

専門家に質問してみよう