• ベストアンサー

エクセルのINDEX(MATCH)関数

エクセル2010で、INEX関数とMATCH関数を組み合わせて、表の交点のセルの値を求める式を作ったのですが、列方向に使用する器具をNo1、No2、・・・としたのですが、No9までは正しく検索できるのですが、No10以降になると、No1の値を参照してくることに気付きました。 ちなみにNo20、No21はNo2の行を、No30台はNo3の行を参照してくる事が分かりました。 そこでNoを取って単に数字だけにするとちゃんと11、22,、33に該当する行を正しく参照することも分かりました。 原因は何となく分かる(最初の3文字目までで検索する)のですが、対策はどうすれば良いのでしょう?

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

  • ベストアンサー
  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.6

>どちらにしても、bunjiiーさんが嘘でしょう、と言われるので確認のために同じ表を作成して確認しましたがやはりNo11、No23、No34等は、No1、No2、No3に相当する行の値を引っ張ってきます。 この結果を添付したかったのですが。。。。 当方で検証した結果を画像で提示します。 あなたが提示された数式では検索範囲が狭すぎますので当方では広げました。 K2=INDEX($C$3:$H$49,MATCH(J3,$B$3:$B$49),MATCH(J4,$C$2:$H$2)) K3=MATCH(J3,$B$3:$B$49) K4=MATCH(J4,$C$2:$H$2) No11で検索するとMATCH関数の返り値はあなたが言うように1になります。 しかし、No23で検索するとMATCH関数の返り値は23になり、あなたが言う2にはなりません。 また、No34で検索するとMATCH関数の返り値は34となり、あなたが言う3にはなりません。 あなたが提示された数式の検索範囲にはNo23、No34が存在していませんので1番近い値のNo2やNo3の行を返してきたものと思います。 検索値と同じ値が有ればそれを探して返すはずです。 但し、前の回答で言いましたように昇順でソートしていることが条件になります。

akira0723
質問者

お礼

毎度のことですが当方のウッカリや表現不足でお手数をお掛けしてしまいました。 今回もおかげさまで解決出来ました。

akira0723
質問者

補足

何度もお手数をおかけし恐縮です。 当方も添付と全く同じ表を作って確認しているのですが、検索Noとアルファベットはリストから選択するようにしてあった表なので検索値が無い筈はないと思うのですが・・・・ 再度確認しましたがやはりおかしいのですが、検索方法を0(完全一致)にすれば確実に正解が出ることが分かりましたので、申し訳ありませんが本質問はここまでとさせていただきます。

その他の回答 (5)

  • msMike
  • ベストアンサー率20% (363/1775)
回答No.5

》 Noを取って単に数字だけにするとちゃんと 》 11、22,、33に該当する行を正しく参照する 》 ことも分かりました。 》 対策はどうすれば良いのでしょう? 「該当する行」の書式を "No"G/標準 または "No."G/標準 に設定し、数値 1、2、3、…、11、22、33 を入力したら如何?

akira0723
質問者

お礼

いつもお世話になります。 早々のご回答ありがとうございました。 ご提案を試してみて正常に検索できることを確認しました。 この方法でも解決できること、参考になりました。 但し、当方このような書式設定はあまり使ったことが無い(思いつかない)ので、オーソドックスに検索方法(完全一致)を入れて対応することにします。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.4

>列方向に使用する器具をNo1、No2、・・・としたのですが、No9までは正しく検索できるのですが、No10以降になると、No1の値を参照してくることに気付きました。 逆ではないでしょうか? No2~No9までは正しい位置を返さないのではないでしょうか? No.01~No.99のように桁数を合わせれば正常に目的のセル位置が返るでしょう。 但し、検索方法を0にすれば正しいセル位置が返って来るはずです。 MATCH関数は検索値が文字列のとき検索方法を省略すると文字コード順に昇順でソートされていない検索範囲からは目的通りの値が得られないようです。 >ちなみにNo20、No21はNo2の行を、No30台はNo3の行を参照してくる事が分かりました。 嘘でしょう。 No1~No99と仮定して列方向に文字列を配置してあるのでしたら「No20、No21はNo2の行を」では辻褄が合いません。「No20、No21はNo2の列を」であれば文言としては矛盾しませんが返って来る値は違います。 No2が検索値のときNo20の1つ手前の列位置を返すはずです。 MATCH関数で検索範囲が文字コード順の配置のときは近似検索が可能です。(検索方法を無指定または1のとき昇順でソートしてください) 検索方法を0に指定すると完全一致のセル位置を返しますが一致する値が無いときは#N/Aエラーが返ります。 A1~W1にNo1、No2、・・・・、No25、No26と配置されている範囲を対象にA2へ検索値としてNo2と入力してB2へ次の数式を設定するとNo19と入力されたS1の列番号である19が返ります。 =MATCH(A2,A1:Z1) → 19 しかし、検索方法の0を指定した次の数式ではNo2と入力されたB1セルの列番号の2が返ります。 =MATCH(A2,A1:Z1,0) → 2 尚、A1~Z1へNo1、No10、No11、・・・、No19、No2、No20、・・・のように昇順で配置されていれば前者の数式でもNo2が入力されているL1セルの列番号の12が返ります。 文字列の大きさは文字コード(数値)と文字列長で判断するようです。

akira0723
質問者

お礼

毎度お手数をおかけしております。 解説非常に良く分かり、勉強になりました。 (当方の現象と少し違っているように思う部分も有りますが)

akira0723
質問者

補足

毎回つたない文書の為にお手数をおかけする事になり恐縮です。 表を添付しようとjpgファイルにしたのですが、先日より何故かファイルが添付されなくなってしまったので文言だけの質問になってしました。 先ずは表の「列方向に・・」という意味は縦方向にB3にNo1、B4にNo2・・です。 行(横)方向には、C2にA、D2にB、E2にC、F2にDと入力してあります。 どちらにしても、bunjiiーさんが嘘でしょう、と言われるので確認のために同じ表を作成して確認しましたがやはりNo11、No23、No34等は、No1、No2、No3に相当する行の値を引っ張ってきます。 この結果を添付したかったのですが。。。。 式は下記の通りです =INDEX($C$3:$F$15,MATCH(C17,$B$3:$B$15),MATCH(C18,$C$2:$F$2)) 尚、皆様ご指摘の「照合の種類」を入れるのが正しいやり方だと思いました。 この関数の組合せは過去に何度か使っているのですが、これまでは「照合の種類」は入れたことが無く、問題も無かったので気付きませんでした。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

MATCH関数の解説にあるように、第3引数の「照合の型」について 省略すると、「1」の扱いなので、「0」を明確に指定してはどうですか。 ーー MATCH関数の解説から 1 または省略 MATCH 関数は、検査値以下の最大の値を検索します。検査範囲の引数の値は、昇順の並べ替えでは、1 ~ 9、A ~ Z、あ~ん、FALSE ~ TRUE の順に配置されます。 0 MATCH 関数は、検査値と等しい最初の値を検索します。検査範囲の引数の値は、任意の順序で指定できます。 -1 MATCH 関数は、検査値以上の最小の値を検索します。検査範囲の引数の値は、降順の並べ替えでは、9 ~ 1、Z ~ A、ん~あ、TRUE ~ FALSE の順に配置されます。 本件原因が、この問題でなければ、すみません。

akira0723
質問者

お礼

ご回答、解説ありがとうございます。 本件の原因はまさにご指摘の通りでした。 過去にも検索条件を入れずに混乱した経験が有り、学習能力が低いことを反省しております。

  • Nobu-W
  • ベストアンサー率39% (725/1832)
回答No.2

http://office-qa.com/Excel/ex48.htm こんなんとか・・・ https://allabout.co.jp/gm/gc/297772/ こんなの・・・ 参考になりませんか? ><

akira0723
質問者

お礼

早々のご回答ありがとうございます。 リンク非常に参考になりました。 勉強します。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

>ちなみにNo20、No21はNo2の行を、No30台はNo3の行を参照してくる MATCH(検査値, 検査範囲, [照合の型]) [照合の型]を1で設定しているのでは 0で設定し直してみてください。

akira0723
質問者

お礼

早々のご回答ありがとうございました。 ご指摘の通りで解決しました。 過去に何度かこの関数の組あわせは使ており、「照合の型」はとりあえず省略してもうまく行っていたので気付きませんでした。 これまでは全く違う文字列だったので問題はなかっただけですが。

関連するQ&A

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

    Windows Xp エクセル2003を使用しています。 業務で使用している集計表ファイルがあり、別ファイルにデータを反映させたいのです。 集計表のセルA1を検索値としセルB1とセルB2の値を返す関数はないでしょうか? 集計表のつくりは約1000行あり、セルA3を検索値としてセルB3の値を返す行もあります。 セルA5を検索値とし、B5、B6、B7、C5,C6の値を返す行など様々です。 こういったデータがランダムで表になっています。一つの検索値に対して、検索値の水平方向はvlookup関数で表示出来たのですが、 一つの検索値で2つの値を返す関数が分からず、困っています。 1行下や2行下を検索する関数も参考にしたのですが、集計表のつくりがランダムの為、検索してほしくないものまで表示されてしまうなど、ウマクできませんでした。 宜しくお願いします。

  • Excelの関数で

    お願いします。 Index関数とMatch関数を使用して表の中の値を求めようとしましたが、 検索行が複数あるため、うまくいきません。 検索する列は1列(a,b,c)ですが、検索行(あ、い、う~)が複数になっています。 更に空白もあります。 こんな感じ↓です。 ---------------------   あ  い   う   え      お   か ---------------------    a  10  20  30 b  40  50  60 c  70  80  90 --------------------- こういった場合にはどんな関数を使って一致する値を求めたら良いのでしょうか? 大変困っております。よろしくお願いします。

  • エクセルのMATCHで拾った数字を使って、E列を参照したいのですが

    タイトルのとおりです。 MATCHでデータの該当行を取り出しました。 その数字を使ってE列のセルの中身の数字を取り出したいのです。 通常参照するだけなら、+A1とかにすれば、 A1の数字が得られますが、このように間接的な方法でセルの内容を参照する場合はどのようにしたらよいのでしょうか?

  • ExcelでIndexとMatch関数が使いこなせない

    すみません、カテゴリを間違えてまして、再度投稿いたします。 有給管理表をExcelで作成しています。 シート1に社員のデータ表を入力してあり、 シート2には有給が発生する社員へ有給の残日数や 付与日に関するお知らせの案内状をB5サイズで作っています。 シート1のデータを拾って、シート2の案内状へ反映させる際、 付与日や残日数などはVlookupで参照できるのですが、 社員番号は退職した社員がいるため番号が飛んでいて うまくできません。 IndexやMatch関数を使えばなんとかなりそうだと思い やってみましたが、VALUE!が表示されてしまいます。 どなたかうまくいく関数を教えて頂けますでしょうか? シート1のデータ例  A列   B列   C列   D列    E列 社員番号  氏名  入社日  付与日   付与日数 100001   くま  2007/4/1  2007/10/1  10 100003   たぬき 2007/5/1  2007/11/1  10 100005   うさぎ 2007/5/10 2007/5/10  10  100010   きつね 2007/6/1  2007/12/1  10 シート2(例)ページ1    B列   C列 B1 社員番号  100001←ここに式を入れたい B2 社員氏名  くま  さん(vlookupでC1を拾ってくる) B4 あなたの有給付与日は  2007/10/1 です。付与日数は 10 日です・・・・・・。 シート2 ページ2 B30 社員番号  100003 (←ページ1の次の該当者を拾いたい) B31 社員氏名  たぬき  さん B33 あなたの有給付与日は 2007/11/1 です。 付与日数は 10 日です・・・・・・。 このような感じです。社員番号が飛んでいても下の行を拾っていくような関数はありますでしょうか?(Index、Match関数以外でも結構です)

  • エクセルの関数についての質問です

    エクセルの関数についての質問です 独学でエクセルを勉強しておりますが以下のような表の中から該当する値を返すことは可能でしょうか。 方法はどのようなものでもアドバイスをいただければトライしてみようと思います。 以下のような元データの中から、行の条件と列の条件を満たすセルに表示されている値(%)を 表示させる関数。そもそも関数での解決は不可能かもしれませんが、もし方法があれば ご教示お願いします。       0000~1000  1001~2000  2001~3000 000~100    5%      5%      4% 101~200    4%      4%      3% 201~300    3%      2%      1% 行と列の値を入力するとその交差した値が表示させたい。 例)行の検索したい数値を110、列の検索したい数値を1200と指定した場合、表示させたい数値は"4%"。 ぜひぜひよろしくお願いいたします。

  • Excelの関数について

    エクセルで表を作っているのですが、関数についてひとつ質問です。 VLOOKUPなどの検索関数で、検索値として参照する値にひとつのセルの中の一定の文字列を指定したい場合はどうすればよいのでしょうか? MID関数で抽出しようとしたのですが、どうも関数で抽出した値はエラーが出るようで・・・。どなたかわかる方いらっしゃったら回答お願いします。

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

    エクセルのMATCH関数を使って“E18:E23”の表から125以下の1番目の値相当する”“E11:E16”の値を取り出す計算式を作成しています。(“E18:E23”表のそれぞれの行の数値が“E11:E16”の表のそれぞれの行の数値のリンクしています。そのときの数式が“=INDEX(E11:E16,MATCH(125,E18:E23,1),1)”です。この場合は上手くいくのですが、条件を“125以上の1番目の値相当するを作成して、”=INDEX(E11:E16,MATCH(125,E18:E23,-1),1)“の様にMATCHの式の最後を-1にするんですが、”#N/A“のエラーメッセージが表示します。どうすればいいのでしょうか?(*なお表“E18:E23”は数値が小さい順ですが、表“E11:E16”そうとは限りません)  それと、125以上の1番目だけでなく、2番目、3番目を拾い出す計算式はないでしょうか? 宜しくお願いします。関数に関しては初心者でいろいろ検索しましたが、ぴったり来ません。

  • excelの関数について

    いつもお世話になっております。 早速質問です。     A   B   C   D   E 1    5  4/1  12:00  4/1  12:02 2    3 4/1   11:05  4/1   12:07 3    4/1  12:03  4/1   12:32 4 5 この時に、A3に関数を入れて数字が自動で入るようにしたいです。 入れたい数字ですが、B・C日時データの一つ前の日時データをD・Eの日時から検索し、その行のA列の数字を返したいです。 例えば、この表だと、1行目の「5」が入ることになります。 INDEX,MATCH等を使えばできそうな気もするのですが、よくわかりません。参照が二か所になることでどうやればいいか ご教授いただければ幸いです。よろしくお願いします。

  • (MS-Excel)複数の条件にマッチする複数のセルを配列?で出力させ

    (MS-Excel)複数の条件にマッチする複数のセルを配列?で出力させたい。 たとえば、条件1=A列で値が数値であるセルと、条件2=条件1でマッチしたセルと同じ行でC列で値が「その他」という文字列であるセルを検索させます。 そして、A列でマッチしたセルの値をE列に出力させて、C列でマッチしたセルの値をF列に出力させたい、というような感じです。 VLOOKUP関数などで、{配列}を使うなどすれば可能だと思って試行錯誤したけどダメでした。 なお、データベース関数のように条件セルなど作業セルが必要な方法は使いたくないです。 よろしく、お願いします。

  • エクセル関数の使い方

    関数を熟知しておりませんので教えて下さい。 元になる表の1行目にある値(A1)を読み込んで2行目(A2)にある値を検索することが出来ません。 VLOOKUPで列の検索は出来るのですが、行の検索は出来ないのでしょうか?

専門家に質問してみよう