• 締切済み

エクセルVBAでの時間計算方法

エクセル2000のVBAで時間の計算をしていますが、0:00を超えたデータの計算がうまくいきません. 例えば dim a as date 開始時間 dim b as date 終了時間 dim xas date 使用時間 x = b - a 例えば 終了時間(25:10:00)ー開始時間(23:15:00)の場合,終了時間が1:10:00になっているようなのですが、24:00以降セットする方法はありますか? 他にVBAを使用してなにか簡単な方法がありますか?

みんなの回答

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.1

>終了時間が1:10:00になっているようなのですが 翌日の1:10:00なので、日にちの情報を入れれば、ちゃんと計算されると思います

関連するQ&A

  • エクセルVBAの時間計算

    Excel2000を使用しています. VBAで時間計算をしていまうが、日をまたぐ時間計算がうまくいきません. 例 dim a as date  ’入室時間 dim b sa date   ’退室時間 dim x as date  ’滞在時間 x= b - a で aが23:00 bが25:30 だと xが2:30 になりません. 日付データはありませんので、時間だけで計算したいのです.

  • VBAでの年齢計算がうまくいきません。

    失礼いたします。  VBAで年齢の計算を行いたいのですがなかなかうまくいきません。 =sub Dim 開始日付 As String Dim 終了日付 As String Dim 年齢 As String 開始日付 = "S54/4/1" 終了日付 = "H22/4/1" 年齢 = "=DATEDIF(開始日付,終了日付,""Y"")" =endsub としても、DATEDIF関数は引数をうまく処理してくれないのです。 エクセル関数を使わずに、年齢を算出するか。 エクセル関数内に引数を代入する方法があれば教えていただけないでしょうか?

  • エクセルVBA(2007)での時間計算について

    エクセルVBA(2007)での時間計算について お聞きします。 勤怠集計表をVBAで作成しています。 ボタンを押すと各社員の勤務時間の計算を自動で行うマクロを作成していますが、 勤務時間の計算で困っています。 (1)5:00~22:00での勤務時間、(2)22:00~の勤務時間を出力します。 出社時間・休憩開始時間・休憩終了時間・退社時間の項目があります。 例えば、上記の項目順で、10:00・12:35・13:25・0:30の場合、深夜時間での計算がうまくいきません。 休憩時間を引くと(1)は11:10時間、(2)は2:30時間になると思いますが、計算はどの様にすれば良いでしょうか? 教えて下さい。

  • エクセルVBAについて

    VBAを勉強しているものです。 添付資料のようなグラフを作っております。 ############################################################### Sub 時間グラフ作成() Dim 開始 As Date Dim 終了 As Date Dim 開始経過時間 As Long, 終了経過時間 As Long Dim 開始目盛 As Long, 終了目盛 As Long 開始 = Worksheets("(1)(1)(1)(1)(1)").Range("F2").Value 開始経過時間 = DateDiff("n", CDate("9:00"), 開始) 開始目盛 = Int(開始経過時間 / 5) Worksheets("(2)(2)(2)(2)").Range("H2").Offset(, 開始目盛).Interior.ColorIndex = 8 If 開始 <= "11:00" And 終了 >= "12:00" Then 終了 = Worksheets("(1)(1)(1)(1)(1)").Range("G2").Value 終了経過時間 = DateDiff("n", CDate("9:00"), 終了) 終了目盛 = Int(終了経過時間 / 5) Worksheets("(2)(2)(2)(2)").Range("H2").Offset(, 終了目盛 - 12).Interior.ColorIndex = 8 Range(Range("H2").Offset(, 開始目盛), Range("H2").Offset(, 終了目盛 - 12)).Interior.ColorIndex = 8 Else 終了 = Worksheets("(1)(1)(1)(1)(1)").Range("G2").Value 終了経過時間 = DateDiff("n", CDate("9:00"), 終了) 終了目盛 = Int(終了経過時間 / 5) Worksheets("(2)(2)(2)(2)").Range("H2").Offset(, 終了目盛).Interior.ColorIndex = 8 Range(Range("H2").Offset(, 開始目盛), Range("H2").Offset(, 終了目盛)).Interior.ColorIndex = 8 End If End Sub ############################################################### 休憩時間のIfの処理がうまくいかなくて困っています・・・。 &とAndで変わったり(どちらもうまくいかず)、 ()をつけたりしても変わらず、そもそも根本的に 間違っているのか・・・。 よろしくお願いいたします。 (グラフの繰り返しの処理は未だ考え中で触っておりません)

  • エクセルで時間の計算について

    時給計算する為の表を作成しています。 時給は時間帯で変るので、時間帯ごとの時間数が出るように計算したいのですが、 自分で考えると条件式を多用して複雑になってしまいます。 もっと簡単に出来るアイディアはありませんか? 具体的な内容です。 6:00~12:00の間は900円(A時間帯) 12:00~17:00の間は800円(B時間帯) 17:00~20:00の間は900円(A時間帯) 勤務開始及び終了時刻はは6:00~20:00までの間、日によってバラバラです。 データの入力は勤務開始時刻と終了時刻を入力します。 そのうえで、A時間帯が○時間(午前と夕方以降の合計)、B時間帯が△時間という結果を得る為の 良い方法があれば教えてください。

  • vba 指定した日付範囲でセルの色を塗る

    急遽、エクセルVBAを組んでくれと頼まれたのでわかる方、教えていただけますか? 開始日時(A行)と終了日時(B行)があり、 開始と終了の範囲でC以降日付になっており 指定の範囲内でセルの色が塗られるいうものなのですが なにせ急ぎとVBAがほとんどわからないのでなるべくわかりやすく 教えていただけるとありがたいです。 ちなみにsheetにコードを記入するのとmoduleにコードを記入するのでは どう違うのですか?わからないまでも一応、色が塗られるところまでは できたのですがどうやってセルの時間を取得して範囲を指定すれば 良いのかなどがわかりませんどうかよろしくお願い致します。 下記は作成途中ですが・・・ Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim row As Integer Dim line As Integer row = 5 line = 9   Set objR = Range("A1").Resize(1, 4).Offset(1, 2) objR.Interior.ColorIndex = 8 End Sub

  • エクセルのVBAについて。

    エクセルのVBAのことは全く分かりませんが、他人の書いたVBAを使わせてもらい、自動で一定の間隔ごとに私が記録したマクロを動すようにしています。 そこで質問なのですが、午前8時00から、午前2時00まで5分おきに動かしたいのですが、日付が変わると動作しなくなってしまいます。どこが悪いのでしょうか? Option Explicit Dim mcolTask As Collection Sub 実行予約() Dim i As Date Dim strProcName As String Dim datBigin As Date Dim datEnd As Date Dim datInterval As Date Dim datTimeout As Date Dim blnJustTime As Boolean ' Setting------------------------------------------------------- datBigin = TimeValue("08:00:00") ' 開始時刻 datEnd = TimeValue("02:00:00") ' 終了時刻 datInterval = TimeValue("00:05:00") ' 実行間隔(少なくとも数秒以上で) datTimeout = TimeValue("00:02:00") ' 実行待機タイムアウト blnJustTime = True ' datInterval で丸めるか strProcName = "MACRO1" ' 実行するマクロ名 '--------------------------------------------------------------- ' 既に実行予約されているか確認 If mcolTask Is Nothing Then ' 日付シリアル値を加算 datBigin = datBigin + Date datEnd = datEnd + Date ' 終了時刻が開始時刻より小さければ日をまたぐので補正 If datEnd < datBigin Then datEnd = datEnd + 1 ' 現在時刻が既に終了時刻を過ぎている場合 If datEnd < Now() Then MsgBox "終了時刻を過ぎているため予約できません。", vbCritical, "終了" Exit Sub End If ' 現在時刻が開始時刻を過ぎていれば補正 If datBigin < Now() Then ' 開始時刻を datInterval で指定された値で丸めるか If blnJustTime Then datBigin = Application.Floor(Now() + datInterval, datInterval) Else datBigin = Now() + datInterval End If End If ' 初期化 Set mcolTask = New Collection ' メイン部分 For i = datBigin To datEnd Step datInterval ' 後から取り消せるようにコレクションに退避 mcolTask.Add CStr(i) & "," & strProcName ' Application.Ontime で実行予約を行う Application.OnTime EarliestTime:=i, _ Procedure:=strProcName, _ LatestTime:=i + datTimeout, _ Schedule:=True Next i Else MsgBox "既に実行中です", vbInformation End If End Sub

  • エクセル 勤務時間の計算について

    以下の勤務時間とします。 開始  終了  休憩 実労働時間 09:00 17:30  1:00 7:30 この数値をエクセルにすると、 A1 B1 C1 D1 09:00 17:30 1:00 7:30 D1の時間算出 =(A1-B1-C1) となりますが、 このD1の7:30 を 7.5で算出したいのですが 簡単な計算式(セルD1内で計算)を教えてください。

  • EXCEL VBA Byte型に"0"を付けたい

    EXCEL VBAにてあるセルの値をByte型の16進数に 変換していますが、変換後の値の頭に"0"が付かなくて 困っています。 Dim a As String Dim aa As String Dim b As Byte Dim bb As Byte a = Val("&H" & Cells(1, 1)) aa = Format(a, "00") b = aa bb = Format(b, "00") 変数など簡略化していますが、こんな感じです。 最後の"bb"の中身が、例えば"01"ではなく"1"と なってしまっています。 バイナリエディタで表示した時に、"111"ではなく "010101"と表示させたいのですが、、、 この方法にこだわっている訳ではないので 他の方法も含めて、ご教示お願いします。

  • エクセルで時間計算

    エクセルで時間計算をしているのですが A1セルに開始時刻  B1セルに終了時刻  C1セルは作業時間   9:00         4:00           7:00 このような表を作っています 「C1」には(B1+12:00)マイナス「A1」と数式があるのですが 「B1」に入る時刻が午後でなく午前11:00だと 「C1」の数式のままでは (11:00+12:00)- 9:00 で 14:00 となってしまいます 「B1」には24時間形式で午後4:00を16:00と入力すればよいのですが 24時間形式を使わず9:00マイナス4:00を正しく計算するには どのような数式にすればよいのでしょうか IF文を使うのかなとも思うのですが 見当がつきません。宜しくお願いいたします。

専門家に質問してみよう