• ベストアンサー

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

  • Format 関数のバグ?

    今、OS:WindowsXP Pro SP2 VB:6.0 SP6 の環境でアプリケーションを作成しています。 上記の環境で、Format関数に関して質問があります。 今、2桁の文字列のコードをゼロ埋め(0 埋め)にして表示させたいと考えております。そこで、以下の関数を利用いたしました。 Format("19", "00") Format("1A", "00") Format("1B", "00") を呼び出し、"19","1A","1B"と返答結果を期待しているのですが、 実際に実行すると、"19","00","1B"と返答されてしまいます。 なぜ、"1A"だけ、"00"と返答されるのでしょうか。 仕様でしょうか?

  • Format関数の戻り値

    Format関数で戻り値がおもうようにとれません。 どうしてかわからず困っています。 以下の2パターンの違いがわかりません "0A"はなぜ"00"になってしまうのですか? (VBバージョンは6.0です) format("0D","00") 結果 "0D" format("0A","00") 結果 "00"

  • VBのFORMAT関数

    VBのFORMAT関数についての質問です。 Format(変数,"!") "!"<--これの書式って どのような意味(書式)なんでしょうか? ランゲージレファレンスにも載っていませんでした。 よろしくお願いします

  • VB関数(FORMAT関数)

    素人でよく分からないのですが,VBを使用してプログラムを作成しようとしていますが,以前VB関数のFORMATを使用して四捨五入処理すると,正しく四捨五入されないと聞きましたが,これは本当ですか? また,最新バ-ジョンのVBではこの様なことは起こらないのですか?

  • format関数について

    VBで時刻をミリ秒まで表示したいのですが FORMATでSSより小さな単位ありますか? もしくはFORMAT関数を使用しないで表示できますか?

  • ASPでVBのFormat関数のような機能を使用したい

    ASPでVBのFormat関数のような機能を使用したいのですが無理でしょうか? (例) 1 を → "00001" に変換したい (例2) 10 を → "00010" に変換したい VBで使用してた機能 Result = Format(1,"00000") 上記のような機能をASPでありますでしょうか? どなたかご存知の方ご教授お願いいたします。

  • Format関数について

    こんにちわ。 単純な質問なのですが、VBで数値をFormatする場合、 "123456" → "123,456" "123456.78" → "123456.78" というように、小数点がない場合は小数点以下は表示されず、 小数点がある場合は小数点以下の表示をする。というような Formatを一行でできないでしょうか? 小数点は2桁で固定です。 よろしくお願いします。

  • format関数についてです。

    A→0A、B→0B、C→0Cという風にFORMAT関数で変換 したいでです。 format("A","00")の結果は「A」です。 どのような文字列で、変換できるのでしょうか? それともこのような処理は、format関数ではできないのでしょうか? 今は力づくで、"A"なら"0A"、"B"なら"0B"と select文で書いています。

  • VB6のFIX関数での誤差について

    VB6のFIX関数を使用すると次の事象が発生しました。 私自身で制限事項等を調べてみたのですが、探す事が できませんでした。FIX関数へは、DOUBLE型の数値また は数式を入れる構文となっていますが、今回はDOUBLE型 への明示的な変換は行っていませんでした。しかし、VB6 はデータ型をあまり意識しなくても良い仕様の言語である ので内部的にDOUBLE型へ変換しているのであれば誤差が あるのは矛盾していると思います。 マイクロソフトのサポートもVB6については終了している ので個人的に聞いてもだめでした。 また、VS2005で同じFIX関数を試してみると正確な値が戻 ってきました。 以上、よろしくお願いします。 FIX(7520*0.15) を実行すると「1127」が表示されます。 実際は、「1128」なのですが1円の誤差が発生します。 FIX(DOUBLE(7520*0.15))を実行すると「1128」が表示され ます。 ※ 実行環境 OS:Windows XP SP2、 Visual Basic Ver 6 Professional SP5

  • VB6のFIX関数での誤差について

    VB6のFIX関数を使用すると次の事象が発生しました。 私自身で制限事項等を調べてみたのですが、探す事が できませんでした。FIX関数へは、DOUBLE型の数値また は数式を入れる構文となっていますが、今回はDOUBLE型 への明示的な変換は行っていませんでした。しかし、VB6 はデータ型をあまり意識しなくても良い仕様の言語である ので内部的にDOUBLE型へ変換しているのであれば誤差が あるのは矛盾していると思います。 マイクロソフトのサポートもVB6については終了している ので個人的に聞いてもだめでした。 また、VS2005で同じFIX関数を試してみると正確な値が戻 ってきました。 以上、よろしくお願いします。 FIX(7520*0.15) を実行すると「1127」が表示されます。 実際は、「1128」なのですが1円の誤差が発生します。 FIX(DOUBLE(7520*0.15))を実行すると「1128」が表示され ます。 ※ 実行環境 OS:Windows XP SP2、 Visual Basic Ver 6 Professional SP5

専門家に質問してみよう