見出し画像

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


ここから先は

88字 / 1ファイル

この記事が気に入ったらサポートをしてみませんか?