dポイントプレゼントキャンペーン実施中!

こんにちは、
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"と表示させるにはどうしたらよいでしょうか?

どなたかご存知の方がいらっしゃったっらご回答お願い致します。

A 回答 (3件)

私の今までの理解では"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が大文字と同様でした。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

'A','P'というのは時刻に関する書式設定みたいですね。
ご回答のように数値部分と文字列部分を分けて処理してみようと思います。

詳しく調べていただいてありがとうございます。参考になりました。

お礼日時:2004/08/30 10:44

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
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

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

お礼日時:2004/08/30 11:03

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
のようにすればよいと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>6P というのは PM 6 時の意味でしょうか?
いいえ、"6P"は"-67"をホスト形式用に変換した値です。
値が0より小さかったら一桁目を'J'~'R','}'('1'~'9','0'に対応)に変換して-の値を表すという処理をやっています。

'P'以外の値のときは問題なく処理出来ていたので、何故'P'の時だけ?という感じでしたが、'P'というのは時刻に関する書式設定なんですね。
ご回答のように数値部分と文字列部分を分けて処理してみようと思います。

お礼日時:2004/08/30 10:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!