過去ログ

                                Page     310
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼時間の計算で。  えすとれあ 02/11/7(木) 10:11
   ┗Re:時間の計算で。付けたしです。  えすとれあ 02/11/7(木) 11:18
      ┗Re:時間の計算で。付けたしです。  Taka-mk2 02/11/7(木) 12:41
         ┗Re:時間の計算で。付けたしです。  えすとれあ 02/11/7(木) 13:12
            ┗Re:時間の計算で。付けたしです。  Taka-mk2 02/11/8(金) 11:30
               ┗Re:時間の計算で。付けたしです。  こうちゃん 02/11/8(金) 12:19
                  ┗おまけ  こうちゃん 02/11/8(金) 12:28

 ───────────────────────────────────────
 ■題名 : 時間の計算で。
 ■名前 : えすとれあ
 ■日付 : 02/11/7(木) 10:11
 -------------------------------------------------------------------------
   こんにちは。

マクロで時間を計算させてセルに表示させているのですが(hh:mm:ss形式で)、たまに1899/12/31 4:10:10というようにバグってしまう時があります。

なぜこのような表示になってしまうのかが分かりません。。
ご存知の方、おられましたらご教授願います。
 ───────────────────────────────────────  ■題名 : Re:時間の計算で。付けたしです。  ■名前 : えすとれあ  ■日付 : 02/11/7(木) 11:18  -------------------------------------------------------------------------
   すみません、付けたしです。
もう少し詳しく説明します。

まず時間を足していく処理を行って、その合計値を変数に入れています。
その変数はDate型です。

で、時間を足す処理が終了したらセルに書き込んでいるのです。
この時セルの表示形式はh:mm:ssにしています。

どうも、時間を足す処理を行っている最中に合計時間が24:00:00を超えた場合に、1899/12/31 09:09:09などどなるようです。

セルの表示形式を[h]:mm:ss形式にしても変わらないので、元の変数をDate型にしているのが違うのかな?

よろしくお願いします。
 ───────────────────────────────────────  ■題名 : Re:時間の計算で。付けたしです。  ■名前 : Taka-mk2  ■日付 : 02/11/7(木) 12:41  -------------------------------------------------------------------------
   ▼えすとれあ さん:
こんにちはぁ。
寒い寒い東京から。

>まず時間を足していく処理を行って、その合計値を変数に入れています。
>その変数はDate型です。
>で、時間を足す処理が終了したらセルに書き込んでいるのです。

この時間を足す処理というのは、どう行っていますか?
普通に+で足しているのか、それともDateAdd関数を使っているのか、そこが
ちょっとわかりません。
コードとかを載せると、レスもつきやすくなると思うのですが・・・。

DateAddなら24:00:00を越えても日付が変更されて正常に処理されると思いますが、どうなのでしょうか?

いじょ、です。
 ───────────────────────────────────────  ■題名 : Re:時間の計算で。付けたしです。  ■名前 : えすとれあ  ■日付 : 02/11/7(木) 13:12  -------------------------------------------------------------------------
   こんにちは。

普通に+で足していっています。
ちなみにコードはこんな感じです。
sum(n) = sum(n) + CDate(aaa(bbb, ccc))
配列使っていて、ある条件に当てはまる場合の時間を足していっているのです。
普通に、24:00:00を超えたら、30:00:00というようになってくれればいいのに・・・。

DateAddってのを、ちょっと調べてみます。
 ───────────────────────────────────────  ■題名 : Re:時間の計算で。付けたしです。  ■名前 : Taka-mk2  ■日付 : 02/11/8(金) 11:30  -------------------------------------------------------------------------
   ▼えすとれあ さん:
こんにちはぁ!
東京は曇ってきました。

>普通に+で足していっています。
>ちなみにコードはこんな感じです。
>sum(n) = sum(n) + CDate(aaa(bbb, ccc))
>配列使っていて、ある条件に当てはまる場合の時間を足していっているのです。
>普通に、24:00:00を超えたら、30:00:00というようになってくれればいいのに・・・。

この場合、Date型を使うのは不適当だと思います。
Date型は日付及び0:00:00〜23:59:59を表現する型なので、Date型ではないほかの型を使って計算したほうがよさそうです。

ああ、あんまりお力になれずにすみません。
 ───────────────────────────────────────  ■題名 : Re:時間の計算で。付けたしです。  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 02/11/8(金) 12:19  -------------------------------------------------------------------------
   Taka-mk2さん、えすとれあさん、こんにちは
横レス失礼しますね。

Date型は、実際には1899/12/31 00:00:00を 1 とする実数です。
整数部が日、小数部が時間をあらわします。
以下のモジュールを実行してみてください。

Sub TimeTest()

  Dim Test As Date

  Test = CDate("1899/12/31 00:00:00")
  MsgBox "Test=" & Test & " [" & CDbl(Test) & "] "
  Test = Test + CDate("00:00:02")
  MsgBox "Test=" & Test & " [" & CDbl(Test) & "] "
  
  Test = CDate("23:59:59")
  MsgBox "Test=" & Test & " [" & CDbl(Test) & "] "
  Test = Test + CDate("00:00:02")
  MsgBox "Test=" & Test & " [" & CDbl(Test) & "] "

End Sub

最初に変数の値を 変数=CDate("00:00:01") のようにした場合には実態は 1.15740740740741E-05 になります。
これに数値を足し算して24時間を超えた段階で 1.000・・・のようになりますからDate型で表示した場合に"1899/12/31 00:00:01" のようになります。

変数であつかうのでしたら対策として結果を少数位以上と以下に分割して計算したらいかがですか?
 ───────────────────────────────────────  ■題名 : おまけ  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 02/11/8(金) 12:28  -------------------------------------------------------------------------
   エクセルのセル表示で[h]:mm:ss書式で "34:01:01" のように表示したいのなら、変数を"1899/12/30 00:00:00"で初期化してください。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 310