
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
こんにちは、
>頂いたソースを実行してみたのですがうまく動かなかったです。
おかしいですね。私の環境では、うまく行くのですが、
どんなエラーが出ていますか??
>17:00-9:00= 休憩1:00 勤務時間 7:00
こんな感じにも改造しましたけど、このデータを勤務時間を他で利用するときに
不便になると思いますよ。
Public Function ddd(ds As Date, de As Date) As String
Dim dd1 As Double
Dim dd2 As Double
Dim dd3 As Double
Dim kyukei As String
dd1 = DateDiff("h", ds, de)
dd2 = (DateDiff("n", ds, de) Mod 60) / 60#
dd3 = dd2 * 60
If (dd1 + dd2 >= 8.5) Then
dd1 = dd1 - 1
kyukei = " 休憩 1:00"
End If
ddd = Format(de, "hh:mm") & "-" & Format(ds, "hh:mm") & "=" & kyukei & " 勤務時間 " & Format(dd1, "00") & ":" & Format(dd3, "00")
End Function
計算結果シート上
始業時間---就業時間---勤務時間
7:00-------12:00------12:00-07:00= 勤務時間 05:00
7:00-------20:00------20:00-07:00= 休憩 1:00 勤務時間 12:00
7:00-------13:00------13:00-07:00= 勤務時間 06:00
7:00-------15:29------15:29-07:00= 勤務時間 08:29
7:00-------15:30------15:30-07:00= 休憩 1:00 勤務時間 07:30
No.3
- 回答日時:
>if x >= 8.5 then Range("D1")=7.5
このような式は成立しません。
提示されたコードのxは文字型ですし、時刻には8.5と言う値もありませんから・・・。
時刻は0~1未満の間の値(小数)で表すので、8.5時間なら 8.5/24 のように計算出来ます。
Sub test()
Dim x As Single
x = Range("B1") - Range("A1")
Range("C1") = Format(x, "hh:mm")
If x >= (8.5 / 24) Then
Range("D1") = Format(x - (1 / 24), "hh:mm")
Else
Range("D1") = Format(x, "hh:mm")
End If
End Sub
No.2
- 回答日時:
こんにちは、
日にちがまたがっている場合があるのですね。
元データを #2006/9/1 18:00# ~ #2006/9/2 8:30#という表現にしないといけませんが、
以下の様なvbaを作っていました。
Public Function d(ds As Date, de As Date) As String
'時間の計算
d = Format(DateDiff("h", ds, de), "00")
'分の計算と時間との結合
d = d & ":" & Format(DateDiff("n", ds, de) Mod 60, "00")
End Function
計算例をイミディエイトで実行してみると
?d(#2006/9/1 7:00#,#2006/9/2 8:11#)
25:11
?d(#2006/9/1 7:00#,#2006/9/1 8:01#)
01:01
のようになります。
こんな感じで、いいのですかね。???
この回答への補足
頂いたソースを実行してみたのですがうまく動かなかったです。。DataDiffで時間と分だけつかってなんとかならないですかね。とりあえず日付をまたぐ勤務は抜きにして。。
17:00-9:00= 休憩1:00 勤務時間 7:00
といった感じにしたいんですが
No.1
- 回答日時:
C3セルの書式設定(時刻)ができていないだけじゃないですか?
Range("C1") = Format(Range("B1") - Range("A1"), "hh:mm")
この回答への補足
でも、昼休みの休憩を引くのに
合計勤務時間は8.5時間以上は1時間休憩
8.5時間未満は休憩時間無しという処理をしたんです。
変数にRange("C1")を代入してもうまくいかないんですよ。
Dim x as string
Range("C1") = Format(Range("B1") - Range("A1"), "hh:mm")
x = Range("C1")
if x >= 8.5 then Range("D1")=7.5
end if
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
モジュロ
-
ファミリーベーシックのPOKE&H...
-
65536は2の何乗なのでしょうか?
-
PHPとJavaでSHA256の結果を同じ...
-
変化させるセルが変化しない
-
C# 計算処理中に実行中ウィン...
-
VBAで関数をつくる
-
EXCELなどで「返す」という表現
-
C言語で N行*M列 の逆行列を求...
-
エクセルで特定のセルのみを任...
-
prolog計算
-
ファイルの開き方
-
VBAで仕様書は書きますか?
-
VC++コンソールアプリでウイン...
-
正しい五十音順について
-
VBAにてメール作成した際、一部...
-
「Outlookが他のプログラムによ...
-
PICマイコンのコピー(クローン...
-
CreateObject関数について
-
visual studio 2019を使ってい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
変化させるセルが変化しない
-
EXCELなどで「返す」という表現
-
VBAの再計算が反映されない件に...
-
VBAで関数をつくる
-
matlabで計算終了
-
排他的論理和 BCC(水平パリテ...
-
モジュラス103の計算とは何でし...
-
引き放し法による除算アルゴリ...
-
バッチファイルでウインドウを...
-
スレッド処理からダイアログを...
-
数値計算の高速化 (cos, sin, exp)
-
エクセルで特定のセルのみを任...
-
モジュロ
-
関数を使わないで日付の計算を...
-
階乗のマクロ
-
時間(ミリ秒を含む)の引き算
-
なぜオーバーフローになるので...
-
論理演算子.NOT.の使い方
-
PHPとJavaでSHA256の結果を同じ...
おすすめ情報