• ベストアンサー

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など)以外は、式に変わりがありません。なぜこのようになるのでしょうか?

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

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

(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で式を確定させて、下にコピー

colnago98
質問者

お礼

お礼が遅れて申し訳ありません! 詳しい解説ありがとうございましたm(_ _)m なんとか表が完成しました(^-^)

その他の回答 (1)

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.2

=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 と別記したらいいです。

colnago98
質問者

お礼

お礼が遅れて申し訳ありません! 詳しい解説ありがとうございましたm(_ _)m もっと勉強が必要だと痛感しました(^^;

専門家に質問してみよう