• ベストアンサー

配列数式を用いたINDEX関数について教えてください

INDEX関数について教えてください。 先日来、配列数式について教えていただいている者です。 相場の始値を表示させる式で、INDEX関数を使うと良いと教えていただきました。その際、同じ日にち内でデータを拾う形で質問し、回答していただきましたが、その後、自分で、異なる日にちも含めて表示させようとしたところ、「0」の表示となってしまいました。 式は日にちを変えただけなのに、なぜエラーとなってしまうのかがどうしても分かりません。どうか教えてくださいm(_ _)m 表を添付しましたが、式が小さくてみずらいかと思いますので、下記に表示させていただきます。 【2008/1/4の式】   INDEX($C$2:$C$13,MATCH(MIN(IF(($A$2:$A$13="2008/1/4"*1)*($C$2:$C$13<>0),$B$2:$B$13,"")),$B$2:$B$13)) 【2008/1/7の式】 INDEX($C$2:$C$13,MATCH(MIN(IF(($A$2:$A$13="2008/1/7"*1)*($C$2:$C$13<>0),$B$2:$B$13,"")),$B$2:$B$13))

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

  • ベストアンサー
  • wisemac21
  • ベストアンサー率39% (171/429)
回答No.2

Match関数の2番目の引数の範囲が始値全体になっているので当該日付の始値に絞り込む必要があります。 =INDEX($C$2:$C$13,MATCH(MIN(IF(($A$2:$A$13=E2)*($C$2:$C$13<>0),$B$2:$B$13,"")),(($A$2:$A$13=E2)*($C$2:$C$13<>0)*$B$2:$B$13))) で Ctrl + Shift + Enter で確定 式に日付を入力するのではなく、E列に入力した日付を使うようにしました。

colnago98
質問者

補足

さっそくのご回答ありがとうございます! おっしゃるとおりに入力したところ、正しい数値が表示されました (^-^) ところが、データを1月8日・9日と増やしたところ、最初に表示されていた、1月4日のデータが変わってしまいました。増やしたデータを含め 1月7日に関しては正しい答えを出しています。確認したところ、データは新しく増やした、1月9日の9:05のデータを取ってきているようです。どうしてこうなってしまうのか、さっぱり見当がつきません。 別件の質問として、「INDEX関数について再度質問させてください」(質問NO.4704271)を出させていただいております。たいへんお手数と存じますが、ご確認の上、アドヴァイスいただけると助かります。どうかよろしくお願いいたしますm(_ _)m

その他の回答 (2)

noname#204879
noname#204879
回答No.3

E列に日付を入力しているのならそれを使わない手はありません! それから、計算には支障ないけど、無闇矢鱈に $ を付け過ぎです。 F2: {=INDEX(C$2:C$13,MATCH(E2+MIN(IF((A$2:A$13=E2)*(C$2:C$13<>0),B$2:B$13,"")),A$2:A$13+B$2:B$13))}   ($ は必要最小限にしています)

colnago98
質問者

お礼

お礼が遅れて申し訳ありません! E列を利用することは気がついていませんでした。 確かにそちらの方が使いでがいいですね。 助かりました。 どうもありがとうございますm(_ _)m

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

「0」は、1月7日分の最少始値の時刻を「9:00」で抽出、この値で検索すると1月4日分を先に見つけるためです。 安直ですが、データ配列で日付・時刻を同一列にしないと難しいと思われますが如何でしょうか。

colnago98
質問者

お礼

お礼が遅れて申し訳ありません! 詳しい解説ありがとうございましたm(_ _)m 何とか表が完成しました。 何度も回答いただき、ありがとうございました(^-^)

関連するQ&A