• ベストアンサー

FORMAT関数で値が変わる

こんにちは、 Win98でExcel2000のVBAを使用してマクロを組んでいるのですが、FORMAT関数を使っている部分で予想外の結果がでています。 以下、プログラムです。 Private Sub Test() Dim AAA as String AAA = "6P" AAA = FORMAT(AAA,"000") MsgBox AAA End Sub MsgBoxの表示が"06P"になるはずだと思っていたのですが、 なぜが"001"になってしまいます。 他の質問などを見てみると"E"や"D"などでも表示が変わるというものを見ました。"P"も同じようなものなのでしょうか、また"06P"と表示させるにはどうしたらよいでしょうか? どなたかご存知の方がいらっしゃったっらご回答お願い致します。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

私の今までの理解では"000"、"###"、"##0"などの#0は 数字を拾うものと思ってます。 ですから数字・文字混在した場合は混乱します。 Private Sub Test() Dim AAA As String AAA = "6P" AAA = Format(AAA, "@") MsgBox AAA End Sub はいかがですか。 「06P」にするには、数字部分と文字部分を分けて 数字部分のみ「00」(2桁)書式適用しないといけない ようです。 001になる理由は良く判りません。 Private Sub Test() Dim AAA As String For i = 65 To 90 AAA = "6" & Chr(i) AAA = Format(AAA, "000") Cells(i - 64, "A") = AAA Next i End Sub を実行するとAとPが0と1になった。 AM,PMと関係あるのかな。 Private Sub Test() Dim AAA As String For i = 97 To 122 AAA = "6" & Chr(i) AAA = Format(AAA, "000") Cells(i - 96, "A") = AAA Next i End Sub でもaとpが大文字と同様でした。

miyaxyz2002
質問者

お礼

ご回答ありがとうございます。 'A','P'というのは時刻に関する書式設定みたいですね。 ご回答のように数値部分と文字列部分を分けて処理してみようと思います。 詳しく調べていただいてありがとうございます。参考になりました。

その他の回答 (2)

回答No.3

FORMATは数値や日付の書式設定関数なので、 文字列は正しく書式設定出来ないと思います。 単に、ゼロ詰めするだけなら、次の通りでいかがでしょうか? ---------------------- Private Sub Test() '文字 "0" Const STR_ZERO_CHAR As String = "0" '書式設定後文字列の長さ Const LNG_STR_LENGTH As Long = 3 Dim strInput As String Dim strOutput As String strInput = "6p" strOutput = String$(LNG_STR_LENGTH - Len(strInput), STR_ZERO_CHAR) & strInput Call MsgBox(strOutput) End Sub

miyaxyz2002
質問者

お礼

ご回答ありがとうございます。 FORMAT関数を使って処理することばかり頭にあったのですが、ご回答のように数値部分と文字列部分を分けて処理してみようと思います。

回答No.1

6P というのは PM 6 時の意味でしょうか? そうでなくて、英字の部分は D や E がありえるということでしたら、数字の部分と最後の英字とを分解して AAA = "6P" NNN = Left(AAA, Len(AAA) - 1) LLL = Right(AAA, 1) MsgBox Format(NNN, "00") & LLL のようにでもすればいいと思います。 6P とか 1A のように 時刻を表すものという意味でしたら、 AAA = "6P" AAA = Format(AAA, "hhA/P") MsgBox AAA のようにすればよいと思います。

miyaxyz2002
質問者

お礼

ご回答ありがとうございます。 >6P というのは PM 6 時の意味でしょうか? いいえ、"6P"は"-67"をホスト形式用に変換した値です。 値が0より小さかったら一桁目を'J'~'R','}'('1'~'9','0'に対応)に変換して-の値を表すという処理をやっています。 'P'以外の値のときは問題なく処理出来ていたので、何故'P'の時だけ?という感じでしたが、'P'というのは時刻に関する書式設定なんですね。 ご回答のように数値部分と文字列部分を分けて処理してみようと思います。

関連するQ&A