タイトル : 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 |