- ベストアンサー
INDEX関数について再度質問させてください
先回、INDEX関数について相談し、その式を教えていただきました。例示した表にその式を当てはめたところ、正しい答えが表示されましたが、同じ形式でデータ数を増やしたところ、正しい答えを出していた欄の数字が異なってしまいました。それ以外の欄の答えはあっています。どうしてこのようになってしまうのかがわかりません。どうかよろしくお願いいたします。 表を添付しましたが、式がみずらいと思いますので、例示します。 (1月4日の式) INDEX($C$2:$C$25,MATCH(MIN(IF(($A$2:$A$25=E2)*($C$2:$C$25<>0),$B$2:$B$25,"")),(($A$2:$A$25=E2)*($C$2:$C$25<>0)*$B$2:$B$25))) (1月7日の式) INDEX($C$2:$C$25,MATCH(MIN(IF(($A$2:$A$25=E3)*($C$2:$C$25<>0),$B$2:$B$25,"")),(($A$2:$A$25=E3)*($C$2:$C$25<>0)*$B$2:$B$25))) 8日・9日の式は、文字数の関係で表示できませんが、参照欄(E2/E3など)以外は、式に変わりがありません。なぜこのようになるのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
(1月4日の式) =INDEX($C$2:$C$25,MATCH(MIN(IF(($A$2:$A$25=E2)*($C$2:$C$25<>0),$B$2:$B$25,"")),(($A$2:$A$25=E2)*($C$2:$C$25<>0)*$B$2:$B$25),0)) ★MATCH関数の、=MATCH(検査値,検査範囲[,照合の型])の照合の型を省略しているのを、0 を入力するようにしてはいかがでしょう ★MATCH関数の照合の型については、ヘルプでお調べください ◆なお、この式は「配列数式」ですね ◆また、この式はこれでもいいですね (1月4日の式) =INDEX($C$2:$C$25,INDEX(MATCH(0,0/(($A$2:$A$25=E2)*($C$2:$C$25<>0)*ROW($A$2:$A$25)),0),)) ★Enterで式を確定させて、下にコピー
その他の回答 (1)
- web2525
- ベストアンサー率42% (1219/2850)
=INDEX(値段,MIN(IF((日付=E2)*(値段<>0),ROW(日付),""))-1) 計算式が見にくいので範囲に名前をつけてみました ちなみに質問者の計算式を範囲名で表すと =INDEX(値段,MATCH(MIN(IF((日付=E2)*(値段<>0),時間,"")),((日付=E2)*(値段<>0)*時間),0)) こんな感じに 違いがわかりますでしょうか? MIN(IF((日付=E2)*(値段<>0),時間,"") 条件に合う時間のうち最小を求めて MATCH(MIN(IF((日付=E2)*(値段<>0),時間,"")),((日付=E2)*(値段<>0)*時間),0) その時間データのセル位置をさらに条件を付けてMATCH関数で求めているようですが MIN(IF((日付=E2)*(値段<>0),ROW(日付),"")) 直接行番号を求める事で、そのままINDX関数の行番号を指定できます =INDEX(値段,MIN(IF((日付=E2)*(値段<>0),ROW(日付),""))-1) 最後の-1の部分でINDX関数での位置と実際のセルの行番号の差を修正します。 長い計算式で範囲の参照が多いときは範囲に名前を付けると ・式が見やすくなる ・範囲が変化した場合でも、名前の定義を変更するだけで計算式の変更が必要ない などの利点がありますので活用した方がいいですよ。 範囲名で計算式を書いて質問する場合は [日付]=A2:A25 [時間]=B2:B25 [値段]=C2:C25 と別記したらいいです。
お礼
お礼が遅れて申し訳ありません! 詳しい解説ありがとうございましたm(_ _)m もっと勉強が必要だと痛感しました(^^;
お礼
お礼が遅れて申し訳ありません! 詳しい解説ありがとうございましたm(_ _)m なんとか表が完成しました(^-^)