• ベストアンサー

エクセルで抽出した結果の最早時間取り出し

エクセルの表において、該当の日付の中から、一番早い時間を抽出したいのですが、どういう関数を使ってどう書けばいいのでしょうか。 具体的には、以下のようにA列に日付があり、1行目に該当日付(抽出日付)が あるとして、2行めに抽出結果を出したいです。 計算結果 (1) "" (2) 15:00 (3) 07:29 (4) 15:45 (5) 03:45 以上、よろしくお願いします。

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 配列式やSUMPRODUCT関数、作業列などは使うまでもありません。  まず、B2セルに次の関数を入力して下さい。 =IF(ISNUMBER(1/DAY(B$1)),IF(COUNTIF($A:$A,"<"&INT(B$1)+1)-COUNTIF($A:$A,"<"&INT(B$1))>0,MOD(SMALL($A:$A,COUNTIF($A:$A,"<"&INT(B$1))+1),1),""),"")  次に、B2セルの書式の表示形式を[時刻]として下さい。  そして、B2セルをコピーして、C2から右方向に向かってコピーして下さい。  これで、1行目で指定している日付の中で最も早い時刻が、2行目に表示されます。  尚、この方法では、3行目以下に○を入れなくとも正常に動作致します。  もし、3行目以下に○を表示させたい場合には、まず、B3セルに次の関数を入力してから、B3セルをコピーして、A列よりも右側にある列の3行目以下のセル範囲に貼り付けて下さい。 =IF(INT($A3)=INT(B$1),"○","")

その他の回答 (5)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.6

 回答:No.4です。 >質問には、省いてましたが、ちょっとB2を時刻で設定はできない(文字+時刻で表示させる)ため、 という事は、回答:No.4の日付のデータを含まない時刻のみのシリアル値データでもダメという事ですね。  それでしたら、B2セルに入力する関数を次の様に変更して下さい。 =IF(ISNUMBER(1/DAY(B$1)),IF(COUNTIF($A:$A,"<"&INT(B$1)+1)-COUNTIF($A:$A,"<"&INT(B$1))>0,"「付け加えたい文字列」"&TEXT(SMALL($A:$A,COUNTIF($A:$A,"<"&INT(B$1))+1),"hh:mm"),""),"")  それから、確認しておりませんでしたが、もしかしますと、1列目に入力されている日付や、A列に入力されている日時もシリアル値ではなく、文字列データなのでしょうか?  もし、それらがシリアル値のデータではなく、文字列データだとしますと、計算処理が面倒なことになり、コンピュータに要求される負荷が大きくなり、処理時間が余分に掛かる事になりますから、「1列目に入力されている日付や、A列に入力されている日時」に関しては、文字列データではなく、シリアル値としての日時データで入力された上で、上記の関数の様に「文字+時刻で表示させる」ためのセルに入力する関数の所で、文字列データに変換する様に工夫された方が良いと思います。  それから、通常では考え難い状況ですが、もしも、どうしても1列目に入力されている日付や、A列に入力されている日時をシリアル値ではなく、文字列データで入力しなければならない場合には、それに合わせた関数を提示させて頂きますので、補足欄か或いは御礼欄等を使用されて、再度御相談下さい。  

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

 回答:No.4です。  済みません、○を入れるためにB3セルに入力する関数にバグがありましたので、次の関数に修正して下さい。 =IF(ISNUMBER(1/DAY($A3)/DAY(B$1)),IF(INT($A3)=INT(B$1),"○",""),"")  処で話は変わりますが、(4)に表示させねばならない「12月11日の中で最も早い時刻」は15:45ではなく、A9セルに入力されている01:45ではないでしょうか?

kyolly
質問者

お礼

ありがとうございます。 ご教示頂いた式を参考にしながらやってみます。 >処で話は変わりますが、(4)に表示させねばならない「12月11日の中で最も早い時刻」は >15:45ではなく、A9セルに入力されている01:45ではないでしょうか? はい、ご指摘の通り、01:45です。

noname#204879
noname#204879
回答No.3

添付図参照 B3: 数式 =IF(AND($A3>=B$1,$A3<B$1+1),$A3,"")   書式 "○" 此れを右方および下方にズズーッとドラッグ&ペースト B2: 数式 =IF(COUNT(B3:B14),MIN(B3:B14),"")   書式 hh:mm 此れを右方にズズーッとドラッグ&ペースト

kyolly
質問者

お礼

ありがとうございます。 一瞬、○とMIN(B3:B14)でなぜ最小がでるの?と思いましたが、 時間表示させるのではなく、○と表示させてるんですね。 ご教示頂いた式を参考にしながらやってみます。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! すでに回答は出ていますが・・・ 表内に「○」がなくても表示する方法です。 画像の「12月8日」はB列にあるとして、 B2セル(セルの表示形式は「時刻」)に =IF(SUMPRODUCT((INT($A1:$A1000)=B$1)*1),MIN(IF(INT($A1:$A1000)=B$1,$A1:$A1000)),"") これも配列数式になりますので、Shift+Ctrlキーを押しながらEnterキーで確定! B2セルを列方向にオートフィルでコピーしてみてください。m(_ _)m

kyolly
質問者

お礼

ありがとうございます。 質問には、省いてましたが、○がなくても表示させる方法は有効かと思ってます。 ご教示頂いた式を参考にしながらやってみます。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

B2の書式を時刻にして↓の式を入れてCtrl+Shift+Enterで配列式として確定。 =IF(COUNTIF(B3:B15,"○")=0,"",MIN(IF(B3:B15="○",$A3:$A15))) あとは右にコピー。

kyolly
質問者

お礼

ありがとうございます。 質問には、省いてましたが、ちょっとB2を時刻で設定はできない(文字+時刻で表示させる)ため、 ご教示頂いた式を参考にしながらやってみます。