こんにちは~。「デザインもできるシステムエンジニア」のあつもり(@atumori17)です。今日も業務効率化のアイデアを発信していきますっ!
前回は「DateSerial関数で今月の日付を取得してワークシートに入れる方法」を紹介しました。
今回はさらに使いやすくするために、「日付の曜日を判定してセルに入れる方法」を紹介していきます。曜日まで入れられるようになるとグッと実用性がアップしてくると思います。
目次
日付の曜日を判定してセルに入れるプログラムの作成
前回のプログラムを修正する
それでは実際にプログラムを作っていきます。
前回使用した「今月の日付を入力.xls」をコピーして「今月の日付と曜日を入力.xls」を作成します。
UserForm1のSubプロシージャ「CommandButton1_Click」に次の段落で説明するコードを貼り付けます。
サンプルコードを貼り付ける
「CommandButto1_Click()」に貼り付けるコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
'日付入力 Private Sub CommandButton1_Click() Dim tmp As String 'キャンセルが押された場合は処理を終了する On Error GoTo myError tmp = Application.InputBox("列を選択して下さい", "列の選択", Type:=8).Address On Error GoTo 0 Dim monthStart As Long '月初の日付 Dim monthEnd As Long '月末の日付 monthStart = 1 monthEnd = Day(DateSerial(Year(Date), Month(Date) + 1, 0)) Range(tmp).Select Dim y As Long Dim x As Long Dim col As Long '選択した列番号 Dim row As Long '選択した行番号 '列が選択されていた場合 If Selection.Address = Selection.EntireColumn.Address Then col = Selection.Column For y = monthStart To monthEnd Cells(y, col).Value = y '日付から曜日の数値を取得 tmp = Weekday(Year(Date) & "/" & Month(Date) & "/" & y) '曜日の数値から曜日を取得(Trueで曜日名を省略) tmp = WeekdayName(tmp, True) '日付の隣のセルに曜日を入れる Cells(y, col + 1).Value = tmp Next Else '行が選択されていた場合 If Selection.Address = Selection.EntireRow.Address Then row = Selection.row For x = monthStart To monthEnd Cells(row, x).Value = x '日付から曜日の数値を取得 tmp = Weekday(Year(Date) & "/" & Month(Date) & "/" & x) '曜日の数値から曜日を取得(Trueで曜日名を省略) tmp = WeekdayName(tmp, True) '日付の隣のセルに曜日を入れる Cells(row + 1, x).Value = tmp Next End If End If myError: End Sub |
プログラムコードの解説
それではプログラムコードの解説をしていきます。重要なポイントに絞って説明していきます。
プログラム全体の流れは以下のようになります。
- 今月の月末の日にちを取得する
- 処理対象の列番号または行番号を取得する
- 行か列どちらが選択されたかを調べる
- セルに日付を入力する
- 日付から曜日を取得して隣のセルに入れる
1~4までは前回の記事で紹介していますので、5の日付から曜日を取得するところの説明をしていきます。
Weekday関数で日付から曜日の値を取得する
日付から曜日を調べるにはまずWeekday関数を使用します。
Weekday関数は引数に指定した日付の曜日を返す関数です。ただし曜日は数値で返します。
曜日 戻り値
- 日曜 1
- 月曜 2
- 火曜 3
- 水曜 4
- 木曜 5
- 金曜 6
- 土曜 7
というように曜日名ではなく、数値で返すんですね。
例えば2017/11/14は火曜日ですが、
tmp=Weekday(“2017/11/14”)
とすると、tmpには3が入ります。
WeekdayName関数で曜日の数値から曜日を取得する
さきほどの説明のようにWeekday関数が返すのは曜日の数値ですので、この数値を曜日に直す必要があります。日付の横に数値が入っていても何曜日かわからないですからね~。
数値から曜日を調べるには次のようにします。
ただし返す値は「火曜日」というように「曜日」が入っています。そこで第2引数で曜日表示の有無が指定できますので、Trueを指定して曜日を省略するようにします。
曜日を取得する処理は以下になります。全体のプログラムコードでは31~36行目、47~52行目になります。
1 2 3 4 5 6 |
'日付から曜日の数値を取得 tmp = Weekday(Year(Date) & "/" & Month(Date) & "/" & y) '曜日の数値から曜日を取得(Trueで曜日名を省略) tmp = WeekdayName(tmp, True) '日付の隣のセルに曜日を入れる Cells(y, col + 1).Value = tmp |
プログラムコードの解説は以上です。
日付の曜日を判定してセルに入れるプログラムの動作確認
それでは実際に出来上がったプログラムを動かしてみましょう。
ワークシートの起動ボタンを押します。
日付入力ボタンをクリックして、列を選択しOKボタンをクリックします。
今月の日付と曜日が入力されました。
行を選択した場合はこんな感じになります。
まとめ
いかがでしたか?今回の内容をまとめます。
- Weekday関数で日付から曜日の値を取得できる
- WeekdayName関数で曜日の数値から曜日を取得できる
- 曜日名を省略するにはWeekdayNameの第2引数にTrueを指定する
以上「日付の曜日を判定してセルに入れる方法」でした。おつかれさまでした~。
その使い方だと損してます!
会社員、個人事業主のかたへ。
無料で登録できるAmazonビジネスアカウントを知ってますか?
何と言っても便利なのが請求書払いによる後払いができるということ。
また、承認ルールを作成すれば、業務上必要な物だけに購入を制限することができます。
さらに多くの商品にビジネスアカウント価格が設定されており、個人アカウントより安く購入できます。
このように個人アカウントと比べてビジネスアカウントはお得な機能や特典がついています。
無料で登録できるので、会社員、個人事業主なら使ったほうが得なのは言うまでもありません。