- ベストアンサー
関数の勉強中ですが
=IF(ISNA(MATCH(B2+90,D3:D366,0)),"",INDEX(D3:E366,MATCH(B2+90,D3:D366,0),2)) 以上の関数の解説をしていただきたいです? 解説の内容までは強要できませんが、できれば左から順番に物語り的に解説していただけたら幸いです。 宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
MATCH(B2+90,D3:D366,0) これは検索関数ですね。B2に90を足した値と同じ数値がD3:D336にあれば D3を1とした行数を、ない場合はエラーとなります。 この結果をISNA関数で捉えるわけなので 数値が存在すれば偽、存在しなければ真になります。 数値が存在しない場合はIF文で""を表示(つまり見かけは非表示)、 数値が存在しない場合はINDEX関数の結果を返します。 INDEX(D3:E366,MATCH(B2+90,D3:D366,0),2) こちらはD3:E336の範囲から指定された行・列のセルの値を表示します。 列番号が2となっているのでE列のMATCH関数の結果(D列がB2+90と同じ値)の行の値が表示されます。 ただ =IF(COUNTIF(D3:D336,B2+90),VLOOKUP(B2+90,D3:E336,2,FALSE),"") のほうがすっきりするような気がしますが... COUNTIFは範囲から特定の条件のセルの個数を表示します。 この場合はD3:D336にB2+90と同じ値があるか確認してます。 VLOOKUPは範囲の左端の列の値と検索値を検索して指定の列の値を表示します。 結果はINDEX(D3:E366,MATCH(B2+90,D3:D366,0),2))と同じになります。
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >できれば左から順番に物語り的に解説していただけたら幸いです。 それよりも、この作った人が、どうやって作っていったかの考える手順を示したほうが、興味あるのではないでしょうか? 着目する点は、ここ、IF 構文の偽の部分です。 つまり、作った人は、ここから作ったはずなのです。 だから、ここを分解していきます。 -------------------------------------------- ◎ INDEX(D3:E366,MATCH(B2+90,D3:D366,0),2) -------------------------------------------- ** INDEX(範囲,行番号,列番号) ということですから、範囲は分かっているし、列番号も決まっています。 そうすると、行番号だけが、設定によって変わるし、それを検索すればよいわけです。その検索方法として、VLOOKUP(LOOKUP)関数も思い浮かぶけれども、今回は、INDEX関数を選ぶことにしたわけです。 検索値が、何番目にあるのかを出す関数は、 MATCH(検査値,検査範囲,照合の型) ・検査範囲は、D列の[D3:D366] を検索します。 ・検索値は、B2 に、90 を足せば、検索できるようです。 それによって、何番目にあるのか出せます。 ・照合の型が、0 というのは、ちゃんと順番に並んでいない、ということになります。 これで、一応、数式の分解は終わりました。 ----------------------------------------------- それを、INDEX関数に戻しますと、 INDEX(D3:E366,MATCH(B2+90,D3:D366,0),2) 範囲[D3:E366] から、D列の何番目を探し出して、その並びのE列の値を出す、ということになります。 これで、偽の部分は終わりました。 ------------------------------------------------ ところが、MATCH関数で、検索しても見当たらないことがあることが分かりました。 MATCH(B2+90,D3:D366,0) どうやら、ここでエラーが出ます。 #N/A そこで、そのMATCH関数が、エラーを出すときは、空白にしたい、ということで、 (MATCH(B2+90,D3:D366,0)が、エラーになる時は、「真」として、空白値[""](長さ0の文字列と呼びます)を入れてあげます。#N/A に対応するのは、ISNA という関数を選びます。 註:本当は、ここは、単純にISERROR の方がよいかもしれません。MATCH関数は、#N/A だけがエラーではないからです。 そうすると、 =IF(ISNA(MATCH(B2+90,D3:D366,0)),"",INDEX(D3:E366,MATCH(B2+90,D3:D366,0),2)) という数式が出来上がります。 ------------------------------------------------- このようにして、たぶん、他の人も数式を作るときに、同じように考えるはずです。左から書いていくわけではないのですね。実は、ふつう、誰も、エラー処理に対して、選択や迷いというのがあります。そこに、経験的な差が出てくるものなのです。 心臓部は決まっても、ほころび(エラー)を見せないように、少しだけ、飾りつけが必要で、これしかない、というわけではないのが普通なのです。