tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^3: 日付関数DateValueについて
投稿日: 2011/01/08(Sat) 14:49
投稿者花ちゃん
> 事の発端は「シリアル値を求める」ことで、「シリアル値とは1900年1月1日を1とし、
> その日からの通算日数と時刻を表す値のことです」とあり、DateValue("1900/1/1")
> の値が2になったことで混乱しはじめました。

だから、それはどこに書いてあった事ですか?
Excel の関数での説明の中での事じゃないのですか?
(Excel では、1900/02/29 が存在するが VB系では、存在しない)

> シリアル値=DateValue(ymd)の値-1と計算すればよかったようです。

違いますよ、Excel の関数と VB6.0 VBA 最近のVB2010 とでは、1900/02/29 の
扱いが違うので、 1900/02/29 以降の値は、Excel もVB も同じになるので
-1 したら問題になりますよ。
Debug.Print CDate("2")            '1900/01/01
Debug.Print CDate(Val("2") - 1)   '1899/12/31

Debug.Print CDbl(DateValue("1900/02/28"))   '60
Debug.Print CDbl(DateValue("1900/03/01"))   '61

Excel
=DATEVALUE("1900/02/28")   '59
=DATEVALUE("1900/02/29")   '60
=DATEVALUE("1900/03/01")   '61

尚、前回の私の回答中、
>Excel の場合、1900 年はうるう年としているようです。(バグ? 故意)
は、調べた結果 Excel では、旧のバージョンとの互換性のため、1900 年を
うるう年として扱っているようです。(詳しくは下記参照)
(逆を言えば、1900/01/01 を 1 としないと計算が合わない)
http://support.microsoft.com/kb/214019/ja
http://support.microsoft.com/kb/214326/ja

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。