「VBA month 英語表記」
という検索キーワードでのアクセスに気付きました。
VBAのMonth関数で、英語表記にするには、どうすればいいのかを探していらしたのでしょう。
ExcelにせよVBAにせよ、日付データの扱いに慣れていない方がやってしまう典型的な間違いのひとつです。
Month関数で取得できるのは、月を表す数値だけです。
Month関数では、「Sep」や「September」といった英語表記にすることはできません。
月を英語表記にするサンプルマクロ
VBAで月を英語表記にしたい場合は、Format関数を使いましょう。
MsgBox Format(Date, "mmm") & ":""mmm""を指定"
MsgBox Format(Date, "mmmm") & ":""mmmm""を指定"
End Sub
ワークシート関数のTEXTと同じく、第2引数に文字列「mmm」を指定すれば「Sep」のような省略された表記が、「mmmm」を指定すれば「September」のような表記が得られます。
Month関数は1から12までの整数を返す
「VBA month 英語表記」
を検索なさった方には、Month関数があくまでも「1」から「12」までの整数を返す関数であることを、確認してみることをおすすめします。
拙著『いちばんやさしいExcel VBAの教本』でも多用しているローカルウィンドウで、
(『いちばんやさしいExcel VBAの教本』 p.111より)
Month関数の戻り値の型を確認しましょう。
Dim tmp As Variant
tmp = Month(Date)
End Sub
上記のSubプロシージャを作成して、メニュー[表示]-[ローカルウィンドウ]からローカルウィンドウを表示し、ショートカットキー[F9]でステップ実行してみます。
2018年9月7日に実行した場合、下図のように変数tmpには「9」が代入され、[型]覧にはIntegerと表示されています。
Returns a Variant (Integer) specifying a whole number between 1 and 12, inclusive, representing the month of the year.
と書かれているとおりです。
Month関数はNullを返すこともある
1から12の整数を返すならMonth関数は「As Integer」あるいは「As Long」と定義されていても良さそうですが、オブジェクトブラウザーの詳細ペインを確認すると「As 〇〇」といった記述がありません。
つまりVariantを返すようになっています。
なぜだろうと疑問を持ってヘルプを読むと、
If date containsNull, Null is returned.
という記述があります。
これもローカルウィンドウで確認しましょう。
先のSubプロシージャの、
tmp = Month(Date)
の行を、
tmp = Month(Null)
にしてからステップ実行すると、
確かにNullが変数tmpに代入され、型もNullになっています。
Home » エクセルマクロ・Excel VBAの使い方 » VBA関数 » VBAで月を英語表記に-Format関数