【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集

業務で使用しているファイルにINDEXとMATCHを組み合わせた関数を使っています。
=INDEX(Sheet4!E2:E999,MATCH(Sheet1!F17,Sheet4!A2:A999,0)+2,0)
です。
教えて頂きたいことは、
・上記の関数の説明(詳細)この関数はどういったしくみになっているのか。
・セルが空白のときに#N/Aを表示させないこと。
・完全一致型にしたいこと。
この3点を教えて頂けませんか?よろしくお願いします。

A 回答 (3件)

こういったQAサイトでお尋ねになるのもいいのですが、インターネットでどんどん検索しましょう。

無数に情報があふれていますよ。ITが得意になるには、ネットでいろいろ調べることです。


●関数や数式全体の仕組み。例えばこんな表があるとき。

  A   B   C
1    年齢 性別
2 鈴木  35  男
3 田中  24  女

同じシートのどこかのセルに「=index($B$2:$C$3,2,1)」と入力すると、(A1:C3ではなく)B2:C3という表の、2行1列の位置にあるデータである「24」を取ってきます。

なお「=index($B$2:$C$3,2,0)」と入力すると、エラーです。「0」は、列を未指定なのと同じなので、質問文の式ように検索する範囲がもともと1列(E列)のみの範囲でない限り、省略できません。上の例では2行2列の範囲だから、「24」と「女」の2つのデータが該当してしまうので、エラーです。

また、同じシートのどこかに「=match("田中",$A$2:$A$3,)」とか、あるいは「=match("田中",$A$2:$A$3,0)」でも同じですが、入力すると、「2」が算出されます。これは、A2:A3という範囲の中で、「田中」は何番目のセルにあるのか?というのを調べた結果です。

MATCH関数の引数0は、用途によっては1や-1を指定することもでき、完全一致ではない近い値のものを拾って、それが何番目なのかを求めることになります。

上の例ではMATCH関数による計算結果が「2」になるわけだから、INDEX関数の「2」という引数を、「=match(…」という式で書き換えてあげることができそうですね?そうすれば、質問文のようなINDEX(MATCH)という式ができ上がります。INDEX関数の「1」も書き換えれば、INDEX(MATCH,MATCH)という形で使われることもありそうですね?

●空白の場合にエラー回避

Excel2007以降では、No.2さんのおっしゃるIFERROR関数が便利です。式が短くて済みます。昔のバージョンでは、No.1さんのようにIF関数と「""」で場合分けし、「""」という結果を返すようにすればいいですね。または、空白では結果がゼロになるような式にしておいて、セルの書式や、シート全体のオプションでゼロだけ表示させないようにすることもできます。

●完全一致型にしたいこと

No.1さん、No.2さんのご説明どおりです。


ところで、質問文の数式が入力されているシートは、もしかして「Sheet1」だったりしませんか?その場合は、式中の「Sheet1!」という部分は不要なので、削っても大丈夫です。シートのタブをマウスでクリックすると、この部分が自動的に入力されるのです。
    • good
    • 0

INDEX関数ではシート4のE2セルからE999セルの間でMATCH関数で求められた値の行を検索しその行よりも2行下の行にある値を表示しなさい。

という意味です。INDEX関数で引数に0が使われていますがこれは0行問うことですね。すなわちE列の値を表示しなさいということで、通常はE2:E999と範囲の指定が有る場合には0列は必要はありませんので、引数に0は必要ありません。
所でMATCH関数ですがこれはシート4のA2セルからA999セルの間でシート1のF17セルのデータに一致する行を求めなさいということで、このMATCH関数の引数に0が最後についているのは完全に一致する行を求めなさいということです。
なお、エラー表示を解消するためにはお示しの式を次のようにします。

=IFERROR(INDEX(Sheet4!E2:E999,MATCH(Sheet1!F17,Sheet4!A2:A999,0)+2),"")

古いエクセルのバージョンでしたら

=IF(ISERROR(INDEX(Sheet4!E2:E999,MATCH(Sheet1!F17,Sheet4!A2:A999,0)+2)),"",INDEX(Sheet4!E2:E999,MATCH(Sheet1!F17,Sheet4!A2:A999,0)+2))
    • good
    • 0

>説明



MATCH(Sheet1!F17,Sheet4!A2:A999,0)
マッチ関数でF17と「完全一致するセル」がA2から数えて何番目にあるか調べる

+2
その2つ下の番号を計算する

INDEX(Sheet4!E2:E999,
E2から数えてその番目の値を取ってくる。




>空白の時#N/A

=IF(Sheet1!F17="","",INDEX(…、MATCH(…)+2))


>完全一致

既にそうなっています。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報