「日付の横に毎回“月・火・水…”と手入力している」
「日報や勤務表の曜日入力が面倒」
そんなときに便利なのが、ExcelVBAで日付から曜日を自動入力するマクロです。
本記事では、初心者でもすぐ使えるように、
コピペで動く曜日自動判定マクロ を解説とともにご紹介します。
完成イメージ
A列に日付を入力すると、B列に曜日が自動で表示される
日付を入力するだけで曜日が出るので、勤務表・日報・シフト管理などに最適です。
目次
シートの準備
今回は、A列に日付を入力すると、B列に曜日が自動で表示されるように設定します。 シート名は 「入力シート」 とします。

VBAコード(コピペOK)
※このコードは「入力シート」のシートモジュールに貼ります。
(通常の標準モジュールでは動きません)

Private Sub Worksheet_Change(ByVal Target As Range)
' A列以外の変更は処理しない
If Intersect(Target, Me.Columns("A")) Is Nothing Then Exit Sub
Dim cell As Range
For Each cell In Target
If IsDate(cell.Value) Then
' 曜日をB列に書き込む
cell.Offset(0, 1).Value = Format(cell.Value, "aaa")
Else
' 日付でない入力は曜日をクリア
cell.Offset(0, 1).ClearContents
End If
Next cell
End Sub
これだけで、A列に日付を入れた瞬間に B列に曜日が自動で表示されます。
コード解説(初心者向け)
① A列に入力された時だけ動くようにする
If Intersect(Target, Me.Columns("A")) Is Nothing Then Exit Sub
これにより、他の列に入力したときに無駄にコードが動くのを防ぎます。
② Date 型かどうか判定して曜日を返す
If IsDate(cell.Value) Then
入力された内容が日付の場合だけ処理します。
日付でない場合は曜日をクリアするので、誤入力にも安心。
③ 曜日取得の方法
Format(cell.Value, "aaa")
– 「aaa」→ 日本語(“月” “火” “水”)
– 「aaaa」→ “月曜日” のように完全表示
Excel の `Format` 関数は曜日判定との相性が良く、処理も軽いです。
応用:さらに便利にするカスタマイズ
① 土日を自動で色分けする
If Weekday(cell.Value) = vbSunday Then
cell.Offset(0, 1).Interior.Color = RGB(255, 200, 200) ' 日曜:赤系
ElseIf Weekday(cell.Value) = vbSaturday Then
cell.Offset(0, 1).Interior.Color = RGB(200, 200, 255) ' 土曜:青系
Else
cell.Offset(0, 1).Interior.ColorIndex = xlNone ' 平日:色なし
End If
勤務表・シフト表に便利です。
② 英語表記にする
Format(cell.Value, "ddd") ' Mon, Tue, Wed...
Format(cell.Value, "dddd") ' Monday, Tuesday...
③ 曜日を「数値」で返す(業務システム連携向け)
Weekday(cell.Value) ' 日=1, 月=2, 火=3 ...
マクロの設置方法
- Excelで「入力シート」を開く
- Alt+F11でVBE(VBAエディタ)を開く
- 左側の「入力シート」をダブルクリック
- 表示されたコード画面に今回のマクロを貼り付け
- Excelに戻り、A列に日付を入力して動作確認
これだけで曜日自動入力システムが完成です。
まとめ:曜日入力の手間をゼロにできる便利マクロ
今回は、ExcelVBAで日付から曜日を自動入力するマクロをご紹介しました。
- A列の入力を監視して曜日を自動セット
- 曜日判定はFormat関数が便利
- 土日色分けや英語表記など応用も簡単
勤務表・予定表・シフト管理など、日付と曜日がセットの表にとても便利です。
ぜひあなたのExcel業務に取り入れてみてください!


コメント