PR

【VBA】数値から月名(文字列)を取得する

これで楽に!?VBA活用
記事内に広告が含まれています。

こんにちは、Ryoです。
1から12までの整数に対し、MonthName関数を使用すると月名を文字列で取得することができます。また、引数に指定することで月名の短い表記を取得することもできますので、今回はその内容について書いていきます。

スポンサーリンク

1.サンプル概要

セルA列に入力されている1~12の数値に対し、「月名」「月名(短)」「月名(短)英語」をそれぞれMonthName関数を利用して取得します。

実行結果としては以下の通りです。月名には「1月」のような文字列を取得し、月名(短)は「1」の形で取得します。英語表記で取得するにはDateSerial関数による日付データへの変換とFormat関数による形式変更を合わせて実行することにより「Jan」のように取得できます。

以上がサンプル概要になります。

2.サンプルコード

Sub Sample1()

 Dim i As Integer
 Dim Y, D As Date

 Range("A2").Select
 '日付より「年」の取得
 Y = Year(Date)
 '日付より「日」の取得
 D = Day(Date)

 For i = 1 To 12
    With ActiveCell
      'B列のセルへMonthName関数により取得した月名を入力
      .Offset(0, 1).Value = MonthName(.Value)
      'C列のセルへ月名(短い表記)を入力
      .Offset(0, 2).Value = MonthName((.Value), True)
      'D列のセルへ月名(英語/短い表記)を入力
      'DateSerial関数を利用して日付データに変換しFormat関数で
      '英語表記を取得する
      .Offset(0, 3).Value = _
      Format(DateSerial(Y, MonthName((.Value), True), D), "mmm")
      '次の行へ移動
      .Offset(1, 0).Select
    End With
 Next i

End Sub

数値から月名を取得するにはMonthName関数を利用します。

構文:MonthName(month[, abbreviate])

引数Monthに1~12の数値を指定することで月名を返します。また、引数abbreviate(省略可)にTrueを指定すると月名を短い表記で取得できます。

日本語環境での短い表記は「1」や「2」の形となりますが、英語圏では「Jan」「Feb」のように取得します。日本語環境で英語表記を取得しようとする場合の一例としてサンプルコードではDateSerial関数とFormat関数を利用して処理しています。

MonthName関数で取得したデータは日付データではありませんので、その値をFormat関数で形式変更したところで正確な英語表記にはならない為、DateSerial関数で日付データとした上でFormat関数で形式変更とする形です。

構文:Year/Day(date)

構文:DateSerial(year, month, day)

先ずDateSerial関数での変換用としてYear関数/Day関数でそれぞれ取得しています。あとはDateSerial関数で年、月、日から日付データとし、その日付データをFormat関数で”mmm”指定することで英語表記を取得しています。

.Offset(0, 3).Value = Format(DateSerial(Y, MonthName((.Value), True), D), “mmm”)

このサンプルの場合は英語の短い表記を取得できれば良く、日付データに変更する為に必要な年と日のデータは何でもOKです。

3.まとめ

色々な処理をする過程で日付データや時刻データを扱うことは多いですから、その際に今回のようなMonthName関数などを知っておくと簡潔に処理を済ますことができることもあります。



上にも書いていますがMonthName関数で取得するデータは文字列(短表記はセル上で数値と認識される)なので、日付データとして扱う場合は変換が必要になる点をご留意ください。

以上、数値から月名(文字列)を取得する方法についてでした!今回の記事が何かの参考になれば幸いです。

Ryo

タイトルとURLをコピーしました