ド素人のVBA練習風景です。

「こんなレベル低いとこで悩んでる人もいるんだなー」

と思ってもらって、皆さんの自信に繋げていただければ幸いでございます(笑)

※ VBA…マイクロソフトのOffice製品上で動作するプログラミング言語

毎月作成する業務量想定票の作成を自動化する。

昨日は宿直で一日会社にいたのですが、せっかく環境がバッチリなのでなにか一つVBAで自動化してやろうと取り組んでました。幸い仕事も入ってこなかったこともあって、どうにか一つできあがりましたので、業務情報を除いた上で公開します。

…社外へのファイル送信にビビって、完成したコードを手打ちでプライベートPCに移植したのは内緒です。ついでにシフト表までまるっと作り直してたりして…

シフト表から想定業務量をコピペするだけの単純作業

現在、社内のデータメンテナンス業務を、別会社に委託しているのですが、派遣社員という形で常駐してもらっているので、毎月シフト表が送られてきます。

こんな感じ↓

(名前についてのご指摘は受け入れられません)

ここの再下段の想定時間の数字をコピーして、月間の業務量想定票を作る、という単純な作業が毎月あるのです。

はっきり言って手動でも大して手間はかからない(むしろ今回のマクロ作成の作業時間を考えたら、元取るのに10年くらいかかりそう(笑))代物なのですが、まあ今回は練習ということで、塵も積もればの塵にするつもりで、自動化するVBAを書いてみました。

あと、このブログのネタのため、っていう面も87%くらいありますw

(下準備)二つのファイルを同じフォルダに保存する

業務量想定票↓

まずは、委託先から提出してもらったシフト表と、業務量想定票作成用のファイルを同じフォルダに保存します。

VBAの動作

業務量想定ファイルを開くと、まずは入力用シートになっています。

VBAの動作手順としては、

①入力シートより、作成する想定票の年月を読み取る

②ー1 読み取った年月のシートが既にあれば、その旨のメッセージを返して、マクロ終了

②-2 読み取った年月のシートがなければ、雛形シートをコピーする

③コピーしたシートの名前を、読み取った年月に変更する

④コピーしたシートのB11セルを、読み取った年月に変更する

⑤フォルダ内に、入力シートで指定した年月のシフト表があるかを確認する。

⑥-1 無かった場合→メッセージを表示して、作成したシートを削除する

⑥-2 あった場合→シフト表最下段の総時間を読み取り、

Created with GIMP

業務量想定票のC13セルに貼り付けする

という手順で動きます。

作成したVBAコード

VBAコードはこちら

Sub 委託業務想定票作成()
  Dim y As Long
  Dim m As Long
  Dim ym As String
  Dim ws As Worksheet, flag As Boolean
  Dim sh As String
    y = Worksheets("入力シート").Range("B3").Value
    m = Worksheets("入力シート").Range("B4").Value
    ym = y & "." & m
    sh = "シフト表" & ym & ".xlsx"
    For Each ws In Worksheets
      If ws.Name = y & "年" & m & "月" Then flag = True
    Next ws
    If flag = True Then
      MsgBox "その年月のシートは既に存在します。削除するか、年月を変更してください。"
    Else
      Worksheets("雛形").Copy after:=Worksheets("雛形")
      Worksheets(3).Name = y & "年" & m & "月"
      Worksheets(3).Range("B11").Value = y & "年" & m & "月"
      If Dir(ThisWorkbook.Path & "\" & sh) <> "" Then
        Workbooks.Open Filename:=ThisWorkbook.Path & "\" & sh
        Windows(sh).Activate
        Range("J36").Copy
        Windows("月間業務量想定票.xlsm").Activate
        Range("C13").PasteSpecial (xlPasteValues)
        Workbooks(sh).Close
      Else
        MsgBox "指定された年月のシフト表「" & sh & "」がありません。受領するか、ファイル名を確認・修正してください。"
        Application.DisplayAlerts = False
        Worksheets(y & "年" & m & "月").Delete
        Application.DisplayAlerts = True
        Worksheets("入力シート").Activate
      End If
    End If
End Sub

たったこれだけのコードを打つのに、昨日半日かかってしまいました(笑)

なんせ一個やることを増やすたびにいちいち検索してたので。

でもまあ、それなりに動くものができたので、自分としては満足しております。

ちなみにこれ、ローカルフォルダに保存するとちゃんと動くんですが、クラウド上だと上手く動かないんですよねー。なぜかは今のところわかってません。

どうもファイルパスが悪さしているような気はするんですが…上手く動くようになったら追記します。

とりあえずこれから、社内の手作業が残っているところを片っ端から自動化してやろうと思っているので、ネタには困らない見込みです。他のアプリケーションを操作する機能なんかも、いずれ使えるようになれたらいいなー、と思ってます。

ではまた。

タイマムシンのオススメ本はこちら

ABOUT ME
taimamushin
はじめまして、タイマムシンと申します。 サラリーマン・不動産投資家・株式投資家をしております。 このたび、数年前に挫折したブログについて、もう一度初めてみることにいたしました。 書いていこうと考えているのは、現在のところ下記の分野についてです。 ①不動産投資について ②VBA学習の備忘録 ③生活改善について ④その他雑記 その時々の気分で書くことが変わると思います。 株式投資については、積極的に書くつもりは無いのですが、何かの拍子にチラ見せすることはあるかもしれません。 どこまで書き続けられるかわかりませんが、それなりのボリュームにまで成長させられたら、カテゴリ分け等も考えていこうと思います。 将来的には収益化も目指しておりますので、ガンガン広告載せます。 生暖かい目で見守っていただければ幸いでございます。 それでは、よろしくお願いします。