• ベストアンサー

エクセルでタイムカードを入力しての勤怠管理 関数&マクロ 

本を購入して読んでみたのですが、よくわからなかったので教えて下さい。 定時は9:00-18:00です。  1.次の場合どのような関数をいれればいいでしょうか?   出勤時間(C6)を 退出時間(E6)へ入力    7:00に出社しても9:00からしかカウントしません。   9:05までなら遅刻とせず、9:00出社としてカウント 9:05を過ぎると30分単位で時間をカウント(9:06出勤なら9:30から) 2.パートさんが曜日によって勤務時間が変わります。その場合どのよう   に関数をいれればいいでしょうか?   月・水・金 9:00-18:00    火・木 8:00-17:00    曜日によって1.の質問の9:00からのカウントを、8:00からのカウント   というような選択をしたい場合 3.次の場合のマクロをどのように作成すればいいでしょう。   (今回はじめてマクロに挑戦します。そもそも根本的な考え方が    おかしいかもしれません。ご指導よろしくお願いします。)     1名(タイムカード1枚)で1シート 社員30名の1カ月分を    1ファイルで管理しようと思います。   A.マクロ用のシートにタイムカードの管理期間、たとえば11/1-30すると     以下が自動的に入力されるマクロ    ・全社員の勤怠表の日付(A6):(A35)まで自動的に日付が入力(A36)     は空欄表示    ・全社員の勤怠表の曜日(B6):(B35)まで自動的に日付が入力(B36)     は空欄表示   B.マクロ用のシートにあるクリアボタンを押すと以下がデータクリアされる     マクロ     ・全社員の勤怠表の出勤時間(C6):(C36)と退社時間(E6):(E36)が 自動的にデータ削除される。 質問が分かりづらいとは思いますがよろしくお願いします。

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

  • ベストアンサー
回答No.10

No2です ご質問2の後半部分なのですが > ただその前に、ANo.8の自動化とは関数ではなくVBAということなのでしょうか? > (関数で自動的に表示するようにはならないということでしょうか?) 大丈夫です、関数でも自動化できますよ 就業時間についほとんどの人が月~金で9:00-18:00、一部の方が月水金9:00-18:00、火木8:00-17:00ということですね。 前者を勤務パターン1、後者を勤務パターン2とします。 そして、今集計している方が勤務パターン1の人なのか勤務パターン2の人なのかをどこかに情報として持たせる必要があります。 とりあえずJ5セルを使い、勤務パターン1に方は数値で 1 、勤務パターン2の方は数値で 2 と入力することにしましょう わかりやすくするためにI5セルには見出しとして 勤務パターンと入力しておきましょう (I5およびJ5セルが開いていない場合にはほかのセルを使用してください。以下の数式のJ5セルは使用したセルに置き換えてください) M列に入れる数式はIF関数をいくつか組み合わせて作ってもできますが、式が長くなり見通しが悪くなりますのでもう少しスマートしたいのと、将来勤務パターンの変更や別の勤務パターンが発生したときでも対応できるように、勤務パターンの情報を持たせます。 勤務パターンが曜日によって決まるということなので「曜日」シートを利用いたします。 「曜日」シートのC列に勤務パターン1の始業時刻・D列に勤務パターン2の始業時刻を入力します。 C1~C7には 9:00 D列は3行目(火曜日)および5行目(木曜日)に8:00、それ以外は9:00と入力してください。 (休日出勤については後で考えるとして、ここでは土日の始業時間は仮に9:00としております。) 勤務パターン別の始業時刻のみ入力し、終業時刻は情報として持たせておりません。 終業時刻についてはすべての場合において9時間拘束として考えておりますので、終業時刻=始業時刻+9時間 で算出することにします。 もしそうでない場合(将来的に拘束時間も人によって変わる事がある可能性があるのなら、終業時刻もここに入れておいたほうがよいと思います) 将来勤務パターンが変更になった場合はここの始業時刻を変えるだけでOKです。また新しい勤務パターンが発生した場合はE列以後に加えていけばよいでしょう。 曜日以外で決定されるパターンが発生する場合は以下に記述するM列の式を変更する必要がありますが、それはそのときに考えることとします。(それが数名ならM列に直接始業時刻を入力することで逃げることはできます) また、「曜日」シートのセル範囲A1:D7には範囲名をつけたほうが後々のメンテナンスが楽になると思いますが、今回は範囲名は使用せずにいきます。(興味があれば「範囲名」について調べて利用してください) M8セルには下記の数式を入力してください。 =VLOOKUP(D8,曜日!$A$1:$D$7,$J$5+2,FALSE) ついでにH8セルの終業時刻にも下記の数式を入力してください。 =M8+TIME(9,0,0) これで始業時刻・終業時刻とも自動的に表示されると思います。 休日についての処理は何もしておりませんので、出勤時刻、退出時刻の入力がないとエラーになってしまうと思いますが、とりあえず今のところはこのままで行きますね。 ただ、エラー表示を防ぐにはどうしたらよいかは考えておいてください。

96unauna
質問者

お礼

BrueBreeze様、ご回答いただきありがとうございます。 M8セルになぜか数式を入れても出来ませんでした。 今回はIF関数にIF関数をネストしVLOOKUP関数を使って逃げて解決しました。 ということで現状式が長くなり見通しが悪くなってます。(苦笑) >=VLOOKUP(D8,曜日!$A$1:$D$7,$J$5+2,FALSE) 上記の$J$5+2の+2をすることで勤務パターンが選択できると思うのですが うまく動かなかったので、このタイムカード集計のエクセルがとりあえず完成たら勉強して作り直したいと思います。 また範囲名のアドバイスありがとうございます。 全く知らない言葉でした。すぐに検索をかけ読んでみたところ、とても便利な機能なので少しずつ使っていこうと思います。 これで質問を閉めますが、BrueBreeze様には本当に親切にご指導いただきありがとうございました。 貴重なお時間を割いていただいたおかげで、こちらは従来の何倍も早く当初の目的が達成できそうです。感謝申し上げます。

その他の回答 (9)

回答No.9

No2です > 本来はエクセルでタイムカードの情報を網羅し、エクセルをもとに給与計算ソフトに落とし込んでいくのがベストです。 げっ、手抜きができるな と思っていたのですがぬか喜びでしたね > > 遅刻した場合のマイナスを残業時間のトータルから相殺するようにしたかったのです。 > でも、その前の段階でつまずいていてそこまでいきついていませんでした。 そうでしたか > 今回の質問で随分頭の中の整理もできましたし、これからまた作り込んでいこうと思います。ただ作り込んでいく中で、また壁にぶちあたることもあると思います。 そうですね、整理できたことから順番にこつこつやっていけばよいと思います。 No3さんのおっしゃっている > 人手でやる場合はどういう操作になるか考えて逐一記述する。 > VBAも人手の操作でも出来ることを、コードに置き変えたものが、ほとんどであるから。 というのは本当にそのとおりなんです。 VBAに限らずね がんばってください。

96unauna
質問者

お礼

BrueBreeze様、回答ありがとうございます。 VBAに関しては地道にやって行こうと思います。 ただその前に、ANo.8の自動化とは関数ではなくVBAということなのでしょうか? (関数で自動的に表示するようにはならないということでしょうか?) VBAということであればいったん質問を締切り、勉強した上でそれでもわからない時にもう一度質問しようと思ったものですから。 何度も質問してすみませんがよろしくお願いします。

回答No.8

No2です a)式でよいということで、式が簡単になってよかった さて、ご質問の2について a)式では始業時刻を仮に9:00としていました。 a)式 =IF(F8<=TIME(9,0,0),TIME(9,0,0),CEILING(F8-TIME(0,5,0),TIME(0,30,0))) の TIME(9,0,0) が 始業時刻である9:00をあらわしています。 ここが日によって変わるということなので、とりあえず(回答No5で使わなかった)M列を使いましょうか セルG8の式の TIME(9,0,0) の部分をすべて M8 に変更して以下の様にしてください =IF(F8<=M8,M8,CEILING(F8-TIME(0,5,0),TIME(0,30,0))) 列見出しが紛らわしいので F列の見出しを「出勤時刻」M列の見出しを「始業時刻」にしてください。 日によって変わる始業時刻はM列に手作業で入力してください。 このままでも十分使えると思いますが、入力する項目が増えますので手間になりますね なんとかM列を自動的に始業時刻が入るようにしたいのですが、自動化するためには決まったルールが必要になります。 ひとつは イ) 月・水・金 9:00-18:00 火・木 8:00-17:00  ということですが、同時に ロ)特定の人のみが曜日によって時間が変わります。 とのことでした。 これは、 a)ほとんどの人が原則イ)パターンで特定の人のみが例外的にイ)以外のパターンになるということでしょうか?そのイ)以外のパターンの法則性は? b)ほとんどの人の原則定時が決まっており、特定の人のみが例外的にイ)パターンになるということでしょうか?その場合のほとんどの人の定時は? a)b)いずれの場合でも、例外となる割合はどれくらいなのでしょう。 例外の発生が少ないのであればその例外の場合だけM列に手入力で逃げることは可能です。 また、例外の発生があまりに多いのであれば、自動化するのは難しくなります。すべてM列を手入力したほうがいいかもしれません。

96unauna
質問者

補足

BrueBreeze様、ご回答いただきありがとうございます。 > イ)月・水・金 9:00-18:00 火・木 8:00-17:00  > ということですが、同時に > ロ)特定の人のみが曜日によって時間が変わります。 > とのことでした。 またわかりにくい質問ですみませんでした。 特定の人のみがイ)の勤務状態に曜日によって変わるということです。 その他のひとは月~金まで9:00-18:00でかわりません。 これならば自動化できますでしょうか? よろしくお願いします。

回答No.7

No2です うまくいきましたか、よかったです。 > これは私が本やネットを参考に作ったものです。 そうでしたか、SUM関数しか知らない方が、ここまで作り上げたのですから立派なものです。 私が考えてしまった点は、ご回答いただいた構成を見て「残業時間の計算しかしていない」と感じたからです。 前出の「出勤時刻を入力するセルが見つからない」というのもそうですが 通常勤怠管理を行うなら、遅刻・早退の時間管理や休憩時間の扱い、休日出勤の処理等があってもよさそうなのですが、それがなかったもので ただ、この疑問も > 給与計算ソフトに落とし込む前のタイムカードの集計 とのことで納得しました。 ということは、この勤怠管理表ですべてを処理しなくてもよいと考えてもよろしいでしょうか? 給与計算ソフトに必要なデータさえ得ることができればよいと割り切ってしまえばかなり大雑把に作ってもいけると思います。 多少うまくいかない部分があっても、給与計算ソフトに入力する段階で修正して入力するという考え方でいかがでしょうか? 給与計算ソフトに落とし込む際に必要なデータは何が必要でしょうか? > 具体的にどの列のものとか、なぜこの関数を使用しないのかとかヒントだけでもいただけるとありがたいです。 できるだけ現状のものを利用して回答していこうと考えております。 今までのものもすでに使用してある関数を使用しております。わからないことがあったらそれこそ本やネットを使ってできるだけ調べてください。 (もちろんネットの中にここ質問することも含まれますよ) 私の回答の中で不明な点があれば、「どうしてここはこうなんだ」と具体的に訊いて下さればOKです

96unauna
質問者

お礼

BrueBreeze様、ご回答いただきありがとうございます。 > この勤怠管理表ですべてを処理しなくてもよいと考えてもよろしいでしょうか? 本来はエクセルでタイムカードの情報を網羅し、エクセルをもとに給与計算ソフトに落とし込んでいくのがベストです。 遅刻した場合のマイナスを残業時間のトータルから相殺するようにしたかったのです。 でも、その前の段階でつまずいていてそこまでいきついていませんでした。 そういった未完の部分があったため疑問をいだかせてしまったのですね。 今回の質問で随分頭の中の整理もできましたし、これからまた作り込んでいこうと思います。ただ作り込んでいく中で、また壁にぶちあたることもあると思います。 その時はまたこちらで質問をするかもしれませんが、質問がBrueBreeze様のお目に止まりましたらご指導いただけたらと思います。よろしくお願いします。

回答No.6

No2です すいません、No5の回答のa)式とb)式がまったく一緒でしたね ビール飲みながらあれこれやってるとこれなんで(汗 a)式は以下のように訂正してください =IF(F8<=TIME(9,0,0),TIME(9,0,0),CEILING(F8-TIME(0,5,0),TIME(0,30,0)))

96unauna
質問者

お礼

BrueBreeze様、ご回答いただきありがとうございます。 早速やってみました。うまくいきました! 回答を見ても、長い式なのですぐには理解できず、何度か見返してようやく納得できました。 ありがとうございました。

回答No.5

No2です 現状を詳しく書いていただきありがとうございました。 おかげでどのようになっているのかよくわかりました。 これは、あなたが作られたのでしょうか、それとも前任者からの引継ぎでしょうか。いずれにしても、(細かいところで「ウーン」と考えてしまうところはありますが)よく作成されていると思います。 ご質問の内容が多いので順番にいきますね まずご質問の1についてですが 出勤時刻を入力する箇所がほかに見当たらなかったのですが 現状で「出勤時刻はF列に手入力している」と考えていますがいかがでしょうか タイムカードの出勤時刻を見ながら、始業時刻以前の出勤であれば始業時刻を、遅刻した場合はその時刻を入力しているとして以下の回答をしております。 (原則としてタイムカードの出勤時刻をそのままF列に入力するとして) > 遅刻の場合、35分に出勤でも30分として認めるということです。 > 始業時のみ5分の遅刻を認め、それ以外は毎時正時と30分が起点となります。 > (病院等に行くために大幅に遅刻。11:05に出勤の場合は11:00として認められます。) この部分の解釈なのですが、 a)原則として、始業時および、いかなる理由の遅刻の場合でも、5分の遅延が認められ例外は発生しないというのならば 遅刻の場合 病院等に行くために大幅に遅刻。11:05に出勤の場合は11:00として認めらる 寝坊して大幅に遅刻した場合でも11:05に出勤の場合は11:00として計算をする。 つまり、どのような理由で遅刻したかを問わず5分の遅延を認め、11:05分に出勤した場合は11:00として計算し、常に1通りの計算方法しかない。 b)原則として始業時のみ5分の遅刻を認め、いかなる理由の遅刻の場合でも5分の遅延は認められない。(これはご質問の文面からは考えられないと思いますが) c)原則として、始業時のみ5分の遅延が認められ、それ以外は毎時正時と30分が基点となる。ただし、特別の事情が認められる遅刻の場合には特例として5分の遅延が認められるということでよろしいでしょうか? 遅刻の場合 病院等に行くために大幅に遅刻。11:05に出勤の場合は11:00として認めらる 寝坊して大幅に遅刻。11:05に出勤の場合は11:30として計算をする。 つまり、同じ11:05分に出勤した場合にでも、11:00出勤とする場合と11:30出勤で計算する場合の2通りの計算方法が考えられる。 それぞれの場合にG8セルに入力する式ですが (わかりやすくするために、定時が変わる処理および休日の処理はまだしておりません、また始業時刻を仮に9:00としております) a)の場合は処理としては非常に楽となります。考え方としては単純に始業も遅刻も関係なく出勤時刻から5分引いた時間で考えればよいからです。ただし、始業時刻+5分までの出勤については強制的に始業時刻にします。 =IF(F8-TIME(0,5,0)<=TIME(9,0,0),TIME(9,0,0),CEILING(F8,TIME(0,30,0))) b)の場合(仮に始業時刻を9:00とします) 定時出勤、つまり出勤時刻が始業時刻+5分より早い場合と、遅刻、つまり出勤時刻が始業時刻+5分より遅い場合)に分けて考える必要があります。 =IF(F8-TIME(0,5,0)<=TIME(9,0,0),TIME(9,0,0),CEILING(F8,TIME(0,30,0))) c)の場合はもう少し複雑になります(同様に、仮に始業時刻を9:00としています) まず、遅刻の場合、それが5分の遅延が認められる遅刻なのか認められない遅刻なのかを判断する必要があります。 =IF(F8-TIME(0,5,0)<=TIME(9,0,0),TIME(9,0,0),IF(<認められる>,CEILING(F8-TIME(0,5,0),TIME(0,30,0)),CEILING(F8,TIME(0,30,0)))) (このままでは使えません) 問題は <認められる> の部分、特別な事情として5分の遅延を認められるかを判断する条件なのですが、これは、どこかにその出勤が特別の理由として認められるかどうかの情報を入力する必要があります。 本来は、出勤時刻を入力したセルの横にその情報を入力できるようにしたほうがよいのですが、現状をあまり崩したくありませんので、ここではとりあえず開いている列 M列を使います。M列に ok と入力したら特別な理由として5分の遅延を認めるということにするなら 論理式 M8="ok" が5分の遅延を認める条件となりますので、上の式を下記のように変更します。 =IF(F8-TIME(0,5,0)<=TIME(9,0,0),TIME(9,0,0),IF(M8="ok",CEILING(F8-TIME(0,5,0),TIME(0,30,0)),CEILING(F8,TIME(0,30,0)))) ただね、5分の遅延が認められるかどうかの情報を入力する必要がありかえって手間が増えます。また、式自体も複雑となって、見通しが悪くなります 全部システムで解決するのではなく、運用上で解決するということも考えておいたほうがよいかもしれません。 運用上で解決するのであれば 式としては原則どおりのb)の方式で入れておいて、病院へ行くために大幅に遅刻をして11:05分に出勤した場合は11:00と入力し、寝坊で大幅に遅刻した場合はそのまま11:05と入力します。 もちろん始業時の処理にも同様なことが言え、始業時の5分の遅延の処理についても運用上で解決するならばb)式は =IF(F8<=TIME(9,0,0),TIME(9,0,0),CEILING(F8,TIME(0,30,0))) で、かまいませんし、始業時以前の出勤についてもすべて運用上で解決するのであれば 始業+5分までの出勤についてすべて始業時刻で入力するという手もあります。 その場合は =CEILING(F8,TIME(0,30,0)) これでOK ただ、これでは、始業時刻が一定の場合はまだ楽なのですが、日によって変わるということなので頭で判断するとなると大変ですし、間違いの元になるでしょうね、それに、そもそものご質問の意に添えませんね システムですべてを解決しようとするのではなく、場合によっては運用上で解決するほうが楽な場合もあるということで例出しました。 システムで解決するべき点、運用上で解決すべき点というのはバランス感覚です ご自身でどちらが楽かを考えてみてください。 お勧めは c)式 か b)式+運用での解決 のいずれかだと思います。

96unauna
質問者

お礼

BrueBreeze様、ご回答いただきありがとうございます。 これは私が本やネットを参考に作ったものです。(職場の諸先輩方は全て電卓もしくは暗算です。) ですから、「ウーン」と考えてしまうのもあるかと思います。その「ウーン」と考えてしまうものですが、 具体的にどの列のものとか、なぜこの関数を使用しないのかとかヒントだけでもいただけるとありがたいです。 さて、本題の質問の1についてですが、出勤時刻を入力する箇所は「出勤時刻はF列に手入力している」であっています。記載ミスです申し訳ありません。 また解釈も > a)原則として、始業時および、いかなる理由の遅刻の場合でも、5分の遅延が認められ例外は発生しない であっています。 b)、c)につきましては、今回の内容には該当しませんでしたが、他の客先で起こる可能性がありますのでとても勉強になります。ありがとうございます。 そして、 > システムですべてを解決しようとするのではなく、場合によっては運用上で解決するほうが楽な場合もある この言葉は深いですね。 いろいろなパターンを想定した上で、どちらを選択するかの判断も必要になりますし、人から仕事を受ける際、今まで自分の主観により勝手に解釈、 もしくは人に伝える際に伝わっていると思っていても違うことがあるかもとしれないと気付かされました。 また、BrueBreeze様のようにいろいろなパターンを想定できないことが今の自分に足りない点だと気づきました。ありがとうございます。

回答No.4

No2です。 今時間が余りありませんので、個人的な感想のみ書かせていただきます。 私の質問の1および2については例外処理についての質問でした。 どこの事業所でも大なり小なりそうだと思うのですが、勤怠管理って言うのは例外が付き物です。 よい言葉で言えば杓子定規にはめるのではなく、臨機応変に人情味を加えて管理するってことなのですが、別の言い方をすればいい加減ってことですね。 特に大企業というわけでなければTOPの一言で裁定が変わってしまうなんて事も間々あるわけですが。これが経理担当者を泣かせる原因になってるんですけどね。 裏を返せば勤怠管理の自動化ってのは経理担当者にとって見れば劇的に業務の改善になるので、ご質問者様がこのようなことをお考えになるのもよくわかります。 一番早いのは例外処理をなくすってことなのですが、これがなかなか難しい ただ、例外処理が多くなると、これをプログラムに組むのはかなりの労力になります。それ相応の力量も問われます。 それにね、プログラマやSEに「これこれこういったプログラムを組んでほしい」と頼んだときに「無理だ」と返答された場合に2通りの場合があると思ってください。 1つは、本当に「できない」場合ですが、もうひとつは「(技術的には可能ではあるが)作る労力に成果が見合わない」場合です。 たとえて言えば1から10までの自然数の合計を計算するプログラムを、1週間かけて作るよりも、「そんなの電卓たたいたほうが早いじゃん」ってことです。 勤怠管理もこれに似たような傾向があって、例外処理が多い場合は、システムを組むより手作業のほうがずっと楽って場合は多いと思います。 個人的には、TOPを口説き落として給与計算ソフトを導入するのが一番よいのではと思っております (ただ、すぐに導入するのは難しいかもしれませんね) 今回は感想のみで失礼しました。詳しいことは後日回答いたします。

96unauna
質問者

お礼

お忙しいところ、所感を記載いただきありがとうございます。 仕事をするうえで、この考え方を判断基準のひとつとして念頭に置きながら仕事をすることが、事務効率につながるのだと教えていただきました。ありがとうございます。 今まではエクセルに落とし込みさえすれば・・と、その事ばかりに気を取られていました。 本を読んでも新しい用語ばかりでよくわからず、わらをもすがる心境での先日質問した状況だったのです。 そこに私にとって雲の上の人が効率という観点では、「そんなの電卓たたいたほうが早いじゃん」ってことを書かれているをの見て衝撃を受けました。 その言葉は私自身がエクセルをわかってるわけでもないのに、同じ職場の人に言われてもなかなか私自身の心には届かなかった言葉だと思います。 実は私の職場環境としては複数社の給与計算をする職場です。 給与の締め日が重なることが多く、給与計算を1日に数社をかけもつことがあります。 私自身はこの部署に入ったばかり、給与計算の業務もはじめてでタイムカードの見方も慣れていません。 いろいろなタイプのタイムカード、1社の中でも就業時間がまちまちだったりという状態でどうしてもミスが多くなります。 給与計算ソフトに落とし込む前のタイムカードの集計が、私にとってのネックとうい状況なのです。 パートとはいえ、ミスがあると職場での信頼関係にも問題があると思いますので、効率や正確さを考えたうえで、今後取り組んでいこうと思います。 貴重なご意見ありがとうございました。

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

マクロという言葉を使っているレベルでは、こんな課題に取り掛かるのは早すぎます。プログラムを生易しく考えすぎではないかと思う。 しかし、質問など見ていると、速く進歩している人も居るようだから意外に、早く相当のところへ行くかもしれないが。 まあ、仕事でやるべきという、ニーズのあとおしは学習のモチベーションとしては強いはず。 質問も判りにくくて、内容が整理されていません。内容を整理する力が無いうちは、プログラムは無理です。 ーー まずマクロの記録に関する本を読むこと。 人手でやる場合はどういう操作になるか考えて逐一記述する。 (それが出来るには、エクセルの機能や操作を相当知ってないと、操作そのものがわからず、能率のよいものはできない) VBAも人手の操作でも出来ることを、コードに置き変えたものが、ほとんどであるから。 それが整理されたら、マクロのの記録をとってみる。 一例や数例でよい。同じような操作を繰り返す場合は、とりあえずは繰り返すという認識だけでよい。プログラムで繰り返し処理が出来る。 その場合、時により、人により。データにより、見るところや対象や処理を変える必要が通常では起こる。 それを認識して、場合に応じて変えるとか、変わってもコードを変えなくて良いように一般化するのはどうするか考える。 この辺でわからなければ。初めて質問という段階になる。 現状では課題丸投げで、回答者に作ってくれ、ということになってしまう。これは規約違反。 現状では、関連項目、前提知識も含め、広がりすぎて、回答に書いてられない状態になりかねない。 それにコントロール(例えばボタンなど)の最低限とイベントの 考えは勉強しておくこと。 ーー エクセルで、人ごと、月ごとなどに別シートにすると、VBAを使わないと処理が出来なかったり、VBAのプログラムも難しくなるので、良く考えて、分けること。 ーー 初めはなるべくシートの関数や操作などで処理する部分を多くし、VBAの受け持つ分野は少なくする方が良い。 例えばプログラムでもやれるが、初期値、項目見出し、書式など変わらないものは操作で済ましておく。 またVBAでエクセル関数も使えることを覚えておくと良い。

96unauna
質問者

お礼

ご回答ありがとうございます。質問を勝手ながら締め切らせていただきました。はじめての質問で、質問の仕方、補足の仕方等至らない点があったかと思います。 これに懲りず、次回の質問がimogasi様の目に止まることがありましたら、ご指導いただけると幸いです。

96unauna
質問者

補足

ご回答ありがとうございます。 タイムカードの勤怠管理は現状手計算でやっている職場環境です。 業務中にエクセルを使った勤怠管理の為に、余り時間を割くわけにもいかず、周りに詳しい人もいません。 私自身も先月までSUM関数ぐらいしか知らなかったので、本を片手に子供が寝てからパソコンとにらめっこという状態でした。適切なアドバイスがなかなか聞けないので、長文でのご指導で地道にやっていくヒントがいただけた様に思います。ありがとうございました。 そこで大変恐縮ですが、マクロの記録に関する本でお勧めの本があれば教えていただけないでしょうか。手持ちの本の他にも読んでみようと思います。よろしくお願いします。

回答No.2

1.について、 遅刻の場合、35分に出勤でも30分として認めるということでしょうか? つまり、毎時05分と35分が時給計算の起点となると考えてよいのでしょうか?それとも始業時のみ5分の遅刻を認め、それ以外は毎時正時と30分が起点となるということでしょうか? 退出時についてはどうなのでしょうか、早退時の扱いはどうなのでしょうか? 2.について すべての場合において同じと考えてよいのでしょうか?人によってあるいは月によって定時が変わることがありますか? 3-Aについて 管理期間についての情報は、どこに持たせるつもりなのでしょうか? ア)各シートごとにどこかのセルに入力する イ)シート毎に入れるのではなく、たとえば「表紙」のようなシートに情報として入力する ウ)ファイル名に月の情報を持たせる 上記いずれの方法でも、関数だけでできます。マクロを組む必要はありません それでもマクロにしたいのでしょうか? 3-Bについて これくらいのマクロは独力で作れますか?

96unauna
質問者

補足

分かりづらい文章にもかかわらず、回答をいただきありがとうございます。 回答についての補足説明の前に、現状の説明をさせていただきます。 上記の質問の記載セルは仮セルの話なので無視下さい。 ・社員用シート 期間開始日付(E5)-期間終了日付(G5) B列は非表示で、以下の通り入っています。 ちなみにB8には 数式 =E5 B9には 数式 =B8+1 以下B38まで同じように(B9+1,B10+1・・・)入っています。 C列は表示で次の関数が入っています。 ちなみにC8には 関数 =IF(B8<=$G$5,B8,"") D列は非表示で次の関数が入っています。 ちなみにD8には 関数 =WEEKDAY(C8) E列は表示で次の関数が入っています。 ちなみE8には =IF(C8="","",VLOOKUP(D8,曜日!$A$1:$B$7,2)) 曜日というシートに1234・・・日月火水・・・と入力してあります。 F列は表示で定時開始終了時刻を入力します。 G列は表示でF列入力の時刻によって次の通り表示させたいのです。 (質問の1の関数がわからず関数未入力)  8:00出社なら9:00  9:05までなら遅刻とせず9:00  9:06なら遅刻で9:30 H列は表示で定時終了時刻を入力します。  現状出勤日のみ17:00と入力しています。 I列は表示で退出時刻を入力します。 J列は表示で、以下の通り入っています。 ちなみにJ8には 数式 =I8-H8 K列は表示で次の関数が入っています。 ちなみにK8には 関数 =FLOOR(J8,TIME(0,30,0)) L列は表示で、以下の通り入っています。 ちなみにL8には 数式=K8*24 ・パート用シート 日付等に関しては社員と同じなので省略 違う点は H列は表示で開始終了時刻を入力します。 I列は非表示で次の関数が入っています。 =CEILING(H8,TIME(0,15,0)) 同様に退出時間に関しても上記関数を使用。 退出時間から開始時間と休憩時間をひき実働時間をもとめています。 残業時間はIF関数をしようしています。 =IF(O8>8,O8-8,0) そこで回答いただいた件に関してですが次の通りです。 1.について 遅刻の場合、35分に出勤でも30分として認めるということです。 始業時のみ5分の遅刻を認め、それ以外は毎時正時と30分が起点となります。 (病院等に行くために大幅に遅刻。11:05に出勤の場合は11:00として認められます。) また退出時に関しては30分ごとに残業がつきます。 ここでは遅刻に関しては一切考慮されず、単独で定時より30分超えたかどうかです。 2.について すみません。質問ではパートと記載しましたが、社員とパートの一部の人の誤りです。 パートに関しては8時間を超えたかどうかで残業をカウントしますので無視下さい。 社員の場合、現状 H列は定時終了時刻を入力(17:00と18:00と入力)します。 曜日によってH列に17:00と18:00が表示される様にしたいのです。 また、特定の人のみが曜日によって時間が変わります。 3-Aについて 管理期間についての情報は、現状 ア)の各シートですが、今後手間を省くのに イ) の「表紙」のようなシートに情報として入力するを考えました。 これは関数では無理だと思っていたのですが、関数でできるのであれば関数で教えていただきたいです。 3-Bについて 他の方からのご指摘にもあるように、無知の私が、レベルに合わない質問をしたようです。 申し訳ありません。このマクロも自力では作れません。 日付の関数はじめ、使用している関数で不適当なものがあれば合わせて教えていただけないでしょうか?(もっと適切な関数など。) よろしくお願いいたします。

  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.1

日付を自動的に入力することから始めてみたら?言われた仕様をいっぺんにやろうというのは効率が悪いです。 ちゃんと段階に分けて取り込みましょう。

96unauna
質問者

お礼

ご回答ありがとうございます。 恥ずかしながら、自分のレベルにあった質問ではなかったようです。ご指摘いただきありがとうございました。