

こんにちは、
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"と表示させるにはどうしたらよいでしょうか?
どなたかご存知の方がいらっしゃったっらご回答お願い致します。
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が大文字と同様でした。
ご回答ありがとうございます。
'A','P'というのは時刻に関する書式設定みたいですね。
ご回答のように数値部分と文字列部分を分けて処理してみようと思います。
詳しく調べていただいてありがとうございます。参考になりました。
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
ご回答ありがとうございます。
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
のようにすればよいと思います。
ご回答ありがとうございます。
>6P というのは PM 6 時の意味でしょうか?
いいえ、"6P"は"-67"をホスト形式用に変換した値です。
値が0より小さかったら一桁目を'J'~'R','}'('1'~'9','0'に対応)に変換して-の値を表すという処理をやっています。
'P'以外の値のときは問題なく処理出来ていたので、何故'P'の時だけ?という感じでしたが、'P'というのは時刻に関する書式設定なんですね。
ご回答のように数値部分と文字列部分を分けて処理してみようと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA。複数のChangeイベントをまとめる方法 2 2022/03/31 12:03
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) テーブルを配列に入れて、元のテーブルの行番号を取得したい 1 2022/08/16 20:15
- Excel(エクセル) エクセルVBA、ファイル名をセルの値で保存の方法を教えてください。 おそれいります。こちらで数々のエ 6 2023/06/30 22:17
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/01/23 17:13
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 09:24
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マイナス記号を▲で表す方法
-
【VBA】計算結果に小数点第2位...
-
VBA 条件付き書式で空欄は適用...
-
grep で複数条件を指定
-
時間表示で0:48:17と入力すると...
-
MsgBoxの中にある数字や日付の...
-
スライドショーの画像切替タイ...
-
spread6.0(セル連結)
-
Apache起動エラー
-
スリープ状態とロック状態の違...
-
拠点間WANなどでの『専用線...
-
中古のパソコン購入 オフィスの...
-
パソコンの立ち上げた履歴を調...
-
社内LANの配線図を作りたい。
-
blackjumbodogでメールサーバー...
-
IISが落ちた場合の動きについて
-
ソフトのインストール不要のデ...
-
不明配線の捜索ツール
-
スイッチ・スイッチングHUBの管...
-
AppleScriptでアプリケーション...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【VBA】計算結果に小数点第2位...
-
MsgBoxの中にある数字や日付の...
-
VBA 条件付き書式で空欄は適用...
-
VBA コンボボックスの表示(日...
-
クリスタルレポートの改ページ...
-
POIを使った書式設定
-
マイナス記号を▲で表す方法
-
spread6.0(セル連結)
-
チェックボックスのある行を非...
-
C#にて、他言語にローカライズ...
-
Format関数について
-
syntax error, unexpected $end...
-
NTBackUpの設定
-
MSAccessでODBCを介してDB接続...
-
PDTのデバッグツール、
-
エクセルのメモについて教えて...
-
条件付き書式について
-
16進数の文字列を普通の文字列...
-
FORMAT関数で値が変わる
-
日曜日始まりのボックス型の万...
おすすめ情報