はじめに
マクロの記録を使ってプログラムコードを生成させ、これを改造する事で出勤簿プログラムを完成させます。
出勤簿のフォーマットは、以前(プログラム不要の出勤簿)使用したものを使います。

右側にボタンを配置して、必要勤務シフトを選択したセルに入力できるようにします。
作り方
今回の出勤簿ファイルはVBAを使うのでブックの拡張子は.xlsmにして保存しておきましょう。
xlsmで保存しないとVBAプログラムは保存されませんので注意してください。
マクロの記録を実行
ここからはマクロの記録を手順通りに行ってください。
1.マクロの記録を開始します。


2.D41~H41セルをドラッグして複数選択します。(「日勤」の部分です。)

3.そのまま右クリックしてコピーします。

4.次に上方へスクロールして、D5を選択します。

5.そのまま右クリックして貼り付け(値のみ)を実行します。
必ず「値のみの貼り付け」を実行してください。

6.貼り付けが終了したら、マクロの記録を終了します。


以上で、マクロが記録されたはずです。メニューの「開発」タブから「Visual Basic」 を選択してVBE(エディター)を開きます。

標準モジュールの中にプログラムコードが生成されていると思います。
(ご自身の内容と多少異なっても気にしなくて大丈夫です。)
もし、最後が、ActiveSheet.Paste となっている場合は、「値のみの貼り付け」になっていませんので、もう一度やり直してください。
記録されたマクロを変更する
Sub Macro1()
'
' Macro1 Macro
'
'
ActiveWindow.SmallScroll Down:=33
Range("D41:H41").Select
ActiveWindow.SmallScroll Down:=0
Selection.Copy
ActiveWindow.SmallScroll Down:=-33
Range("D5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
このままでは、D41:H41をD5から貼り付けるだけですが、上記の赤線部分を削除すると、選択したセルに対して D41:H41(日勤のシフト)を入力できるようになります。
まず、ActiveWindow.SmallScroll Down はスクロールさせている部分なので今回は不要です。
次に、以下の2行を1行にまとめます。
変更前:
Range(“D41:H41”).Select
Selection.Copy
変更後:
Range(“D41:H41”).Copy
こうする事で”D41:H41″部分を直接コピーできます。
更に、Range(“D5”).Select を削除します。ここを削除しておくことで、Selection.PasteSpecial で貼り付けを行う際にマクロ実行前の選択位置に値を貼り付ける事が出来るようになります。
最後に、マクロ名を 「Macro日勤」に変更しましょう。以下の様になりました。
Sub Macro日勤()
Range("D41:H41").Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
だいぶスッキリしました。
やっている事は、“D41:H41″部分をコピーし、現在セレクトされている場所に貼り付け(値のみ)を行っています。
では、これをボタンを押す事で実行できるようにします。
ボタンを設置する

ボタンを設置するには、「開発」タブの「挿入」からコマンドボタンを選択します。

任意の位置でドラッグすると、ボタンを設置する事ができます。ボタンを設置するとマクロの登録ダイアログが出てきますので、ここで先程の「Macro日報」を選択します。

マクロの登録はボタンを右クリックすれば選択できます。ボタンの位置や大きさも右クリックで変更可能です。
動作確認
では一旦、5行目にある値は消して、D列の勤務区分の部分を選択してボタンを押してみてください。
5行目以外でもボタンを押せば日勤の勤務時間を入力できるようになりました。
ただ、他の列や欄外を選択した時も値が貼り付けられてしまうので注意が必要です。
他の勤務シフトもボタンに登録する
これまでの手順を繰返してボタンを追加していけば、他の勤務シフトもボタンで入力できるようになるでしょう。
ただ、書き換えたコードを少し変更すればもっと簡単にできます。
変更するのは、”D41:H41″の部分です。
これを”D42:H42“に変更すれば、「日勤A」の勤務シフトに変更できます。
Sub Macro日勤A()
Range("D42:H42").Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
後はボタンを追加して、マクロの登録でこのプログラムを変更すれば良いでしょう。
最後に
今回のマクロは、D列の勤務区分の領域を選択しなければ貼り付けがおかしくなってしまいますが、このクセを理解していれば業務効率はアップするでしょう。
もちろん改善する方法はありますが、それにはプログラミングの知識が必要になります。
今回は初心者でも手軽にできる事を優先していますので、万能とは言えません。 ただ、簡単な方法で効率的に値を入力できるという点では利便性は高いと思います。
不具合の少ないプログラムの方が優秀であることは間違いありませんが、マクロのようなユーザーが手軽に組めるプログラムに関しては多少の不具合には目をつぶって利便性を優先するのはアリだと思います。
是非活用してみてください。