![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
VBAや関数で、空白セルを飛ばして時間を計算したいのですが、うまくいきません。
A列に日付、D列に退勤時刻を入力し、E列に休息時間を自動計算させる式を考えています。
(休息時間とは、退勤してから次の出勤までの時間のことです。)
連日出勤の場合はE列に以下の計算式を入力すると問題無く計算できるのですが、翌日や前日が休みの場合、この式では対応できません。
E2セル
=IF(B2="","",IF(C2="翌",B3-D2,1+B3-D2))
この式をオートフィルでE列を埋めたものが添付画像になります。
VBA初心者で、色々調べながらVBAと関数の両方で考えてみましたが、どうしても解決できず相談させていただいた次第です。解決方法はVBAと関数のどちらでもOKです。
連休の日数に関係なく計算できる方法を教えてください。
よろしくお願いします。
![「VBAまたは関数を使って空白セルを飛ばす」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/e/542272862_5641767a25f63/M.jpg)
No.2ベストアンサー
- 回答日時:
E2セルに
=IF(B2="","",SUM(INDEX(A3:B$33,MIN(IF(ISNUMBER(B3:B$33),ROW(B3:B$33)))-ROW(),))-SUM(A2,D2,C2="翌"))
[Ctrl]+[Shft] +[Enter] で確定、配列数式。{ }で挟まれる
下へオートフィル
日付+出勤時刻-SUM(日付,退勤時刻,翌だったら1) で計算してます
![「VBAまたは関数を使って空白セルを飛ばす」の回答画像2](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/7/655143_564192b14a36a/M.jpg)
ありがとうございます!一発で解決することができたので、ベストアンサーとさせていただきました。ISNUMBER関数というのがあるんですね。知らなかったです。本当に助かりました。ありがとうございました。
No.3
- 回答日時:
こんにちは!
普通に考えるとE7セルは1日(1行)飛んでいますので
37:00
という表示が正しいような気がします。
ご希望通りの表示になるかどうかわかりませんが・・・
A列には連続して数値(シリアル値でなくても構いません)が入力してあるとします。
E2セル(セルの表示形式はユーザー定義から [h]:mm としておきます)に
=IF(B2="","",IF(C2="翌",IF(COUNT(B:B)=COUNT(B$2:B2),"",INDEX(A3:A$100,MIN(IF(B3:B$100>0,ROW(B3:B$100)-ROW())))+INDEX(B3:B$100,MIN(IF(B3:B$100>0,ROW(B3:B$100)-ROW())))-(A2+D2+1)),1+B3-D2))
配列数式になりますのでCtrl+Shift+Enterで確定!
この画面からコピー&ペーストする場合は
上記数式をドラッグ&コピー → E2セルを選択 → 数式バー内に貼り付け → そのまま(編集可能なまま)
Ctrl+Shiftキーを押しながらEnterキーで確定!
数式の前後に{ }マークが入り配列数式になります。
最後にE2セルのフィルハンドルで下へコピーしてみてください。
※ 最終行が「翌」の場合は引き算する対象がないので、何も表示しないようにしています。
※ 個人的な疑問ですが
C列が空白で、次の行のB列が未入力の場合、
>1+B3-D2
とは夜中の0時を基準としているのでしょうか?
一発で解決とはいかないと思いますが、
とりあえずは叩き台としての回答です。m(_ _)m
回答ありがとうございます。お恥ずかしいですがROW関数の使い方が理解できていなかったので、こういう風に使うのかと参考になりました。
個人的な疑問の件ですが、おそらく回答者さんの解釈で合っています。
私の意図としては、日付をまたぐ場合(翌がつく場合)とそうでない場合で日付ずれを調整する為に1日(24h)を加算しています。
本来なら退勤は翌2:00ならば26:00と入力した方が条件分岐させずに計算楽なのですが・・・。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_07.png?5a7ff87)
No.1
- 回答日時:
ここで言う休息時間って、退勤時間から次の出勤時間までの間隔だって解釈で合ってますか?
だとしたら、4日の答えはエラーになってないけど、答えとしては間違いですよね。4日の17:00~7日の15:00まで出勤していないわけだから・・・
4日の17:00~24:00
5日の0:00~24:00
6日の0:00~24:00
7日の0:00~15:00
答えは以上の合計、70:00になるべきでしょう?
もし日付をまたいで考えないってことなら、翌の場合にその翌日が空欄なら、24:00とみなして計算すればエラーにならずに済みます。もう一個IFを足せばおk。
ご指摘の通り、4日の休息時間は70:00となるのが正です。日付をまたいで計算したかったので、NO.2の方の方法で解決することができました。回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) マクロ/VBAについて教えてください。 10 2022/05/27 12:59
- Excel(エクセル) エクセル関数についてお教えください 3 2023/07/24 12:33
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Excel(エクセル) エクセル 自動計算 1 2023/01/30 13:28
- Excel(エクセル) Excel関数で日またぎの勤務時間にしるしを立てる 2 2022/04/20 17:22
- Excel(エクセル) 出退勤管理の早退時間について 4 2023/08/21 15:22
- Excel(エクセル) 月間シフト表から総勤務時間を計算する関数 4 2023/05/20 07:12
- Excel(エクセル) エクセルの早退時間を計算したいです。計算はうまくいっているようですが… 1 2022/12/26 16:22
- その他(Microsoft Office) 【スプレッドシート】白色のセルをカウントしたい 2 2023/02/24 07:39
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのクイックアクセスツ...
-
エクセルでCtrl+Tでテーブルの...
-
DATE関数で現在の年齢を出した...
-
Excelで表を作ったところに文字...
-
エクセルのクイックアクセスツ...
-
在庫管理表に使うエクセルの関...
-
ユーザー定義関数をアドイン登...
-
職場の人から聞かれており、こ...
-
REGEXREPLACE関数について、
-
エクセルでバーコード作成し使...
-
下記マクロでMsgBox "空白です...
-
Excel関数-文字列で自動作成さ...
-
エクセルで表
-
【マクロ】for next構文について
-
エクセルの関数について教えて...
-
Excelデータをコピペして、ペー...
-
エクセルで特定の範囲内から小...
-
PDFの請求明細をエクセルにしたい
-
Excelで50個のセルに同じ文字を...
-
エクセルで会社の従業員のデー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA、別ブックへ転記す...
-
エクセルでの作業計算方法について
-
時間によってファイル名が変わ...
-
【関数】適切な文字数の数字を...
-
Excelについて教えてください
-
エクセル初心者です 関数の入れ...
-
【マクロ】ファイル名の変更に...
-
UNIQUE関数が使えないバージョ...
-
エクセルの計算
-
【関数】先頭だけにある、半角...
-
Excelで、決まった行を繰り返し...
-
Excelでセルの値が同じか...
-
LOOKUP関数を使えばいいのでし...
-
Excel
-
はがきについて。
-
エクセルの条件付き書式につい...
-
エクセルのデーターが2か月前の...
-
エクセル②
-
エクセルで「-0.0」と表示さ...
-
Microsoft1Officeの互換ソフト...
おすすめ情報