現在製造現場ではexcelが用いられており、様々なところで日報などを記載していると思います。これら日報をVBAを使用することにより、より効率的にまとめる方法を紹介します。日報1か月分となると毎回コピーして作成するのも大変なため今回は1か月分のシートの作成方法とまとめるためのコツを紹介します。
現場で生産実績をExcelで管理しているけど、まとめられていないし1か月分のシートを毎回作成するのが大変。。。
一定のルールを作って、フォーマット化さえできれば、VBAを使用すれば簡単にシート作成ができます。また、1か月分の結果まとめもVBAと連携してExcelの関数を使えばかなり効率的にまとめることができます。
VBAってプログラムですよね?さっぱりわかりません。
今回は企業などで1か月分のシートの作成方法と結果をまとめるための手法を紹介します。
【今回のトピック】
・Excel VBA を使って1か月分のシートを作成する方法を紹介
・indirect関数の便利な使い方を紹介
VBA を使ってシート(Sheet)をコピー、1か月分のシートを作成する
Excelで作る日報の例としてこんなものを準備しました。
この日報は1班で作成しているもので、作業日・シフトを記載しています。これらにこの日の生産数量や不良数・不良率を毎日日報に記載するようにしています。今回はこのようなシートを1か月分コピーする方法を紹介します。
VBAの流れとしては下記になります。
【VBAでシートを1か月分作成する方法】
①作業日に日付を記入(例えば3月1日)
②3月の最終日をVBAで計算
③シートをコピーして貼り付け
④各日付けには昼勤・夜勤があるので、勤怠のセルを昼・夜を入力する
ではやっていきます。このシート名は原紙とします。
VBAのコードの紹介(DateAdd, Format)
VBAのコードは下記になります。今回は作業日のセルに日付けを記入すると、(R4)のセルの数値がMydateに入ります。そして1か月後の月を計算するため、今回はDateAdd関数を指定します。DateAdd(“m”,1,Mydate)とすることで、Mydateに1か月追加した値がMonthsに格納されます。またいろいろなやり方がありますが、翌月の1日を指定するために、dFirst=Format(Months,”yyyy/mm/01″)とすることで、Monthsの1日が設定されます。つまり、4月1日になります。3月の残りの日数は4月1日から1を引くことで計算できるため、dFirstからMydateを引くことで、当月の残りの日数を算出しています。たとえば、R4に3月15日と指定すると、3月16日から3月31日までのシートが作成されます。
Sub 連続したシート自動作成()
Dim ws As Worksheet
Dim Months As Date
Dim Mydate As Date
Dim i As Long
Dim dFirst As Date
Dim dlast As Date
Dim drest
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
'最初のシートを変数格納
Set ws = ThisWorkbook.Worksheets("原紙")
'最初の日付
Mydate = ws.Range("A4")
'一か月が何日間あるか計算
Months = DateAdd("m", 1, Mydate)
dFirst = Format(Months, "yyyy/mm/01")
dlast = dFirst - 1
drest = dFirst - Mydate
'一か月の日数ループ
For i = 1 To drest
ws.Copy Before:=Sheets(Worksheets.Count)
ActiveSheet.Name = Right(Format(Mydate, "yyyymmdd"), 2) & "昼"
ActiveSheet.Range("A4") = Format(Mydate, "yyyy/mm/dd")
Range("G4") = "昼"
ws.Copy Before:=Sheets(Worksheets.Count)
ActiveSheet.Name = Right(Format(Mydate, "yyyymmdd"), 2) & "夜"
ActiveSheet.Range("A4") = Format(Mydate, "yyyy/mm/dd")
Range("G4") = "夜"
Range("G4").Interior.Color = RGB(0, 0, 255)
Mydate = Mydate + 1
Next i
MsgBox "完了"
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
このコードを実行するとこんな感じで各日付のシートに昼・夜とシフトが記載され、コピーが完了します。これらのシートを使って次回まとめのシート委を作成したいと思います。
マクロを実行
Msgboxに完了と記載されます。この時は原紙のみのシートでした。
この図のようにシートが3月31日まで作成され、勤務の欄に夜と記載されます。
こんな感じで簡単に1か月分のシート作成を行うことができます。