質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

1回答

1038閲覧

スプレッドシートで勤怠管理

tokatokatoka

総合スコア9

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

1クリップ

投稿2018/11/19 01:58

グーグルフォームでラジオボタン形式で出勤退勤を打刻し、スプレッドシートへ送り勤怠管理をするものを作っています。

VLOOKUPで スプレッドシートに飛んできた値を検索、そしてその値を各月のシートへ移行させて打刻しているのですが、
日付でVLOOKUPしてしまっているため深夜、つまり日付を超えた場合の対応ができません。
どのような関数であれば日付をまたいだ数字を正しい日付へもってこれますか?

=IF(ISERROR(VLOOKUP(DATE(YEAR(A14),MONTH(A14),DAY(A14))&"退社",'回答のコピー'!A:D,4,FALSE)),"",VLOOKUP(DATE(YEAR(A14),MONTH(A14),DAY(A14))&"退社",'回答のコピー'!A:D,4,FALSE))

こちらが現在の関数です。
こちらでフォームから回答した値の一覧から該当する日付の退社の区分のものがあったときその値を出力するというものです。
しかし日付をまたいで26時などに退勤した場合は次の日に打刻されてしまいます。
そのため、その日の退勤を切ったことにならず、給料が発生しません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2018/11/19 08:56

すみませんが、フォームのボタンと管理されているデータのイメージが持てません(だったら回答するなという話ではあります)。仕様を開示していただくことは可能でしょうか?。具体的には、午前2時に出勤する可能性があると、それが出勤か退勤かデータでは区別ができないように思えてなりません。
tokatokatoka

2018/11/19 23:33

フォームのボタンを複数設置し、それぞれ退勤、出勤、休憩開始、休憩終了とテキストを設定することで、スプレッドシートには押されたラジオボタンの文字列と押した時間が送られてくることになります。その一覧から出勤という文字列と日にちからvlookupでそれぞれの月の勤怠管理シートの正しい月の正しい箇所に引っ張ってくる形になります。これにより区別することができます。仕様としては一度全ての勤怠の記録をどういった区分か、日時といったデータの一覧をフォームから出力し、そこから各シートへ引っ張り出す仕様です。
guest

回答1

0

記録したリストに、深夜での退勤を前日に変える処理をしてから、日付検索で打刻を記録するようにしてはどうでしょうか?

グーグルフォームを使って出退勤記録をシート1に出力

出力したデータを関数を使って深夜退勤が前日の日付になるように処理
※シート1のA列に日付、B列に退勤時刻が入っている場合、
シート2のA列に、
arrayformula(if('シート1'!B1:B<0.25,'シート1'!A1:A-1,'シート1'!A1:A)
シート2のB列に、
arrayformula(if('シート1'!B1:B<0.25,'シート1'!B1:B+1,'シート1'!B1:B) ←セルの表示形式を経過時間にすること

シート1ではなくシート2を参照してvlookupを使う

試していないのでうまくいくかはわかりませんが、こんな感じで行けると思います。

投稿2018/11/19 02:50

編集2018/11/19 02:55
DY.

総合スコア72

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tokatokatoka

2018/11/19 03:11

ありがとうございます。 方針が少し見えてきました。 しかし現在出退勤の記録の行番号は休憩をしたときとしないときでまちまちに加算されてしまうため、指定できない状態です。 その場合はどのようにしたらよろしいでしょうか。
tokatokatoka

2018/11/19 03:25 編集

試してみたのですが、時間は25時などの値に変更できるのですが、日付ができませんでした! 日付の場合、西暦なども含んでいるので値が大きく、また月、年度によって大きく数字が変わるので 一概にいくつ以下とは言えないようです…
DY.

2018/11/21 08:10

2個目の問題から回答させていただきます。 私の書いた式では日付でいくつ以下といった条件付けをしておりません。おそらく式を読み違えているのではと思います。 私の書いた式では、「退勤時刻が0時~6時の時、A列では日付を1日前にして、B列では時刻に24時間足す」という動作をしています。 スプレッドシートでは、(日付)-1と書くだけで1日前の日付が表示されますので、ここでは単に-1のみしいています。
DY.

2018/11/21 08:17

1つ目の問題は、A列の途中に空欄が入ってしまい必要のない数字が出力されるということでしょうか?ちょっと状況がわからなかったのでもし差し支えなければどのようにシートに出力されているかを見せていただいたほうがスムーズに回答できるかと思います。
papinianus

2018/12/04 06:18

横からで失礼します。ようやくDY.様の仰っておられることの妥当性が理解できました。うまい解決だと思いました。 質問者様へ おそらく今も回答シートから回答のコピーシートへコピーをしておられると思います。このときに、回答で提示の処理をかませればいいと思われます。 想像するに、回答のコピーへのコピーが単なるコピーではなく、セル参照(=フォームの回答!B2のような形式)であるとすれば、その加工のときにifを使ってやれば、「行番号が指定できない」「数値が大きい」ということは問題にならないと分かるのではないかと思われます。
tokatokatoka

2018/12/20 00:26

ありがとうございます!解決いたしました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問