業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、Year、Month、Day、Weekday、WeekdayName、MonthNameという年、月、日、曜日に関する6つの関数の使い方について。2013今回のTipsも関数の使い方について解説する。今回は、「Year」「Month」「Day」「Weekday」「WeekdayName」「MonthName」という年、月、日、曜日に関する6つの関数の使い方だ。関数の基本的な使い方については、Tips「コンパイルエラーにならない関数の使い方——括弧の有無、複数の引数、Callステートメント、戻り値、名前付き引数と順番」を参照してほしい。日付から年を表す整数を抽出・取得するYear日付から月を表す1〜12の整数を抽出・取得するMonth日付から日を表す1〜31の整数を抽出・取得するDay指定した日付の曜日を表す値(1〜7)を取得するWeekday指定された曜日番号から漢字の曜日名を取得するWeekdayName指定された月の数値(1〜12)から月名を取得するMonthName年を表す整数を抽出・取得するYear関数Yearは、日付から年を表す整数を抽出・取得する関数だ。Year関数の書式Year(date)「date」には、日付を表す式を指定する。シートに「現在の年(西暦)を表示」「現在の年(和暦)を表示」というセルと、「現在の年を取得」ボタンを配置しておく(図1)。「現在の年(西暦)を表示」「現在の年(和暦)を表示」というセルと、「現在の年を取得」ボタンを配置するYear関数で、現在の年を表示するコードはリスト1になる。Year関数で現在の年を表示するコードセル「C2」にYear関数を使って現在の年だけを西暦で表示させる。セル「C3」には、Format関数を使って、現在の年を和暦で表示させる。この場合は、「Now」の位置に、「Year(Now)」と指定しても、元号が表示される。ここはきっちりと、現在の日付を取得するNow関数を指定する必要がある。このリスト1のマクロを「実行」ボタンに関連付け実行した結果が図2だ。現在の年を西暦と和暦で表示させた日付から月を表す1〜12の整数を取得するMonth関数Monthは、日付から月を表す1〜12の範囲の整数を取得する関数だ。Month関数の書式Month(date)「date」には、日付を表す式を指定する。シートに図3のように、「現在の日付と時刻」「現在の月」を表示するセルを用意しておく。「現在の日付と時刻」「現在の月」を表示するセルを用意しておくMonth関数で、「現在の日付と時刻」「現在の月」を表示するコードはリスト2になる。「Month」関数で「現在の日付と時刻」「現在の月」を表示するコードセル「C2」に現在の日付と時刻を表示し、セル「C3」にMonth関数を使って現在の月だけを表示させている。シートをアクティブにし、このプロシージャ内にフォーカスを移し、VBEメニューの「実行」→「Sub/ユーザーフォームの実行」として実行した結果が図4だ。「Month」関数を使って「月」だけを表示させた日付から日を表す1〜31の整数を抽出・取得するDay関数Dayは日付から日を表す1〜31の範囲の整数を抽出・取得する関数だ。Day関数の書式Day(date)「date」には、日付を表す式を指定する。「Day」という新しいシートを追加し、その中に図5のように「日付を入力するセル」「取得された日」を表示するセル、「実行」ボタンを配置する。「日付を入力するセル」「取得された日を表示するセル」と「実行」ボタンを配置した日付から日の数値だけを取得するコードはリスト3になる。日の数値だけを取得するコードセル「C3」に、Day関数の引数に、セル「C2」に入力された日付から、日の数値だけを取得して表示させた。このリスト3のマクロを「実行」ボタンに関連付け実行すると、図6のように表示される。日の数値だけを取得して表示した指定した日付の曜日を表す値(1〜7)を取得するWeekday関数Weekdayは、指定した日付の曜日を表す値「1」(日曜)〜「7」(土曜)の範囲の値を返す関数だ。Weekday関数の書式Weekday(date,firstdayofweek)「date」には、日付を表す式を指定する。「firstdayofweek」には、表1の値を指定する。省略すると、既定値の「1」(日曜)が使用される。参考(WeekdayName関数)具体的な使い方については、下記WeekdayName関数の章で解説する。指定された曜日番号から漢字の曜日名を取得するWeekdayName関数WeekdayNameは、指定された曜日番号から漢字の曜日名を返す関数だ。WeekdayName関数の書式WeekdayName(weekday,abbreviate,firstdayofweek)「weekday」は必須項目で、曜日を示す数値を指定する。数値は前述の「Weekday」関数で取得できる。「abbreviate」は省略可能で、曜日名を短縮するかどうかの、ブール値を指定する。既定値はFalseで曜日名は短縮されない。「firstdayofweek」は省略可能で、曜日の最初の日を示す定数を指定する(表1参照)。シートに図7のように「日付を入力」するセルと、「日付の曜日の整数値」「指定された日付の曜日」が表示されるセルと、「実行」ボタンを配置しておく。日付を入力」するセルと、「日付の曜日の整数値」と「指定された日付の曜日」の表示されるセルと、「実行」ボタンを配置する指定した日付の曜日を表示するコードはリスト4になる。"日付を入力してください。WeekdayName関数で、指定した日付の曜日を表示するコードセル「C2」が未入力だった場合は、警告メッセージを発して処理を抜ける。それ以外は以下の処理を行う。セル「C4」にWeekday関数で取得された曜日の整数値「7」が表示されている。この例では「2020/10/10」(図8参照)に該当する。セル「C3」の値を、WeekdayName関数に指定すると、その値に該当する曜日名が表示される。このリスト4のマクロを「実行」ボタンに関連付け、実行した結果が図8だ。WeekdayName関数で、指定した日付の曜日名が表示された指定された月の数値(1〜12)から月名を取得するMonthName関数MonthNameは、指定された月の数値(1〜12)から月名を取得する関数だ。MonthName関数の書式MonthName(month,abbreviate)「month」は必須項目で、前述のMonth関数で取得するような月を表す数値を指定する。「abbreviate」は省略可能で、月名を短縮するかどうかを表すブール値を指定する。省略すると、既定値のFalseが使用され、月名は短縮されない。「Month」という新しいシートを追加し、図9のように月名を表示するセルと、「月名表示」ボタンを配置しておく。月名を表示するセルと、「月名表示」ボタンを配置する「月名表示」ボタンをクリックして入力された月名を表示させるコードはリスト5になる。MonthName関数を使って月名を表示させるコードInteger型の変数「i」を宣言する。変数「i」を「1」〜「12」まで繰り返す。反復処理の過程で、「Cells(i+2,2)」と指定して、「i+2」行目の2列目(B列)に、「MonthName」関数に繰り返し変数「i」を指定して月名を表示させる。「i+2」としているのは、月名を表示させる行の開始がシート上の3行目であるからだ。このリスト5のマクロを「月名表示」ボタンに関連付け、実行した結果が図10だ。MonthName関数で月名を表示したまとめYear関数は使い方が簡単であるため、使い道はいろいろとあると思う。今回のサンプルでは「西暦」を「元号」で表示させるTipsも紹介した。余談だが、筆者は「西暦2014年」が「元号」では何年になるか、時々失念するときがある、そういった場合にも便利なTipsだろう。現在が「西暦の何年」であるかを確認する上でも、役に立つ関数だと思う。Monthは「月」を取得する関数で、これは使い方によってはいろいろ利用できそうだ。日付にひも付いたデータの月別の集計を行う場合に、日付から「月」だけを取得し、その月の売上を集計させるといったことができるのではないかと思う。Day関数については、単独で使用する機会は少ないのではないだろうか。サンプルでもちょっと触れているが、YearやMonthなどの関数と一緒に使う場合が多いのではないかと思う。WeekdayName関数はWeekday関数と組み合わせて、指定した日付の曜日名を取得できるため、使い道は多々あると思う。データの記入日に曜日名を表示させる場合に使えるだろう。次回も引き続き、関数について解説する予定だ。Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。