• ベストアンサー

エクセルの関数について

初めてこちらで質問させていただきます。エクセルの詳しい方ご教授お願いいたします。 行いたいことは、18:00~18:30まで社内にいる人数を把握したいです。 エクセルで関数を組みましたが0になってしまいます。 現在A列に名前、D列に退勤時間があります。 組んだ関数は=COUNTIFS(D1:D2443,">=18:00",D1:D2443,"<=18:30")です。D列には18:20などの退勤時刻と、有給、欠勤などは0にしています。関数の組み方や、違う関数の方が良いなどアドバイス頂ければ幸いです。よろしくお願い申し上げます。

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

  • ベストアンサー
  • hiro_1116
  • ベストアンサー率30% (2364/7656)
回答No.2

D列の 18:20 等が、時刻でなく文字列として入力されているからかもしれません。 私の環境では、ご質問中に書かれている式を貼り付ければちゃんとカウントしましたので。

mimiduku5504
質問者

お礼

hiro_1116様 ご回答いただきありがとうございました。 仰っていただいていたように文字列になっておりました。 簡潔なご回答で解決できましたこと感謝いたします。 また、この件に関してお時間いただき回答いただきました皆様この場をお借りして感謝申し上げます。 ありがとうございました。

その他の回答 (6)

  • NuboChan
  • ベストアンサー率47% (745/1583)
回答No.7

答えは既に出ていますが、VBAでの回答です。 Option Explicit Sub test() Dim tr As Range Dim k As Long For Each tr In Range("D2:D2443") If tr.Value >= 0.75 And tr.Value <= 0.770833 Then tr.Interior.ColorIndex = 27 End If If tr.Interior.ColorIndex = 27 Then k = k + 1 End If Next Range("F3") = k End Sub

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.6

>初めてこちらで質問させていただきます ということは、エクセルのシートで、時間(刻)をうち込んだ時に、エクセルはどういう形で、データとして保持しているか知らないのだろう。この点は、教えてくれる指導者が必要だと思う。 (小生は、毎度同じことを言っているが、このタイプの質問が跡を絶たない。) このやり方は、日付・時刻シリアル値といって、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分」などと入力されていると話はガラリと変わる。日付シリアル値がセルにセットされるのではないからだ。 = エクセルでは日付・時刻は、セルの値を日付シリアル値に統一して、エクセルの日付・時刻のすべての関数を使う。日付時刻の表示形式を使うときも同じ。

  • yossypop
  • ベストアンサー率30% (114/376)
回答No.5

回答者No.4です。 カウント対象の前後1分単位をカウントするかの検証ができていなかったので再度訂正分を添付しました。

  • yossypop
  • ベストアンサー率30% (114/376)
回答No.4

関数はこのページよりコピペで自分のExcelに貼付けました。 対象になる時間帯を「条件付き書式で塗りつぶし」と「カウント」しています。 条件付き書式も関数も問題なく算出しています。

  • f272
  • ベストアンサー率46% (8012/17126)
回答No.3

> エクセルで関数を組みましたが0になってしまいます。 エクセルの関数の問題ではなく,D列に入力している退勤時間の問題です。D列に入力されているデータの書式を標準にすると,どうなりますか?例えば0.75のような数値になりますか?それとも45034.75のような数値になりますか?それとも18時20分のような文字列ですか? =COUNTIFS(D1:D2443,">=18:00",D1:D2443,"<=18:30") で想定しているのは整数部のない数値です。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

=COUNTIFS(D1:D2443,">=18:00")

関連するQ&A

  • 残業人数集計のエクセル関数

    職場でエクセルを使用した事務仕事を任されはじめたのですが…エクセルを使いこなしているのか自信がありません(^^; エクセルで人別の退勤時刻の表をつくり(100人以上)、退勤時刻が規定時刻を超えた人、超えていないひとを集計する必要があります。現在は、超えている人、超えていない人の部分を数えて手入力しているのですが、定時を超えているかどうかを条件に合計に加えたり加えなかったりする関数はありますでしょうか? ちなみにですが…合計人数の中から「規定時刻を超えて退勤打刻した人の割合」「規定時刻前に退勤打刻したひとの割合」を計算してくれる関数などありましたら教えていただけると大変たすかります。 ⦅追記⦆ 数字を入力し、enterを押すと自動的に「(数字)人」と表示される部分があるのですが、これはなんらかの機能でしょうか?『数式を表示する』機能を使用しても、特に関数が入力されているわけではないようです。

  • IF関数 複数条件の指定

    関数の初心者です。。 仕事のルール変更にともなって、前任者が使っていた関数を変更しなければありません。(前任者はもういないので。) 色々がんばって試してみてもエラーになってばかりです。。。 AND関数なのかなんなのかさえよく分からない状況です。 質問自体もよく分からないかも知れませんが、どのように関数を変更すればよいかご教授いただけないでしょうか。 何卒よろしくお願いいたします。 ■関数の参照先の表示されているデータ C列:平日 or 休日 D列:null or 有休 or 欠勤 E列:出勤なし or 09-16 or 10-17(勤務時間) F列:例 09:02(出勤時刻) H列:例 18:05(退勤時刻) ■関数を変更したい表 U列:勤務時間「09-16」の表  W列:勤務時間「10-17」の表 ■元関数 =IF($C○="平日",IF($D○="有休","",IF($D○="欠勤","",IF($E○=$U$1,IF($F○="","出勤エラー",IF($H○="","退勤エラー",1)),""))),"") ■変更したい内容 D列が有休となった場合、「1」を表示させる。 ただし、勤務時間毎の列がある(Uが「09-16」、Wが「10-17」)ので、勤務時間と合っているセルのみ「1」と表示させたいです。 ■失敗した関数 U列だけ下記にしたら、OKでした。 =IF($C○="平日", IF($D○="有休","1", IF($D○="欠勤","", IF($E○=$U$1, IF($F○="","出勤エラー", IF($H○="","退勤エラー",1)),""))),"") でも、さらにW列に同じような式にすると勤務時間が違うのに、「1」と表示されました。 長くて分かりづらい質問だと思いますが、何卒よろしくお願いいたします。

  • エクセル、COUNTIFS関数の範囲指定について

    エクセル2010です。 「A1の文字列が、B列とC列の中から合致し、さらにD列の"○○"という条件を満たすものはいくつあるか」 という数式を作りたいです。 写真でいうと、B・C列の中から中央区があるかどうか、さらにその中に山田がいるか、という検索式です。 そこで、COUNTIFS関数を使い、fxボタンで半自動で作ったところ、 =COUNTIFS(B:C,A1,D:D,"山田") となったのですが、なぜか結果はエラーになってしまっています。 どうやら検索条件の範囲が「B:C」になっているのが問題なのか、B:BやC:Cだけにすると、ひとつの列なら正常に計算するようです。 そこで式を二つに分け、プラスでつなげてみました。 =COUNTIFS(B:B,A1,D:D,"山田")+COUNTIFS(C:C,A1,D:D,"山田") こうしてみると一応成功しました。 しかし動作が重くなり、処理に数秒かかるようになってしまいました。 (B:Bなどひとつの列なら、数式を記入した瞬間に結果がでます) できれば数式は短くシンプルにしたいので、前述の短い形式のようにならないものか、と思います。 COUTIFS関数で、検索範囲を「○列~△列」のようにできないものでしょうか? アドバイスをよろしくお願いします。

  • EXCELの関数に詳しい方…

    EXCEL2007を使用です。 C列からB列を引いた値をD列に表示しています。 COUNTIFS関数でD列の値の1以上500未満の数値をカウント(添付の画のF2) させているのですがC列からB列の差分値をわざわざD列へ表示しなくても カウントさせる方法がありましたらご教授していただけると助かります。 1から499の範囲内の数値になるものが何個あるかしりたいです。 また作業量が膨大かつ見づらくなるため無駄なものは省けたらと思っています。 わかりにくいかと思いますがよろしくお願い致します。

  • エクセル countifs関数の記述法を教えて

    画像の一覧表から、A列に"○"が付いた行だけについて、75歳~79歳の男性の人数をカウントしたいのですが。 "○"を付けるする前の一覧表については、先の質問(No.8135362)で回答をいただき解決しました。    =COUNTIFS(C2:I6,">=70",C2:I6,"<80",D2:J6,"男") で5人となります。 このたび、A列に"○"を付けた行だけについてカウントする必要になり、次の式を立てましたが、#VALUEがでてしまい、どうにもなりません。    =COUNTIFS(A2:A6,"○",C2:I6,">=70",C2:I6,"<80",D2:J6,"男") countifs関数に、subtotal関数のような機能があればよいのですが、わかりません。 思いつくのは、フィルターをかけた後、その一覧表を、別シートにコピーペーストしてから、最初の式でカウントする方法しか思いあたらないのですが。 実際の表はもっとずっと大きいので、ひとつの関数式でできないものかと思っています。 よろしくお願いします。

  • 目的のデータを抽出してカウントする関数

    今塾の生徒のテスト結果の集計をしていて、「テストの点数が60~80点の男子」の人数を数えたいのですが、どんな関数を使ったら良いでしょうか? エクセルのデータとしては男女の性別が書かれた列と、その隣に点数が書かれた列の2列が対になっています。 COUNTIFSを使ったところ、「男子の60点以上の人数」もしくは「男子の80点以下の人数」は数えられたのですが、60~80点の人数を一発で出す関数は無いでしょうか?

  • エクセルの時刻入力(now)関数を自動更新について

    ご質問させてください。 うまく表現できるかわかりませんが、エクセルにお詳しい方、ご教授くださいませ。 NOW関数をセルに入力して、ファイルを次回開くとその時刻となってしまいますが、 自動更新させずに、値としてセルに残す方法はご存じありませんか? ご存じの方いらっしゃいましたら、ご教授くださいませ。         A    B    C    D 1     開始時刻         終了時刻       所要時間       入力品名         ⇓             ⇓               ⇓ 2 『=IF(D2="","",NOW())』  『=IF(A2="","",A2+1/1440)』 『=B2-A2』    3 ・・・・・・以後続く。 という感じで、D2に品物名を入れたら、A列に開始時刻 B列に終了時刻『1分』 C列に所要時間を自動入力し、その開始時刻(A列)を以後反映させないように(次にファイルを開いても数値が変わらない。)ようにするには、どのようにしたらよいでしょうか? エクセルは初心者の域をでませんので、悩んでおります。ぜひ、ご教授くださいませ。 よろしくお願いいたします。 ※ちなみに、エクセル2003です。                                    

  • エクセルの関数を教えて下さい。

    エクセルの関数を教えて下さい。 例えば、A1からC10までの表があり、A列は人の名前、B列は住所、C列は年齢であるとき、「〇〇に住む△才」と指定したら、該当するA列の名前が表示されるようにしたいのですが、方法が分かりません。 (実際にはB列を選んだあとC列を選べば、該当するA列は必ず1つになります。無いという事もありません。) エクセルのヘルプを見て、INDEXとMATCHを組み合わせた関数の使い方が出ていたので、それにANDを加えて何とかならないかと頑張ってみたり、VLOOKUPとかCHOOSEとか、あれこれ探すのですが1時間たっても分からず、自分のアホさ加減にあきれるやら眠くなるやらで、とうとうまた質問させて頂くことにしました。 どなたかご存知の方が見て頂けましたら、ご教授のほどよろしくお願いします。

  • エクセルの簡単な関数ですが。

    私はエクセルで旅日記を書いています。 A列には「今日で何日目か」 B列には「日付」 C列には「曜日」 D列には「行動時刻」です E列には「内容」です。 質問です。 A3に =IF(B3="","",DATEDIF($B$2,B3,"D")) としB3に日付が入ったら、「一日目、2日目」と増える(つもり)で書いたのですが、2日目で【1】と入ります。2日目だから【2】としたいのです。 仕方なく、B2にダミーの日付を入れて誤魔化していますが、この場合どんな関数を使ったらいいんでしょうか。

  • EXCELの関数について教えてください。

    EXCELの関数について教えてください。 A列のセルに「18:00 」or 「18:30」 or「19:00」 or「19:30」と入力するとB列のセルに「8:00」と表示され、「17:30」と入力すると「7:00」と表示される方法を教えてください。 セルの書式の表示形式は「文字列」ではなく「時刻」に設定したいです。 多分IF関数をつかうを使うのではないかと思うのですが、書式が「時刻」のためかうまくいきません。 よろしくお願いします。

専門家に質問してみよう