カレンダーコントロール機能がエクセルから無くなったので、自作カレンダーフォーム作成に挑戦する人も多いようで、毎月も4,000~5,000名ほどの方がカレンダー作成を調べに訪れてくれたみたいです。
私自身もそうでしたが、今月以外の日付はカレンダーっぽく非表示にしたいと、何か方法は無いかと調べていませんか?
単純そうで意外と難しく頭を悩ませて・・・
ちょっと遠回りなやり方かもしれませんが、Weekday関数を使ってちょっと工夫すると当月以外の日付を非表示することができるようになります。
曜日番号を取得する「Weekday(日付)」


最初にカレンダーフォームを作った時は断念しましたが、コロナ禍でちょっと時間があったので3年ぶりに再挑戦して見事成功しました。
右の画像のように2021年2月1日は月曜日なので曜日番号は2番、という事でコマンドボタン2が1日という事なのでコマンドボタン1のキャプションは空欄にすれば、画像のようになります。
話を戻して、エクセルには曜日番号が設定されていてWeekday関数が調べたい日付から曜日番号を取得して教えてくれます。
曜日 | 番号 |
日曜日 | 1 |
月曜日 | 2 |
火曜日 | 3 |
水曜日 | 4 |
木曜日 | 5 |
金曜日 | 6 |
土曜日 | 7 |
現在の日時から曜日を取得する
基本となる方法で、Weekday関数の引数として現在日付、言い換えれば今日の日付をコマンドボタン1に表示するならば、このようになります。
Private Sub CommandButton1_Click()
UserForm1.CommandButton1.Caption = Weekday (Date)
End Sub
セルA1に記載している日付から曜日を取得
同じくセルA1に今日の日付が記載されている場合は、引数をセル番地にすれば表示可能です。
Private Sub CommandButton1_Click()
UserForm1.CommandButton1.Caption = Weekday(Range(“A1”))
End Sub
もちろんRangeの代わりにCells(1,1)でも同じように曜日番号を取得できます。
セルA1に記載している日付から前日や翌日の曜日を取得する
実用的に考えたら、現在の日付の曜日を調べたいという事はあまりなく、前日や翌日など計算が必要な場合が多いと思います。
もちろん計算できるようになっていて、引数内で-1や+1とすれば曜日番号を計算できるようになります。
Private Sub CommandButton1_Click()
UserForm1.CommandButton1.Caption = Weekday(Cells(1,1)-1)
End Sub
先ほどのはRangeを使いましたが、当然Cellsも使えますし、翌日の曜日を求めるには-1を+1に変更するだけです。
曜日名を取得する「WeekdayName(Weekday(日付))」
メッセージ機能を使って曜日を知らせたりするのに曜日番号では意味が無いので、番号取得後に曜日名(日曜日)などに変換表示しましょう。
ここでは、メッセージ機能を使わず先ほどと同じように、コマンドボタンのキャプションに表示させる例を記載します。
現在の日時から曜日(日曜日)などを取得する
Private Sub CommandButton1_Click()
UserForm1.CommandButton1.Caption = WeekdayName(Weekday (Date))
End Sub
このように曜日番号を取得するWeekday(Date)を更にカッコで囲いWeekdayNameを付け足せば曜日名(日曜日)などが表示されます。
この方法で上記のセルの値から取得したり、計算して表示させることも同じようにWeekdayNameを付け加えるだけで完成します。
表示される曜日名を(日)などに省略する
WeekdayName関数を使った基本的な曜日表記は「日曜日」などですが、「日」と曜日を省略して表示する事も可能です。
Private Sub CommandButton1_Click()
UserForm1.CommandButton1.Caption = WeekdayName(Weekday (Date),True)
End Sub
最後に,Trueを加えると「曜日」を省略可とする意味になり表記が「日」となります。
ちなみにメッセージ機能を使う場合は下記をご覧くださいませ。
曜日番号取得をマスターしたらオリジナルカレンダー作ってみませんか?クリックするだけで目的のセルに日付が入力できるようになるのでとても便利ですよ。