2
1

時短化めざせ!超初心者の「週末DX」~「ExcelVBAマクロ」を使って効率化に成功した小さな話~

Last updated at Posted at 2024-08-31

とある流通業で衣料品を販売している私。
ITスキルゼロなのにイマドキの「DX業務改善」に興味を持ち2週間前から研修に参加することとなりました。

そんな私が今回知ったのは、今をときめくAI 「ChatGPT」
最近よく聞く『ChatGPTで業務効率化』とか『ChatGPT仕事術』。
【ボタン一発】で帳票作成! 憧れる~!

超初心者の私も「ChatGPT」と一緒に週末の連休を利用して、「DX業務改善」に挑戦してみました。

スクリーンショット 2024-08-25 225005.png

「ChatGPT」に、まずは業務効率化の得意な点を聞いてみました。

スクリーンショット 2024-08-25 215131.png
「プロセス改善とツールの導入」 か・・・私には目下業務上の悩みがひとつあります。

課題:「集計業務に時間がかかる」

日々の営業情報は非常に重要ですが、当社ではシステムから出力される帳票の形式が固定されており、比較したい項目を簡単に整理できないのが課題です。そのため、毎朝手作業で帳票を4枚まとめて加工し、検索などを含めて15分かかっています。この手間を自動化できれば、業務がかなりスムーズになるはずです。

スクリーンショット 2024-08-25 213706.png

解決策:自動化マクロで「集計帳票作成」の時短をめざす!

「ChatGPT」に相談したところ、私の業務の現状を踏まえ以下の2つのツールを提案してくれました。

1-スクリーンショット 2024-08-24 104829.png
2-スクリーンショット 2024-08-24 104829.png

私の部署では「Googleスプレッドシート」の普及率ほぼ「0%」と低いため、今回は<改善策1「ExcelVBAマクロ」>を選びます。

結果:【ボタン一発】「集計帳票」自動作成完了 15分の時短に成功!

プロセス

使用ツール:
「ExcelVBAマクロ」「ChatGPT」
 以下帳票・数値はダミーです。

1・業務フローを見直す

現在の当社の定型帳票は以下のような形式で出力されますが、それぞれの帳票で縦軸や横軸の項目が固定されています。

スクリーンショット 2024-08-31 151121.png

<現在の業務フロー>
定型出力される帳票から手作業での集計手順は以下のとおりです。
①【集計シート】に4枚の定型帳票を貼り付けて1枚にする。
②【集計シート】上でデーターを整える。
③【集計シート】を【実績シート】に貼り付け「VLOOKUP関数」でデーターを抽出し作表。

このように現状では、定型帳票が出力項目によってデータ位置がバラバラであるため、「VLOOKUP関数」で抽出しやすくするために、一度【集計シート】に貼ってからデータを整える必要があることです。
それが 手作業のため時間を要し、ミスが発生する原因 となっています。

2・プロトタイプの試作

この問題を解決するために、実物の帳票を簡略化したミニ帳票を作成し、実際に「ExcelVBAマクロ」を使って4枚の定型帳票を1枚にまとめることができるのか、「プロトタイプ」を試作しました。

①出力帳票のデーター位置を確認

「ChatGPT」に 正確なマクロ を作成してもらうために4枚の定型帳票のバラバラなデータの位置を確認します。

最初の「アバウト」なプロンプトで返ってきた「マクロ」とその「結果」

<プロンプト>
スクリーンショット 2024-08-31 160411.png

<マクロ>

    ' 新しいシートを作成し、それを「Summary」と名前付け
    Set wsSummary = Sheets.Add
    wsSummary.Name = "Summary"
    
    ' Summaryシートにヘッダーを作成
    wsSummary.Cells(1, 1).Value = "部門"
    wsSummary.Cells(1, 2).Value = "店舗"
    wsSummary.Cells(1, 3).Value = "店舗"
    wsSummary.Cells(1, 4).Value = "店舗"
    wsSummary.Cells(1, 5).Value = "Aグループ"
    wsSummary.Cells(1, 6).Value = "Aグループ"
    wsSummary.Cells(1, 7).Value = "Aグループ"
    wsSummary.Cells(1, 8).Value = "A部門"
    wsSummary.Cells(1, 9).Value = "A部門"
    wsSummary.Cells(1, 10).Value = "A部門"
    wsSummary.Cells(1, 11).Value = "B部門"
    wsSummary.Cells(1, 12).Value = "B部門"
    wsSummary.Cells(1, 13).Value = "B部門"
    
    wsSummary.Cells(2, 1).Value = "店舗"
    wsSummary.Cells(2, 2).Value = "項目A"
    wsSummary.Cells(2, 3).Value = "項目B"
    wsSummary.Cells(2, 4).Value = "項目C"
    wsSummary.Cells(2, 5).Value = "項目A"
    wsSummary.Cells(2, 6).Value = "項目B"
    wsSummary.Cells(2, 7).Value = "項目C"
    wsSummary.Cells(2, 8).Value = "項目A"
    wsSummary.Cells(2, 9).Value = "項目B"
    wsSummary.Cells(2, 10).Value = "項目C"
    wsSummary.Cells(2, 11).Value = "項目A"
    wsSummary.Cells(2, 12).Value = "項目B"
    wsSummary.Cells(2, 13).Value = "項目C"
    
    rowOffset = 3 ' データを貼り付ける開始行

    ' 各シートからデータをコピー
    For i = 1 To 4
        Select Case i
            Case 1
                Set ws = Sheets("sheet1")
                ws.Range("C2:E" & ws.Cells(ws.Rows.Count, "C").End(xlUp).Row).Copy
                wsSummary.Cells(rowOffset, 1).PasteSpecial xlPasteValues
                wsSummary.Cells(rowOffset, 5).PasteSpecial xlPasteValues
                rowOffset = rowOffset + ws.Range("C2:C" & ws.Cells(ws.Rows.Count, "C").End(xlUp).Row).Rows.Count
                
            Case 2
                Set ws = Sheets("sheet2")
                ws.Range("B2:E" & ws.Cells(ws.Rows.Count, "B").End(xlUp).Row).Copy
                wsSummary.Cells(rowOffset, 1).PasteSpecial xlPasteValues
                wsSummary.Cells(rowOffset, 2).PasteSpecial xlPasteValues
                rowOffset = rowOffset + ws.Range("B2:B" & ws.Cells(ws.Rows.Count, "B").End(xlUp).Row).Rows.Count
                
            Case 3
                Set ws = Sheets("sheet3")
                ws.Range("C2:E" & ws.Cells(ws.Rows.Count, "C").End(xlUp).Row).Copy
                wsSummary.Cells(rowOffset, 1).PasteSpecial xlPasteValues
                wsSummary.Cells(rowOffset, 8).PasteSpecial xlPasteValues
                rowOffset = rowOffset + ws.Range("C2:C" & ws.Cells(ws.Rows.Count, "C").End(xlUp).Row).Rows.Count
                
            Case 4
                Set ws = Sheets("sheet4")
                ws.Range("B2:E" & ws.Cells(ws.Rows.Count, "B").End(xlUp).Row).Copy
                wsSummary.Cells(rowOffset, 1).PasteSpecial xlPasteValues
                wsSummary.Cells(rowOffset, 11).PasteSpecial xlPasteValues
                rowOffset = rowOffset + ws.Range("B2:B" & ws.Cells(ws.Rows.Count, "B").End(xlUp).Row).Rows Count
                
        End Select
    Next i
    
    ' コピーしたデータの書式を調整
    wsSummary.Columns.AutoFit
    Application.CutCopyMode = False

    End Sub

その結果(笑)

②.セル位置を合わせてコピーする「ExcelVBAマクロ」を「ChatGPT」に聞く

それではいよいよ「ChatGPT」に「ExcelVBAマクロ」を作成してもらいます。
ついでに「マクロの詳細」と「使用方法」も<ITスキルゼロの人>でも理解できるように解説してもらいました。

スクリーンショット 2024-08-24 203403.png
返ってきた「ExcelVBAマクロ」&「マクロ実行マニュアル」
画像19.png

このマクロを「Excel」のVBAエディタに貼り付けると、4枚の定型帳票を1枚に揃える作業が自動化しました!

<できた【集計シート】>の「プロトタイプ」
画像25.png

③ データ成型の自動化

次に【集計シート】A列の「VLOOKUP関数」の検索値を自動的に追加し、データ成型をマクロで行うようにしました。
実はこれが手作業のためミスが大変多かったのです。自動化できれば作業負担が大きく削減されます。

追加で出した <データ成型自動化>「ExcelVBAマクロ」
Sub 集計データをコピーして編集する()

    ' #帳票1#のA2:Q31のデータを#集計#のD2にコピー
    Sheets("#帳票1#").Range("A2:Q31").Copy
    Sheets("#集計#").Range("D2").PasteSpecial Paste:=xlPasteValues
    
    ' #帳票2#のA2:Q31のデータを#集計#のF32にコピー
    Sheets("#帳票2#").Range("A2:Q31").Copy
    Sheets("#集計#").Range("F32").PasteSpecial Paste:=xlPasteValues
    
    ' #帳票3#のA2:Q31のデータを#集計#のB62にコピー
    Sheets("#帳票3#").Range("A2:Q31").Copy
    Sheets("#集計#").Range("B62").PasteSpecial Paste:=xlPasteValues
    
    ' #帳票4#のA2:Q31のデータを#集計#のI92にコピー
    Sheets("#帳票4#").Range("A2:Q31").Copy
    Sheets("#集計#").Range("I92").PasteSpecial Paste:=xlPasteValues
    
    ' #集計#シートのI92:N101の範囲をB92にコピーして、元のデータを削除
    Sheets("#集計#").Range("I92:N101").Copy
    Sheets("#集計#").Range("B92").PasteSpecial Paste:=xlPasteValues
    Sheets("#集計#").Range("I92:N101").ClearContents
    
    ' #集計#シートのE32:E61に'店舗'を入力
    Sheets("#集計#").Range("E32:E61").Value = "店舗"
    
    ' #集計#シートのG列で '*計' を検索し、そのセルに '本社' を入力
    Dim cell As Range
    For Each cell In Sheets("#集計#").Range("G:G")
        If InStr(cell.Value, "計") > 0 Then
            cell.Value = "本社"
        End If
    Next cell

End Sub

おー!全部入力できている。プロトタイプ完成!
すごい!今までの面倒な手作業が<ワンクリック>で終了!

<完成した【実績データ】>の「プロトタイプ」
スクリーンショット 2024-08-25 083255.png

3・実装

いよいよ、毎日使用している【集計シート】に「ExcelVBAマクロ」を実装します。

現在使用している【集計シート】ファイルと【実績データ】ファイル・および4種の定型帳票を1枚の【2024売上速報】ファイルに統合。
"集計""実績"それぞれのシートに合わせて細部を調整したプロンプトを作成。

実装用プロンプト

スクリーンショット 2024-08-31 190109.png

「ExcelVBAマクロ」を「ChatGPT」に出してもらい、「Excel」の「VBAエディタ」に貼り付けて実行。

スクリーンショット 2024-08-25 112539.png

すごい!ワンクリック一瞬で帳票作成完了!

なんと、今まで忙しい朝に15分かけて作成していた帳票が【マクロ実行】のクリックだけで完成!!

4・評価

月曜日にいそいそと同じ部署のKさんに「マクロ機能込み」の【2024売上速報】をメール。
Kさんは私が不在時に帳票作成して頂いています。

:woman_tone1: :週末に「マクロ」作ってみたんです。試してもらえる?
:girl_tone3: Kさん「マグロ」???
:woman_tone1: :違う!「ChatGPT」を勉強したから、週末に作ってみたんです。「ALT」と「F8」を一緒に押して【実行】をクリックしてね。
:girl_tone3: Kさん :うん? あら!すごい!!全部表が出来ている!
あれ?でも「部門」のところ、「支社」の合計と「本社」の合計が同じじゃない?

よく見ると、実装の際に微調整した「検索値」を「支社」と「本社」に分けるための「貼り付け」に間違いがありました。 ケアレスミス ですが指摘されないと自分では気が付かないものですね。

:girl_tone3:Kさん :この表、最後に新しいシートにコピーして値複写してるでしょ?そこまで「マクロ」にやってもらえると更に手間が省けない? 古いデータも消えていると次に使うときに間違えなくていいな。

そうですね。せっかくの自動化なので、そこまで【ボタン一発】で完成させたいですよね。
では、Kさんから頂いた以下の修正点を「ChatGPT」に伝え、新しい「ExcelVBAマクロ」を教えてもらいます。

①「検索値」の「貼り付け」位置指示修正
②"速報"シートを新しいブックにコピーし、値複写
③"集計"シートのデータ削除

スクリーンショット 2024-08-31 185121.png

最終的にできた <帳票集計自動化>「ExcelVBAマクロ」
Sub 集計マクロ()
    ' 各シートの変数を設定します
    Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet, ws4 As Worksheet, wsSummary As Worksheet, wsSokuho As Worksheet
    Dim newBook As Workbook
    Dim cell As Range
    Dim lastRow As Long
    
    On Error Resume Next ' エラー処理を追加してシートが存在しない場合に対応
    Set ws1 = ThisWorkbook.Sheets("帳票1") ' 実際のシート名に置き換えてください
    Set ws2 = ThisWorkbook.Sheets("帳票2") ' 実際のシート名に置き換えてください
    Set ws3 = ThisWorkbook.Sheets("帳票3") ' 実際のシート名に置き換えてください
    Set ws4 = ThisWorkbook.Sheets("帳票4") ' 実際のシート名に置き換えてください
    Set wsSummary = ThisWorkbook.Sheets("集計") ' 実際のシート名に置き換えてください
    Set wsSokuho = ThisWorkbook.Sheets("速報") ' 実際のシート名に置き換えてください
    On Error GoTo 0 ' エラー処理をリセット

    ' シートが見つからなかった場合のエラーチェック
    If ws1 Is Nothing Or ws2 Is Nothing Or ws3 Is Nothing Or ws4 Is Nothing Or wsSummary Is Nothing Or wsSokuho Is Nothing Then
        MsgBox "指定したシートが見つかりません。シート名を確認してください。", vbCritical
        Exit Sub
    End If
    
    ' #帳票1#のデータを#集計#にコピーします
    ws1.Range("A10:DM800").Copy
    wsSummary.Range("D3").PasteSpecial Paste:=xlPasteValues
    
    ' #帳票2#のデータを#集計#にコピーします
    ws2.Range("A10:DM800").Copy
    wsSummary.Range("F803").PasteSpecial Paste:=xlPasteValues
    
    ' #帳票3#のデータを#集計#にコピーします
    ws3.Range("A10:DM1500").Copy
    wsSummary.Range("B1603").PasteSpecial Paste:=xlPasteValues
    
    ' #帳票4#のデータを#集計#にコピーします
    ws4.Range("A10:DM300").Copy
    wsSummary.Range("I3103").PasteSpecial Paste:=xlPasteValues
    
    ' コピーしたデータを削除して整理します
    Application.CutCopyMode = False
    
    ' #集計#のI3103からN3403をB3103へコピーし、コピー元を削除します
    wsSummary.Range("I3103:N3403").Copy
    wsSummary.Range("B3103").PasteSpecial Paste:=xlPasteValues
    wsSummary.Range("I3103:N3403").Clear
    
    ' #集計#のE803からE1602に'タンポポ支社'と入力します
    wsSummary.Range("E803:E1602").Value = "タンポポ支社"
    
    ' #条件通り、G3からG800までとG3103以降のセルで'*計'を検索して'本社'と入力します
    ' G3からG800までの検索
    For Each cell In wsSummary.Range("G3:G800")
        If cell.Value Like "*計" Then
            cell.Value = "本社"
        End If
    Next cell
    
    ' G3103以降の検索
    lastRow = wsSummary.Cells(wsSummary.Rows.Count, "G").End(xlUp).Row
    For Each cell In wsSummary.Range("G3103:G" & lastRow)
        If cell.Value Like "*計" Then
            cell.Value = "本社"
        End If
    Next cell
    
    ' 速報シートのE1に"+■"と帳票1のA3を結合して入力します
    wsSokuho.Range("E1").Value = "■" & ws1.Range("A3").Value
    
    ' 速報シートを新しいブックにコピーします
    wsSokuho.Copy
    Set newBook = ActiveWorkbook
    
    ' 新しいブック全体を値に変換します
    With newBook.Sheets(1).UsedRange
        .Value = .Value
    End With
    
    ' "集計"シートのB3からDS4603までを削除します
    wsSummary.Range("B3:DS4603").Clear
    
    ' 処理完了のメッセージを表示
    MsgBox "全ての処理が完了しました!", vbInformation
End Sub

:clap_tone1:【ボタン一発】で「集計帳票」自動作成 完成!!

まとめ ~DXの夢は広がる〜

今回の自動化は【帳票の貼り付け】【貼り付けデータの成型】【シートをコピーして値複写】の手作業分を「ExcelVBAマクロ」に置き換えただけの<ホンの初歩>です。
が、結果オーライ。15分の削減には変わりありません。

この【集計帳票】の自動化で削減できた毎朝の15分間は、開店前にじっくりと自店の部門間や多店舗との実績を比較し、当日の売上対策を考えることが出来る貴重なものとなりました。
「ChatGPT」を有効に使えれば、ITスキルゼロでも憧れの【DX業務改善】が「夢」ではなく「現実」に出来るかもと感じています。

とはいえ「ChatGPT」に有効なマクロを返答させるよう、具体的に指示するのもひと苦労。「セル位置の相関」や「VLOOKUP関数」など、なけなしのITスキルで3日間「ChatGPT」に教えを請いながら試行錯誤で 【二人三脚】 の成果です。

初めて使ってみて「ChatGPT」は学習するといっても、それなりの質問にはそれなりの返答と利用者のレベル以上を自動的に返してくれるわけでなく、活用するには 使い手の「スキルアップ」 が必要だと実感しました。

この3日間で出来たものは<ホンの初歩>ですが、「ChatGPT」を活用すれば、今後は「作成ファイルの自動保存」や「バックアップ機能」さらに「データーベース化」、その先にはこのデータを活用した業務分析の自動化など、夢は大きくふくらみます。

すごいぞ!「ChatGPT」!「ExcelVBAマクロ」!

最後に【ChatGPT】#役割 "DXのプロ" からのお言葉

スクリーンショット 2024-08-26 004141.png

精進します。

「ChatGPT」とは2022年11月に米OpenAI社が公開したWebサービスで、機械とは思えないぐらいの自然なチャットのやりとりを実現してくれるAIです。原理的には「実際の人間のテキストチャットの内容を学習し、次に続く返答を予測するAIモデル」となっています。

<参考資料>
深津式プロンプトシステム

<私の一歩&二歩>

■この記事は下記を大幅に加筆修正いたしました。

2
1
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
2
1