業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、Year、Month、Day、Weekday、WeekdayName、MonthNameという年、月、日、曜日に関する6つの関数の使い方について。
今回のTipsも関数の使い方について解説する。今回は、「Year」「Month」「Day」「Weekday」「WeekdayName」「MonthName」という年、月、日、曜日に関する6つの関数の使い方だ。なお、関数の基本的な使い方については、Tips「コンパイルエラーにならない関数の使い方――括弧の有無、複数の引数、Callステートメント、戻り値、名前付き引数と順番」を参照してほしい。
Yearは、日付から年を表す整数を抽出・取得する関数だ。
Year(date)
「date」には、日付を表す式を指定する。
シートに「現在の年(西暦)を表示」「現在の年(和暦)を表示」というセルと、「現在の年を取得」ボタンを配置しておく(図1)。
Year関数で、現在の年を表示するコードはリスト1になる。
Sub Year関数の使い方() Range("C2").Value = Year(Now) Range("C3").Value = Format(Now, "ggge年") End Sub
セル「C2」にYear関数を使って現在の年だけを西暦で表示させる。
セル「C3」には、Format関数を使って、現在の年を和暦で表示させる。この場合は、「Now」の位置に、「Year(Now)」と指定しても、元号が表示される。ここはきっちりと、現在の日付を取得するNow関数を指定する必要がある。
このリスト1のマクロを「実行」ボタンに関連付け実行した結果が図2だ。
Monthは、日付から月を表す1〜12の範囲の整数を取得する関数だ。
Month(date)
「date」には、日付を表す式を指定する。
シートに図3のように、「現在の日付と時刻」「現在の月」を表示するセルを用意しておく。
Month関数で、「現在の日付と時刻」「現在の月」を表示するコードはリスト2になる。
Sub Month関数の使い方() Range("C2").Value = Now Range("C3").Value = Month(Now) End Sub
セル「C2」に現在の日付と時刻を表示し、セル「C3」にMonth関数を使って現在の月だけを表示させている。
シートをアクティブにし、このプロシージャ内にフォーカスを移し、VBEメニューの「実行」→「Sub/ユーザーフォームの実行」として実行した結果が図4だ。
Dayは日付から日を表す1〜31の範囲の整数を抽出・取得する関数だ。
Day(date)
「date」には、日付を表す式を指定する。
「Day」という新しいシートを追加し、その中に図5のように「日付を入力するセル」「取得された日」を表示するセル、「実行」ボタンを配置する。
日付から日の数値だけを取得するコードはリスト3になる。
Sub Day関数の使い方() Range("C3").Value = Day(Range("C2").Value) End Sub
セル「C3」に、Day関数の引数に、セル「C2」に入力された日付から、日の数値だけを取得して表示させた。
このリスト3のマクロを「実行」ボタンに関連付け実行すると、図6のように表示される。
Weekdayは、指定した日付の曜日を表す値「1」(日曜)〜「7」(土曜)の範囲の値を返す関数だ。
書式は下記の通り。
Weekday(date,firstdayofweek)
「date」には、日付を表す式を指定する。
「firstdayofweek」には、表1の値を指定する。省略すると、既定値の「1」(日曜)が使用される。
定数 | 値 | 説明 |
---|---|---|
vbUseSystemDayOfWeek | 0 | 各国語対応APIの設定値を使用 |
vbSunday | 1 | 日曜(既定値) |
vbMonday | 2 | 月曜 |
vbTuesday | 3 | 火曜 |
vbWednesday | 4 | 水曜 |
vbThursday | 5 | 木曜 |
vbFriday | 6 | 金曜 |
vbSaturday | 7 | 土曜 |
参考(WeekdayName関数) |
具体的な使い方については、下記WeekdayName関数の章で解説する。
WeekdayNameは、指定された曜日番号から漢字の曜日名を返す関数だ。
WeekdayName(weekday,abbreviate,firstdayofweek)
「weekday」は必須項目で、曜日を示す数値を指定する。数値は前述の「Weekday」関数で取得できる。
「abbreviate」は省略可能で、曜日名を短縮するかどうかの、ブール値を指定する。既定値はFalseで曜日名は短縮されない。
「firstdayofweek」は省略可能で、曜日の最初の日を示す定数を指定する(表1参照)。
シートに図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
セル「C2」が未入力だった場合は、警告メッセージを発して処理を抜ける。それ以外は以下の処理を行う。
セル「C4」にWeekday関数で取得された曜日の整数値「7」が表示されている。この例では「2020/10/10」(図8参照)に該当する。セル「C3」の値を、WeekdayName関数に指定すると、その値に該当する曜日名が表示される。
このリスト4のマクロを「実行」ボタンに関連付け、実行した結果が図8だ。
MonthNameは、指定された月の数値(1〜12)から月名を取得する関数だ。
MonthName(month,abbreviate)
「month」は必須項目で、前述のMonth関数で取得するような月を表す数値を指定する。
「abbreviate」は省略可能で、月名を短縮するかどうかを表すブール値を指定する。省略すると、既定値のFalseが使用され、月名は短縮されない。
「Month」という新しいシートを追加し、図9のように月名を表示するセルと、「月名表示」ボタンを配置しておく。
「月名表示」ボタンをクリックして入力された月名を表示させるコードはリスト5になる。
Sub MonthName関数の使い方() Dim i As Integer For i = 1 To 12 Cells(i + 2, 2) = MonthName(i) Next End Sub
Integer型の変数「i」を宣言する。変数「i」を「1」〜「12」まで繰り返す。反復処理の過程で、「Cells(i+2,2)」と指定して、「i+2」行目の2列目(B列)に、「MonthName」関数に繰り返し変数「i」を指定して月名を表示させる。
「i+2」としているのは、月名を表示させる行の開始がシート上の3行目であるからだ。
このリスト5のマクロを「月名表示」ボタンに関連付け、実行した結果が図10だ。
Year関数は使い方が簡単であるため、使い道はいろいろとあると思う。今回のサンプルでは「西暦」を「元号」で表示させるTipsも紹介した。余談だが、筆者は「西暦2014年」が「元号」では何年になるか、時々失念するときがある、そういった場合にも便利なTipsだろう。また現在が「西暦の何年」であるかを確認する上でも、役に立つ関数だと思う。
Monthは「月」を取得する関数で、これは使い方によってはいろいろ利用できそうだ。日付にひも付いたデータの月別の集計を行う場合に、日付から「月」だけを取得し、その月の売上を集計させるといったことができるのではないかと思う。
Day関数については、単独で使用する機会は少ないのではないだろうか。サンプルでもちょっと触れているが、YearやMonthなどの関数と一緒に使う場合が多いのではないかと思う。
WeekdayName関数はWeekday関数と組み合わせて、指定した日付の曜日名を取得できるため、使い道は多々あると思う。データの記入日に曜日名を表示させる場合に使えるだろう。
次回も引き続き、関数について解説する予定だ。お楽しみに。
薬師寺国安事務所代表。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 © ITmedia, Inc. All Rights Reserved.