連載
» 2015年05月25日 05時00分 UPDATE

VBA/マクロ便利Tips:Excelの年、月、日、漢字の曜日名、月名を抽出・取得するYear、Month、Day、WeekdayName、MonthName関数の使い方

業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、Year、Month、Day、Weekday、WeekdayName、MonthNameという年、月、日、曜日に関する6つの関数の使い方について。

[薬師寺国安,PROJECT KySS]
「VBA/マクロ便利Tips」のインデックス

連載目次

※本Tipsの環境:Windows 8.1 Enterprise(64ビット)+Excel 2013


 今回のTipsも関数の使い方について解説する。今回は、「Year」「Month」「Day」「Weekday」「WeekdayName」「MonthName」という年、月、日、曜日に関する6つの関数の使い方だ。なお、関数の基本的な使い方については、Tips「コンパイルエラーにならない関数の使い方――括弧の有無、複数の引数、Callステートメント、戻り値、名前付き引数と順番」を参照してほしい。


年を表す整数を抽出・取得するYear関数

 Yearは、日付から年を表す整数を抽出・取得する関数だ。

Year関数の書式

Year(date)


 「date」には、日付を表す式を指定する。

 シートに「現在の年(西暦)を表示」「現在の年(和暦)を表示」というセルと、「現在の年を取得」ボタンを配置しておく(図1)。

ExcelVBA14Tips_05.png 図1 「現在の年(西暦)を表示」「現在の年(和暦)を表示」というセルと、「現在の年を取得」ボタンを配置する

 Year関数で、現在の年を表示するコードはリスト1になる。

Sub Year関数の使い方()
  Range("C2").Value = Year(Now)
  Range("C3").Value = Format(Now, "ggge年")
End Sub
リスト1 Year関数で現在の年を表示するコード

 セル「C2」にYear関数を使って現在の年だけを西暦で表示させる。

 セル「C3」には、Format関数を使って、現在の年を和暦で表示させる。この場合は、「Now」の位置に、「Year(Now)」と指定しても、元号が表示される。ここはきっちりと、現在の日付を取得するNow関数を指定する必要がある。

 このリスト1のマクロを「実行」ボタンに関連付け実行した結果が図2だ。

ExcelVBA14Tips_06.png 図2 現在の年を西暦と和暦で表示させた

日付から月を表す1〜12の整数を取得するMonth関数

 Monthは、日付から月を表す1〜12の範囲の整数を取得する関数だ。

Month関数の書式

Month(date)


 「date」には、日付を表す式を指定する。

 シートに図3のように、「現在の日付と時刻」「現在の月」を表示するセルを用意しておく。

ExcelVBA8Tips_03.png 図3 「現在の日付と時刻」「現在の月」を表示するセルを用意しておく

 Month関数で、「現在の日付と時刻」「現在の月」を表示するコードはリスト2になる。

Sub Month関数の使い方()
  Range("C2").Value = Now
  Range("C3").Value = Month(Now)
End Sub
リスト2 「Month」関数で「現在の日付と時刻」「現在の月」を表示するコード

 セル「C2」に現在の日付と時刻を表示し、セル「C3」にMonth関数を使って現在の月だけを表示させている。

 シートをアクティブにし、このプロシージャ内にフォーカスを移し、VBEメニューの「実行」→「Sub/ユーザーフォームの実行」として実行した結果が図4だ。

ExcelVBA8Tips_04.png 図4 「Month」関数を使って「月」だけを表示させた

日付から日を表す1〜31の整数を抽出・取得するDay関数

 Dayは日付から日を表す1〜31の範囲の整数を抽出・取得する関数だ。

Day関数の書式

Day(date)


 「date」には、日付を表す式を指定する。

 「Day」という新しいシートを追加し、その中に図5のように「日付を入力するセル」「取得された日」を表示するセル、「実行」ボタンを配置する。

excelvba16zu_05.png 図5 「日付を入力するセル」「取得された日を表示するセル」と「実行」ボタンを配置した

 日付から日の数値だけを取得するコードはリスト3になる。

Sub Day関数の使い方()
  Range("C3").Value = Day(Range("C2").Value)
End Sub
リスト3 日の数値だけを取得するコード

 セル「C3」に、Day関数の引数に、セル「C2」に入力された日付から、日の数値だけを取得して表示させた。

 このリスト3のマクロを「実行」ボタンに関連付け実行すると、図6のように表示される。

excelvba16zu_06.png 図6 日の数値だけを取得して表示した

指定した日付の曜日を表す値(1〜7)を取得するWeekday関数

 Weekdayは、指定した日付の曜日を表す値「1」(日曜)〜「7」(土曜)の範囲の値を返す関数だ。

 書式は下記の通り。

Weekday関数の書式

Weekday(date,firstdayofweek)


 「date」には、日付を表す式を指定する。

 「firstdayofweek」には、表1の値を指定する。省略すると、既定値の「1」(日曜)が使用される。

表1 firstdayofweekに指定する値
定数 説明
vbUseSystemDayOfWeek 0 各国語対応APIの設定値を使用
vbSunday 1 日曜(既定値)
vbMonday 2 月曜
vbTuesday 3 火曜
vbWednesday 4 水曜
vbThursday 5 木曜
vbFriday 6 金曜
vbSaturday 7 土曜
参考(WeekdayName関数

 具体的な使い方については、下記WeekdayName関数の章で解説する。

指定された曜日番号から漢字の曜日名を取得するWeekdayName関数

 WeekdayNameは、指定された曜日番号から漢字の曜日名を返す関数だ。

WeekdayName関数の書式

WeekdayName(weekday,abbreviate,firstdayofweek)


 「weekday」は必須項目で、曜日を示す数値を指定する。数値は前述の「Weekday」関数で取得できる。

 「abbreviate」は省略可能で、曜日名を短縮するかどうかの、ブール値を指定する。既定値はFalseで曜日名は短縮されない。

 「firstdayofweek」は省略可能で、曜日の最初の日を示す定数を指定する(表1参照)。

 シートに図7のように「日付を入力」するセルと、「日付の曜日の整数値」「指定された日付の曜日」が表示されるセルと、「実行」ボタンを配置しておく。

ExcelVBA14Tips_03.png 図7 日付を入力」するセルと、「日付の曜日の整数値」と「指定された日付の曜日」の表示されるセルと、「実行」ボタンを配置する

 指定した日付の曜日を表示するコードはリスト4になる。

Sub WeekdayName関数の使い方()
  If Range("C2").Value = "" Then
    MsgBox "日付を入力してください。【例】2014/10/10"
    Exit Sub
  Else
    Range("C3").Value = Weekday(Range("C2").Value)
    Range("C4").Value = WeekdayName(Range("C3").Value)
  End If
End Sub
リスト4 WeekdayName関数で、指定した日付の曜日を表示するコード

 セル「C2」が未入力だった場合は、警告メッセージを発して処理を抜ける。それ以外は以下の処理を行う。

 セル「C4」にWeekday関数で取得された曜日の整数値「7」が表示されている。この例では「2020/10/10」(図8参照)に該当する。セル「C3」の値を、WeekdayName関数に指定すると、その値に該当する曜日名が表示される。

 このリスト4のマクロを「実行」ボタンに関連付け、実行した結果が図8だ。

ExcelVBA14Tips_04.png 図8 WeekdayName関数で、指定した日付の曜日名が表示された

指定された月の数値(1〜12)から月名を取得するMonthName関数

 MonthNameは、指定された月の数値(1〜12)から月名を取得する関数だ。

MonthName関数の書式

MonthName(month,abbreviate)


 「month」は必須項目で、前述のMonth関数で取得するような月を表す数値を指定する。

 「abbreviate」は省略可能で、月名を短縮するかどうかを表すブール値を指定する。省略すると、既定値のFalseが使用され、月名は短縮されない。

 「Month」という新しいシートを追加し、図9のように月名を表示するセルと、「月名表示」ボタンを配置しておく。

ExcelVBA8Tips_05.png 図9 月名を表示するセルと、「月名表示」ボタンを配置する

 「月名表示」ボタンをクリックして入力された月名を表示させるコードはリスト5になる。

Sub MonthName関数の使い方()
  Dim i As Integer
  For i = 1 To 12
    Cells(i + 2, 2) = MonthName(i)
  Next
End Sub
リスト5 MonthName関数を使って月名を表示させるコード

 Integer型の変数「i」を宣言する。変数「i」を「1」〜「12」まで繰り返す。反復処理の過程で、「Cells(i+2,2)」と指定して、「i+2」行目の2列目(B列)に、「MonthName」関数に繰り返し変数「i」を指定して月名を表示させる。

 「i+2」としているのは、月名を表示させる行の開始がシート上の3行目であるからだ。

 このリスト5のマクロを「月名表示」ボタンに関連付け、実行した結果が図10だ。

ExcelVBA8Tips_06.png 図10 MonthName関数で月名を表示した

まとめ

 Year関数は使い方が簡単であるため、使い道はいろいろとあると思う。今回のサンプルでは「西暦」を「元号」で表示させるTipsも紹介した。余談だが、筆者は「西暦2014年」が「元号」では何年になるか、時々失念するときがある、そういった場合にも便利なTipsだろう。また現在が「西暦の何年」であるかを確認する上でも、役に立つ関数だと思う。

 Monthは「月」を取得する関数で、これは使い方によってはいろいろ利用できそうだ。日付にひも付いたデータの月別の集計を行う場合に、日付から「月」だけを取得し、その月の売上を集計させるといったことができるのではないかと思う。

 Day関数については、単独で使用する機会は少ないのではないだろうか。サンプルでもちょっと触れているが、YearやMonthなどの関数と一緒に使う場合が多いのではないかと思う。

 WeekdayName関数はWeekday関数と組み合わせて、指定した日付の曜日名を取得できるため、使い道は多々あると思う。データの記入日に曜日名を表示させる場合に使えるだろう。

 次回も引き続き、関数について解説する予定だ。お楽しみに。

著者紹介

薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所

kuniyasu.jpg

薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。

1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。

1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。

2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。

Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。

Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。

Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。

Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。

Microsoft MVP for Development Platforms-Windows Platform Development (Oct 2014-Sep 2015)。


Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。