Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8279 / 13644 ツリー ←次へ | 前へ→

【34141】勤務時間の計算 06/1/27(金) 10:51 質問[未読]
【34147】Re:勤務時間の計算 inoue 06/1/27(金) 12:34 発言[未読]
【34153】Re:勤務時間の計算 06/1/27(金) 14:09 質問[未読]
【34163】Re:勤務時間の計算 06/1/27(金) 15:30 お礼[未読]
【34166】Re:勤務時間の計算 inoue 06/1/27(金) 16:06 発言[未読]
【34173】Re:勤務時間の計算 gako 06/1/27(金) 17:21 質問[未読]
【34190】Re:勤務時間の計算 かみちゃん 06/1/28(土) 7:59 発言[未読]
【34192】Re:勤務時間の計算 gako 06/1/28(土) 9:53 質問[未読]
【34212】Re:勤務時間の計算 かみちゃん 06/1/28(土) 21:37 回答[未読]
【34224】Re:勤務時間の計算 inoue 06/1/29(日) 0:52 発言[未読]
【34230】Re:勤務時間の計算 gako 06/1/29(日) 9:29 お礼[未読]

【34141】勤務時間の計算
質問    - 06/1/27(金) 10:51 -

引用なし
パスワード
   タイムシートを作成しています。


   A  B  C    D    E   F  G  H
1 日付 出勤 退出 勤務時間 残業時間
2 7:40 20:40


こんな感じで作っているのですが
残業時間の計算はどうすればいいのでしょうか?

普通に=b2-a2 と計算するとエラーが出るので
F2に=TIMEVALUE(SUBSTITUTE(TEXT(I14,"0-00"),"-",":"))
G2に=TIMEVALUE(SUBSTITUTE(TEXT(J14,"0-00"),"-",":"))
H2に=G2-F2
と入力してみました。

残業時間を算出する際には昼休み1:00を引いた時間を計算したいのですが

日勤だけでなく夜勤の計算もあるので困っています。
何かいい方法があったら教えてください。

【34147】Re:勤務時間の計算
発言  inoue E-MAILWEB  - 06/1/27(金) 12:34 -

引用なし
パスワード
   >普通に=b2-a2 と計算するとエラーが出るので
セルの書式をユーザー設定で
[h]:mm
にしてそのように入力すると、
A2セルは数式バーには、
7:40:00
と表示され、B2セルは、
20:40:00
と表示されるはずです。
この状態では
>=b2-a2
と言う式が入ったセルは同じ書式にしておけば、
13:00
と表示されます。

【34153】Re:勤務時間の計算
質問    - 06/1/27(金) 14:09 -

引用なし
パスワード
   ▼inoue さん:

ありがとうございます。
時間を入力する際は「700」と入力すると勝手に「7:00」となるように
したいので書式設定で00":"00にしてあります。

昼休み・夜勤(日付がまたがる)の計算はどのようにすればいいでしょうか?

【34163】Re:勤務時間の計算
お礼    - 06/1/27(金) 15:30 -

引用なし
パスワード
   すみません、普通にiserror使ったらできました。
ありがとうございました

【34166】Re:勤務時間の計算
発言  inoue E-MAILWEB  - 06/1/27(金) 16:06 -

引用なし
パスワード
   できたのでしょうか。

>書式設定で00":"00にしてあります。
この場合、中間計算セルを用意して日付時刻として計算できるようにして、
上記の説明のように「引き算」をすれば良いです。

「日またぎ」については
日付時刻型では1日が「1」の増分なので、
翌日側に「1」を加えます。

【34173】Re:勤務時間の計算
質問  gako  - 06/1/27(金) 17:21 -

引用なし
パスワード
   ▼inoue さん:

>▼inoue さん:
>時間を入力する際は「700」と入力すると勝手に「7:00」となるように
>したいので書式設定で00":"00にしてあります。

この入力は時間計算をしない筈ですよ。面倒でも時間の計算は「:」を
入力するようにしたほうが良いでしょう。

【34190】Re:勤務時間の計算
発言  かみちゃん  - 06/1/28(土) 7:59 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>>時間を入力する際は「700」と入力すると勝手に「7:00」となるように
>>したいので書式設定で00":"00にしてあります。
>
>この入力は時間計算をしない筈ですよ。面倒でも時間の計算は「:」を
>入力するようにしたほうが良いでしょう。

700という値を7:00:00という時刻型にするには、
一般関数だと、
=TIMEVALUE(TEXT(700,"0!:00"))
VBAでするならば、
Sub Macro1()
 Dim Data As Integer

 Data = 700
 MsgBox TimeValue(Format(Data, "0\:00"))
End Sub
とすれば、できます。

以上、参考になれば・・・

【34192】Re:勤務時間の計算
質問  gako  - 06/1/28(土) 9:53 -

引用なし
パスワード
   ▼かみちゃん さん:

とても参考になりました。

Private Sub Worksheet_Change(ByVal Target As Range)
を使い、A列に時間の棒打ち(例えば700)と入力して
「7:00」とするには、どのように書けばよいのでしょうか?
Function関数が必要でしょうか?

作成してみたのですが、上手く動きません。
アドバイスお願いします。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
Dim data As Integer

With Application
  Set Rng = .Intersect(Range("A1:A10"), Target)
  If Rng Is Nothing Then Exit Sub
  .EnableEvents = False
  Rng.Value = TimeValue(Format(data, "0\:00"))
  .EnableEvents = True
End With
Set Rng = Nothing
End Sub

【34212】Re:勤務時間の計算
回答  かみちゃん  - 06/1/28(土) 21:37 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>Private Sub Worksheet_Change(ByVal Target As Range)
>を使い、A列に時間の棒打ち(例えば700)と入力して
>「7:00」とするには、どのように書けばよいのでしょうか?

入力した値が変換されず、変数dataが変換されています。
入力した値を変数dataに格納してもいいのですが、
以下のような感じで十分か思います。

Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Count > 1 Then Exit Sub
 If IsEmpty(Target.Value) Then Exit Sub
 With Application
  If .Intersect(Range("A1:A10"), Target) Is Nothing Then Exit Sub
  .EnableEvents = False
  Target.Value = TimeValue(Format(Target.Value, "0\:00"))
  .EnableEvents = True
 End With
End Sub

【34224】Re:勤務時間の計算
発言  inoue E-MAILWEB  - 06/1/29(日) 0:52 -

引用なし
パスワード
   ▼gako さん:
>この入力は時間計算をしない筈ですよ。面倒でも時間の計算は「:」を
>入力するようにしたほうが良いでしょう。
だから
>中間計算セルを用意して日付時刻として計算できるようにして
と書いたのですが。

元入力は別に
>書式設定で00":"00にしてあります。
でも良いのです。
中間計算で下位2桁と上位桁に分けて
TIME関数を使えば計算式ベースでも日付時刻データに置き換えられます。

ただ、条理チェックも含めると複雑なので、
入力セルが固定していないと難しいです。

【34230】Re:勤務時間の計算
お礼  gako  - 06/1/29(日) 9:29 -

引用なし
パスワード
   ▼かみちゃんさん、inoue さん:

アドバイス・ご指導ありがとうございました。
勉強になりました。
これからも宜しくお願いします。

>>書式設定で00":"00にしてあります。
>でも良いのです。
>中間計算で下位2桁と上位桁に分けて
>TIME関数を使えば計算式ベースでも日付時刻データに置き換えられます。
そうですね。理解しました。
ありがとうございます。

8279 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free