- ベストアンサー
エクセルの関数について
初めてこちらで質問させていただきます。エクセルの詳しい方ご教授お願いいたします。 行いたいことは、18:00~18:30まで社内にいる人数を把握したいです。 エクセルで関数を組みましたが0になってしまいます。 現在A列に名前、D列に退勤時間があります。 組んだ関数は=COUNTIFS(D1:D2443,">=18:00",D1:D2443,"<=18:30")です。D列には18:20などの退勤時刻と、有給、欠勤などは0にしています。関数の組み方や、違う関数の方が良いなどアドバイス頂ければ幸いです。よろしくお願い申し上げます。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
D列の 18:20 等が、時刻でなく文字列として入力されているからかもしれません。 私の環境では、ご質問中に書かれている式を貼り付ければちゃんとカウントしましたので。
その他の回答 (6)
- NuboChan
- ベストアンサー率47% (790/1658)
- imogasi
- ベストアンサー率27% (4737/17069)
>初めてこちらで質問させていただきます ということは、エクセルのシートで、時間(刻)をうち込んだ時に、エクセルはどういう形で、データとして保持しているか知らないのだろう。この点は、教えてくれる指導者が必要だと思う。 (小生は、毎度同じことを言っているが、このタイプの質問が跡を絶たない。) このやり方は、日付・時刻シリアル値といって、1日の長さ(24時間)を1として、 1時(間)は1/12で、夕方6時(18時。6時と言ってはダメ)は18/24(=0.75)であらわす、表現法で保持している。 この方式は、突飛な方法で、自ずと察することができるというモノではない。 ーー まず時間の流れ(例えば左から右への)の1本の数直線で考えるとわかりやすい。 今回は同一日を考えていると思うので、1日分の、1の長さの数直線の部分を考える。 だから18時以後は、その時刻の点が、18時の点より右(=数字目盛では0.75より大)であるかどうかを判別することになる。 18:00~18:30までなら、18時30分は、=0.75+(30/(24*30))=0.791...だから、退出時刻がx、が 0.75<x<0.791...かどうかを判別すればよい。 エクセル関数に「○から・△まで」のBETWEENのような関数がないので、AND関数を使って 2式を組み合わせる。判別はIF関数を使うので、=IF( AND(-1<A1,A1<2) , 1 , 0) のような書き方で、=IF(AND(x>「から時刻のシリアル値」.x<「まで時刻のシリアル値」⦆のような書き方になる。 開始期の18時を「含むか」どうかで演算子「=>」を使う。終期の18:30も同じく、「<=」を使う。 === もう一つ問題は、エクセルのシートのその時刻を入れたセルのデータが、人間の入力データだとして、18:00のように半角数字と、半角記号の「:」で入力されたものかどうかだ。 文字列で「18時00分」などと入力されていると話はガラリと変わる。日付シリアル値がセルにセットされるのではないからだ。 = エクセルでは日付・時刻は、セルの値を日付シリアル値に統一して、エクセルの日付・時刻のすべての関数を使う。日付時刻の表示形式を使うときも同じ。
- f272
- ベストアンサー率46% (8533/18270)
> エクセルで関数を組みましたが0になってしまいます。 エクセルの関数の問題ではなく,D列に入力している退勤時間の問題です。D列に入力されているデータの書式を標準にすると,どうなりますか?例えば0.75のような数値になりますか?それとも45034.75のような数値になりますか?それとも18時20分のような文字列ですか? =COUNTIFS(D1:D2443,">=18:00",D1:D2443,"<=18:30") で想定しているのは整数部のない数値です。
- aokii
- ベストアンサー率23% (5210/22062)
=COUNTIFS(D1:D2443,">=18:00")
お礼
hiro_1116様 ご回答いただきありがとうございました。 仰っていただいていたように文字列になっておりました。 簡潔なご回答で解決できましたこと感謝いたします。 また、この件に関してお時間いただき回答いただきました皆様この場をお借りして感謝申し上げます。 ありがとうございました。