• ベストアンサー

VB6.0 のformat関数について

VB6.0(SP5)のformat関数にて、以下のような場合、異なる結果が帰ってきます。 どのような仕様で結果が異なるのでしょうか?  Format("20050101-1", "0") → "20050101-1" と帰ってきます。  Format("20060101-1", "0") → "1528543" と帰ってきます。 分かる方がいらっしゃたら、お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

興味が湧いたので調べてみました。 "nnnn-1"のような文字列の場合、 "西暦年-月"が指定されたとして、日付として解釈しようとします。 ところで、この時に計算に使用するのは、符号無し2バイト65536以下(0~65535なので正確には未満)の数を使っているようです。 つまり、 20060101年は、65536で割った余り(それ以上の桁はオーバーフローして捨てられます) 6085になり 6085年1月を表す数値(シリアル値)になります。 ところで 20050101の場合、同じく余りが 61621となりますが、 こちらは日付として解釈されません 日付として年が有効なのは 9999年までのようで、 先程の計算の結果が9999を越える結果になる場合、日付として無効であるとしてそのまま文字列として評価されることになります。

project-a
質問者

お礼

お礼が遅くなってすみません。 いろいろ調べていただいてありがとうございました。 エクセルで"1528543"と入力して、日付に書式を変えると"6085/1"と表示され、日付のシリアル値ではないかと推測していましたが、6085年の意味が分かりませんでした。 BLUEPIXYさんの説明で、理解できました。 ありがとうございました。

関連するQ&A