Excel VBA質問箱 IV

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

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


27177 / 76732 ←次へ | 前へ→

【54879】Re:正しい時間表示ができません
発言  ichinose  - 08/4/3(木) 6:51 -

引用なし
パスワード
   ▼HCM さん:
おはようございます。

>今回初めてVBAを使っている初心者ですが、どうしても原因がわからない
>問題が出ています。
>勤務時間の総計を求めようとしていますが、うまく表示できません。
>
>Date型変数を用意して、これに任意のセルに書かれた時間を取得して加
>算していくのですが、数箇所だけ加算しているのにも関わらず、時間が
>減算されて表示されます。
>一例では、40:00+8:00時、48:00となるはずが、"24:00"と表示されます。

バグだと思いますけどねえ!!

>tTime = tTime + CDate(ActiveCell.Offset(i, 0).Value)

これ↑実際には、小数桁の多い数の足し算ですから、
計算上は、48:00になる結果もぴったりの48:00(=2)ではなく、
微妙に小さいですね!!

この時にバグが発生しているようにです。

Sub test()
  Dim dd As Date
  dd = 1.9999998
  Cells(1, 1).Value = dd
  dd = 2
  Cells(1, 2).Value = dd
End Sub

A1とB1では、丸々1日違いますからねえ!!
では、どこら辺りでこの現象が発生するかという値の限界値は?

Sub test2()
  Dim dd As Date
  dd = 1.99999
  Cells(1, 1).Value = dd
End Sub

上記の1.99999では、正しい値の1900/1/1 23:59:59
これを表示しますが、

小数桁をもう一つ増やして試すと

Sub test3()
  Dim dd As Date
  dd = 1.999999
  Cells(1, 1).Value = dd
End Sub

1900/1/1 00:00:00 なってしまいます。

バグっぽいねえ!!

Double型で行うとこのバグは発生しませんねえ!!

そういえば、Excelの時間関連の関数って返る値ってDouble型の値なんですよね!!


now() timevalue ...

よって、Double型で計算しましょう!!

>以下はDate型変数の表示形式を日付に変え時の表示結果です。
>加算処理がおかしい気もするのですが、同様の加算処理をDouble型で行
>った所、値は増加しているので、処理には問題無いようにも思えます。
>
>1.期待値(32:00), Date型変数値(1990/1/1 8:00), Double型変数値(1.333333..)
>2.期待値(40:00), Date型変数値(1990/1/1 16:00), Double型変数値(1.666666..)
>3.期待値(48:00), Date型変数値(1990/1/1 0:00), Double型変数値(2.0)
> 3の実際の表示は24:00
>
>実際の時間取得〜加算処理コードは以下となっています。
>どうしておかしな表示になる事があるのか、ご教授願えませんでしょうか?
>宜しくお願い致します。
>
>  Dim tTime As Date
>  Dim iTime As Double
>
>  For i = 1 To 31
>    'セルから工数取得〜工数加算
>    tTime = tTime + CDate(ActiveCell.Offset(i, 0).Value)
>    iTime = iTime + CDbl(ActiveCell.Offset(i, 0).Value)
>    '加算結果をテスト表示
>    ActiveCell.Offset(i, 1).NumberFormat = "[h]:mm"  '書式
    ActiveCell.Offset(i, 1).Value2 = tTime
'こんなでも良いですね!!意味は↓とほぼ同じですが・・・、
>    ActiveCell.Offset(i, 2).Value = iTime
>  Next i

1 hits

【54860】正しい時間表示ができません HCM 08/4/2(水) 13:21 質問
【54864】Re:正しい時間表示ができません ひげくま 08/4/2(水) 13:36 発言
【54868】Re:正しい時間表示ができません HCM 08/4/2(水) 13:49 発言
【54879】Re:正しい時間表示ができません ichinose 08/4/3(木) 6:51 発言
【54893】Re:正しい時間表示ができません HCM 08/4/3(木) 14:52 お礼

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