• ベストアンサー

vba 「02」を返したいのですが

Sub test() Debug.Print Month(Date) End Sub のようなコードの時に 月の表記を02のように2桁で返すにはどうすればいいですか? Debug.Print Format(Month(Date), "mm") これだと、なぜか「01」が返ります。 「02」を返したいのですが、どうすればいいでしょうか?

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

  • ベストアンサー
  • Meegeren
  • ベストアンサー率44% (204/459)
回答No.7

>Debug.Print Format(Date, "mm") >Month関数自体が不要。 これじゃ、あまりにも不親切なので一応説明 Month関数はVariant型を返します つまり、対象がDate関数なので当日の「月」に当たる値(数値)を返してるんですね これが質問にある2月の「2」です この時点で返り値は数値タイプのVariant型になっています 日付型の管理は数値で管理されています MSの場合、日付の初期値「0」は1899/12/30です ですから、Month関数で返した「2」は初期値の「2」日後である「1890/1/1」を示しています Format関数は変換対象の「1890/1/1」の月の値「1」に対して、”mm"の日付型書式で返しているので「01」が返っているんです Format関数の日付型書式は、変換対象が日付と認識できる数値かDate型であれば機能します つまり、Date関数はDate型の値(当日)を返します Format(Month(Date), "00") と書き換えれば、”00”の文字列型書式で「02」を返すことができますが、プログラミングをする場合、無用な関数の使用はバグの原因になりますので、Month関数を削り Format(Date, "mm") で十分と思います

awxixkbxl
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (6)

  • chayamati
  • ベストアンサー率41% (260/625)
回答No.6

フォームにテキストボックスを配置してこのプロパティーの データタグ内のコントロールソースに =Format(Month(Date()),"00")とするのはいかがですか

awxixkbxl
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。
回答No.5

続補足:なぜ、01が戻るのか?

awxixkbxl
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

Sub test01() MsgBox Month(Date) MsgBox Format(Date, "mm") End Sub mmは、エクセルの日付シリアル値を年月日表示に直し、その月部分をMonthで取るので、そのままでよい。 Format(Month(Date),だと、2月21日では)Month(Date),が「2」なので、日付シリアル値が「2」の1900年1月2日の月を取る(すなわち01ででしょう)。 1段余分なことをしているのことになるのでしょう。

awxixkbxl
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。
回答No.3

【補足】 Month(date) ---> 1900/01/01ですから ? Format("1900/01/01", "mm") 01 となります。

awxixkbxl
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。
  • Meegeren
  • ベストアンサー率44% (204/459)
回答No.2

Debug.Print Format(Date, "mm") Month関数自体が不要。

awxixkbxl
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。
回答No.1

Q、「02」を返したいのですが、どうすればいいでしょうか? A、やり方は2つ。 添付図を参照して試してみて下さい。

awxixkbxl
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A