1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ChatGPTにエクセルのマクロを書いてもらったら、面倒な印刷作業が6~7時間→10分になった

Posted at

ChatGPTに触れる機会があり、ソースコードを自動的に作成してくれることがわかったので普段から業務で使用しているエクセルで何かマクロを作れないかと思い、周りのメンバーにパソコンの作業で困っている事がないかヒアリングしてみたとろ1年に5~6回出力する従業員のプロフィールシートの印刷が非常に手間!半日以上かかる!という声があったので何とか出来ないか試してみました!
結果、6~7時間の作業が10分程度に! マクロの作成自体もテストを兼ねて1時間ほど・・・恐るべしChatGPT。今までの作業は何だったんだ・・・と思った今日のこの頃です。

実際に作成した内容をご紹介します!

元々やっていた作業の流れ

元々は下記図のような流れで転記シートに大元のデーターシートよりvlookup関数で情報を引っ張ってきて印刷シートから印刷をしていました。転記シートに36行づつ店舗別に割り振られた番号を入力して1枚づつ印刷をしていました。従業員の数が4000名以上あり、店舗ごとに出力するため200回近い印刷作業を1年に5~6回実施していました。
image.png

マクロでの処理手順

実際には事業部単位でファイリングをするため事業部単位で印刷出来るようなマクロを作成。処理の流れとしては
①トリガーとなる文字列(事業部名を選択式で選ぶ)。
②大元の従業員データーより事業部の名称が一致する行の行に割り振った数値を収集する。
③収集したデーターを36件単位に区切る。
④転記シートに36件づつ入力して都度印刷を実行する。
というような流れの処理をしています。
コードは下記の内容になります。

Dim wsPaste As Worksheet        ' 元データー → シート「元」
Dim wsTransfer As Worksheet     ' 転記用     → シート「転記」
Dim wsFigure As Worksheet       ' 印刷用     → シート「印刷」
Dim trigger As String
Dim dataList As Collection
Dim i As Long, j As Long
Dim total As Long

' シート取得
On Error Resume Next
Set wsPaste = Worksheets("元")
Set wsTransfer = Worksheets("転記")
Set wsFigure = Worksheets("印刷")
On Error GoTo 0

If wsPaste Is Nothing Or wsTransfer Is Nothing Or wsFigure Is Nothing Then
    MsgBox "いずれかのシート(元/転記/印刷)が見つかりません。", vbCritical
    Exit Sub
End If

' トリガー文字列取得
trigger = Trim(wsTransfer.Range("E1").Value)
If trigger = "" Then
    MsgBox "転記シートのE1にトリガー文字列がありません。", vbExclamation
    Exit Sub
End If

' データ収集
Set dataList = New Collection
i = 2
Do While wsPaste.Cells(i, "B").Value <> ""
    If wsPaste.Cells(i, "B").Value = trigger Then
        If IsNumeric(wsPaste.Cells(i, "A").Value) Then
            dataList.Add wsPaste.Cells(i, "A").Value
        End If
    End If
    i = i + 1
Loop

If dataList.Count = 0 Then
    MsgBox "一致するデータが元シートに見つかりませんでした。", vbExclamation
    Exit Sub
End If

' 転記と印刷
total = dataList.Count
j = 1
Do While j <= total
    wsTransfer.Range("A4:A39").ClearContents

    For i = 0 To 35
        If j + i <= total Then
            wsTransfer.Cells(4 + i, "A").Value = dataList.Item(j + i)
        Else
            Exit For
        End If
    Next i

    wsFigure.PrintOut
    j = j + 36
Loop

' 処理完了メッセージ(件数表示)
MsgBox "印刷が完了しました。" & vbCrLf & _
       "記憶された件数:" & dataList.Count & " 件", vbInformation

何回か印刷テストをして問題がなかったので、メンバーに渡して使ってもらうことに!
Yさん「印刷は凄く楽になったけど、事業部内の店舗の配列が異なっている時があるから店舗別にビシッと並んでたらより良いと思うよ」というフィードバックをいただいたので元のデーターを店舗別にソートと行番号を割り振るマクロを別途作成。メンバーのリクエストにも何とか応えることが出来ました。当初作業は店舗名などを確認しながら実施していたため6~7時間の大がかりな作業でしたが、このマクロを利用するれば印刷実行は事業部の数である7回だけ。今まで1回の印刷で6~7時間かかっていた作業時間が10分程度に!年間で30時間~40時間の作業削減になりました!使ってくれたメンバーからも「今までの作業はなんだったんだ」という声が聞かれました。

感想

今回は事業部別で印刷するマクロになっていますが、やり方によっては店舗別や他の属性をトリガーとした印刷もChatGPTにお願いしたらすぐに修正コードを作ってくれるので応用の幅が広がると思います。目指せ残業0時間!早く家に帰ってご飯食べよう!をスローガンに他のメンバーの手間になっている作業も軽減していきたいと思います。元々マクロの作成ができない自分としては生成AIは夢のようなツールです!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?