Excel

【簡単・業務効率化】Excel VBAを使って1か月分のシートを作成・製造実績・結果まとめを行う(indirect関数)

現在製造現場ではexcelが用いられており、様々なところで日報などを記載していると思います。これら日報をVBAを使用することにより、より効率的にまとめる方法を紹介します。日報1か月分となると毎回コピーして作成するのも大変なため今回は1か月分のシートの作成方法とまとめるためのコツを紹介します。

現場で生産実績をExcelで管理しているけど、まとめられていないし1か月分のシートを毎回作成するのが大変。。。

一定のルールを作って、フォーマット化さえできれば、VBAを使用すれば簡単にシート作成ができます。また、1か月分の結果まとめもVBAと連携してExcelの関数を使えばかなり効率的にまとめることができます。

VBAってプログラムですよね?さっぱりわかりません。

今回は企業などで1か月分のシートの作成方法と結果をまとめるための手法を紹介します。

【今回のトピック】

・Excel VBA を使って1か月分のシートを作成する方法を紹介
・indirect関数の便利な使い方を紹介

🚀 0円で現役エンジニアから学べる【Techスクールオンライン】のお申込みをお勧めします。 このオンラインスクールでは、現役のエンジニアから直接学ぶことができ、プログラミングの基礎から高度なスキルまでを習得できます。しかも、今なら 0円 で受講できるチャンスです。 エンジニア転職を考えている方やプログラミングに興味がある方、新しいスキルを習得したい方に特におすすめです。

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か月分のシート作成を行うことができます。

🚀 0円で現役エンジニアから学べる【Techスクールオンライン】のお申込みをお勧めします。 このオンラインスクールでは、現役のエンジニアから直接学ぶことができ、プログラミングの基礎から高度なスキルまでを習得できます。しかも、今なら 0円 で受講できるチャンス。
私がツナグバに登録してから、求人情報が豊富に届き、自分に合った仕事を見つけることができました。特に、第二新卒向けの求人情報が多いので、自分のスキルや経験を活かしながら新たなキャリアに挑戦することができました。転職活動は不安も多いですが、ツナグバのサポートがあれば、成功への道が明るく感じました。