EXCELでシフトのカレンダー表示
シフト勤務の場合、働く時間帯が不規則のため
しっかりスケジュール管理をする必要があります。
勤務時間をうっかり間違えてしまうと大変なので、
パートやアルバイトの方、シフト制の正社員のみなさまの中で手間をかけて管理をしている方はいませんか。
例えば、勤務先から受け取るシフト表を見ながら
勤務管理アプリやGoogleカレンダーへ手入力するのはとても疲れますよね。
そんな悩みを解決できる
EXCELファイル(EXCELマクロ)を自作したのでご紹介します。
ページの最後でEXCELファイルのテンプレート配布をしていますので、
最後までご覧いただけると嬉しいです。
1.シフトの入力
テンプレートをベースに手順を紹介します。
シート名「INPUT」のD列からAH列までシフトを入力してください。
もし、勤務先からデータで入手していればコピペをしましょう。
次に、色分けをしたい項目を入力してください。
(色分けをする必要がない方は操作不要です)
2.条件付き書式の入力
シフトが複雑だと、文字だけで判別するのは苦労しますよね。
そんな悩みを解決するためにEXCELの条件付き書式の機能を活用して、ぱっと見てシフトがわかるようにしました。
機能未使用と使用の画面を比較すると効果は一目瞭然です。
では、条件付き書式の入力方法について解説します。
ホームタブの「条件付き書式」→「ルールの管理」→「シート:OUTPUT」と順番にクリックします。
私が作成したテンプレートではすでにルールが設定されています。
B9~B12のセルの値にそれぞれ対応する色を設定できます。
色の設定を変えたい場合は設定を変えたい項目をダブルクリックした後、「書式」→「パターンの色」→「任意の好きな色」→「OK」
と順番にクリックしてください。
3.マクロの実行
シート名「OUTPUT」のマクロ開始のボタンをクリックしてください。
次に、マクロのメッセージに従い、
西暦4ケタと何月か半角数字で入力すれば完了です。
4.自作した経緯について
今回のEXCELマクロは私がまだマクロ知識ゼロのときに
様々なブログを見ながら独学で作ったものになります。
(当時は作成に1週間かかりました)
作った理由はシフト制の妻が毎月シフトを手入力するのを見て、
なんとかしたいなと思ったからです。ファイルを作って妻に見せたとき、「すごーい!!」と喜んでくれた時のことは今でも覚えています。
私のブログも誰かの自動化のきっかけや手助けになれば嬉しいです。
今後、本業の合間に少しずつですがEXCELの操作やマクロの解説や、
どう独学してきたかということも紹介していこうと思っています。
5.マクロコードとテンプレートについて
今回作成したマクロコードを掲載します。
また、テンプレートは100円で配布しています。
マクロコードをコピペしても動きますが、
今すぐにファイルを利用したい方、
あるいは私のことを応援しても良いと思う方は
下記からダウンロードしていただけると幸いです。
もしX(Twitter) で拡散をいただける場合は無料配布になります。
本業の合間に記事を書いているので、
どちらかの方法でダウンロードいただけると大変励みになります!
Sub cal()
Dim thisYear As Variant
Dim thismonth As Variant
Dim firstDay As Integer
Dim row As Integer
Dim row2 As Integer
Dim col As Integer
Dim col2 As Integer
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim ck1 As Integer
Set ws1 = Worksheets("OUTPUT")
Set ws2 = Worksheets("INPUT")
'年度のカレンダーを作成するか入力'
thisYear = Application.InputBox("西暦を半角4桁の数字で入力してください。")
'キャンセル時の処理'
If thisYear = False Then
Exit Sub
End If
'4桁でない場合の処理'
If Len(thisYear) <> 4 Then
MsgBox ("西暦は4桁で入力してください。" _
& vbCrLf & "作業を中止します。")
Exit Sub
End If
'何月のカレンダーを作成するか入力'
thismonth = Application.InputBox("月を1から12の半角数字で入力してください。")
'キャンセル時の処理'
If thismonth = False Then
Exit Sub
End If
'1から12月までででない場合の処理'
If thismonth > 12 Then
MsgBox ("月は1から12の半角数字で入力してください。" _
& vbCrLf & "作業を中止します。")
Exit Sub
End If
'月間カレンダー各シートの中身をリセットする'
ws1.Range("A3:G14").ClearContents
'曜日を取得、最初に入力する列を決定'
firstDay = Weekday(DateSerial(thisYear, thismonth, 1))
col = firstDay
'月間カレンダーを作成'
col = firstDay
'年を入力'
ws1.Range("F1").Value = thisYear & "年"
ws1.Range("G1").Value = thismonth & "月"
row = 3
'各シートに1ヶ月分の日付を入力'
For j = 1 To 31
ws1.Cells(row, col).Value = j
If col = 7 Then
row = row + 2
col = 1
Else
col = col + 1
End If
If j = 31 Then
row = 3
End If
Next j
'シフトを抽出したい行を指定'
ck1 = 3
'別シートに転記'
row2 = 4
col2 = firstDay
'各シートに1ヶ月分のシフトを入力'
For j = 4 To 34
ws1.Cells(row2, col2).Value = ws2.Cells(ck1, j).Value
If col2 = 7 Then
row2 = row2 + 2
col2 = 1
Else
col2 = col2 + 1
End If
If j = 34 Then
row2 = 4
End If
Next j
End Sub
ここから先は
この記事が気に入ったらサポートをしてみませんか?