とある流通業で衣料品を販売している私。
ITスキルゼロなのにイマドキの「DX業務改善」に興味を持ち2週間前から研修に参加することとなりました。
そんな私が今回知ったのは、今をときめくAI 「ChatGPT」。
最近よく聞く『ChatGPTで業務効率化』とか『ChatGPT仕事術』。
【ボタン一発】で帳票作成! 憧れる~!
「ChatGPT」に業務効率化を相談
まずは「ChatGPT」もとい、我がデスクトップの【チャッピー】に 【業務効率化】 の何が得意なのか聞いてみました。
ふむふむ、 「プロセス改善とツールの導入」 か...そういえば目下業務上の困りごとがひとつあるんだよねー
では、3連休の週末を利用して 「現状分析と改善策の設計、実行と評価」 を【チャッピー】と二人三脚でやってみましょうか!
「集計業務」の課題分析と改善
使用ツール:
「ChatGPT」「ExcelVBAマクロ」
①現状分析
業務上の困りごととは 「集計業務に時間かかりすぎ」 問題です。
日々の営業情報は業務遂行の基礎資料として大変重要です。弊社では社内システムによる営業実績を毎日出力可能なのですが、その出力フォームが固定化されており、実務上知りたい項目を簡単に比較できないのです。
そのため、出力帳票のExcelシートを4枚繋いで手作業で加工しています。データー検索も入れるとその時間15分。慌ただしい開店時間前には大変貴重な時間。繁忙期にはこの時間を惜しんで作成を後回しにすることも。
以上に対する【チャッピー】#役割 "DXのプロ" の回答
確かに、この時間を自動化して削減すれば朝の貴重な時間にゆとりが生まれます。
また、現状の手作業でのExcelシート貼り合わせはミスが発生しやすく、修正版を流すことも度々あります。
②改善の方向性
【チャッピー】のからの改善提案です。
「Excel」を「マクロ」? もしくは「Googleスプレッドシート」を「GAS」?で動かすのか・・・
ITスキルゼロ人間にはちょっとハードルが高いんじゃね?? 週末3日間で出来る??
ともかく、社内システムの出力データーが「Excel」形式であること、部署内での「Googleスプレッドシート」普及率ほぼ0%であることから 「改善策1」 で進めます。
③実施
③-1_ <課題の抽出>
その1・定型帳票の問題点
こちらが現在の社内営業情報帳票出力のモデルです。
(以下、個別情報につき、帳票モデルとダミー数値です)
<図表1>
問題となるのは、出力データの縦軸に「組織」もしくは「商品分類」、横軸に「項目」と固定して出力される事。
このため、例えば「店舗別・部門別」の実績項目を比較しようと思えば、定型出力帳票では何枚も見比べなくてはいけません。一目で分からず大変不便です。現状では4枚の定型帳票を出力しています。
<図表2>4枚の定型帳票
そのため縦軸「組織」・横軸「商品階層」&「項目」の【実績シート】を毎日手作業で作成している状況です。
その2・集計フォームの問題点
定型出力される帳票から手作業での【実績シート】作成手順は以下のとおりです。
①【集計シート】に4枚の定型帳票を貼り付けて1枚にする。
②【集計シート】上でデーターを整える。
③【集計シート】を【実績シート】に貼り付け「VLOOKUP関数」でデーターを抽出し作表。
実はこの定型帳票、 出力項目によって「組織」「商品階層」「項目」のデーター位置がバラバラ です。
現状では「VLOOKUP関数」で抽出しやすくするために一度【集計シート】に貼り付けを行ってデータを整えています。それが 手作業のため時間を要し、ミスが発生する原因 となっています。
③-2_ <プロトタイプの試作>
マクロの動作確認のため、【集計シート】のプロトタイプを試作。15列20行の「ミニ定型帳票」を①~④まで4種類用意。
ステップ1:4枚の定型帳票シートの貼り付け自動化
⇒「ChatGPT」の回答にある「Excelマクロ」で自動化を目指す。
①・出力帳票のデーター位置を確認
まず、4枚の定型出力帳票のバラバラなデーター位置を確認します。
<図表4>
帳票ごとに縦軸の「組織」と横軸の「商品分類」「項目」の間に「コード」が入っており、集計したい「項目」のセル位置がバラバラです。
これが「VLOOKUP関数」を使う上での障害となっていて、現状は「セル位置」を合わせるため手作業で4シートを【集計フォーム】に貼り合わせています。
②.「ChatGPT」にセル位置を合わせてコピーする「ExcelVBAマクロ」を聞く
まず、「ChatGPT」に正しいマクロを書いてもらうために、貼り付けする「項目」の位置関係を整理します。
【集計フォーム】の 【O列:項目A】を基準 としてに4シートのデーターを合わせ、コピー先とコピー元を確認します。
<図表5>
それではいよいよ【チャッピー】#役割 "プロのプログラマー"に「ExcelVBAマクロ」を作成してもらいましょう!
ついでに「マクロの詳細」と「使用方法」も<ITスキルゼロの人>でも理解できるように解説してもらいます。
返ってきた「ExcelVBAマクロ」&「マクロ実行マニュアル」
ステップ1:結果 やったー!できた!「ChatGPT」の能力に感動!
【チャッピー】#役割 "プロのプログラマー"のマニュアル通りに実施してみたら、【集計フォーム】に今まで時間のかかっていたコピーの貼り合わせが出来ている!
ここまできたらようやく半分。この先は【集計フォーム】から【実績シート】へのデータコピーの自動化です。実はこの先が手作業で一番時間がかかり、間違いが多かったところです。
ステップ2:【集計フォーム】上でのデータ成型の自動化
⇒【実績シート】の「VLOOKUP関数」検索値に対する追加入力を自動化する
①・「集計フォーム」データー成型のためのコピー&削除の「ExcelVBAマクロ」を聞く。
【実績シート】は「項目」を「店舗別」に比較するために、縦軸に「組織階層」、横軸に「商品分類」&「項目」を並べています。
そのために「VLOOKUP関数」の検索値が「組織階層」用と「商品分類用」の2種類必要となります。<「項目」は列番号で指定>
<図表6>
=+E2&G2&I2&K2 商品階層名+支社+事業部+店舗(組織階層)
【チャッピー】に聞くと
とのこと。「A列」に検索値を置かないと関数が機能しません。
ところが、4枚の「定型帳票」は<図表5>のとおり「列項目」がバラバラなため、 追加の手作業を発生 させているのです。
問題のあるシートは2つあります。
1つ目は「帳票2」
この帳票は「商品階層」の最上位である「店舗」のデーターですが、商品階層名の「列」がありません。そのため 「E列」に商品階層名の「店舗」を入力 する必要があります。
2つ目は「帳票4」
この帳票は基準となる 【O列:項目A】 に合わせるため、ステップ1のマクロで商品階層名である「グループ名」が「J列」にコピーされています。
「VLOOKUP関数」の検索値を「A列」に揃えるため 「J列」から「E列」にコピーし「J列」を削除 します。(「切り取り」ではA列の計算式が壊れる)
これらを追加で実施するための「ExcelVBAマクロ」を【チャッピー】に再度を出してもらい、「Excel」の「VBAエディタ」に貼り付けて実行します。
追加で出した「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
ステップ2:結果 おー!全部入力できている。プロトタイプ完成!
すごい!今までの面倒な手入力が<ワンクリック>で終了!
出来た【実績データ】の「プロトタイプ」がこちら
ではでは、いざ本番!
③-3_ <実装>
毎日使用している【集計フォーム】ファイルと【実績データ】ファイル・および4種の定型帳票を1枚の【2024売上速報】ファイルに統合。
"集計""実績"それぞれのシートに合わせて細部を調整したプロンプトを作成。
「ExcelVBAマクロ」を【チャッピー】に出してもらい、「Excel」の「VBAエディタ」に貼り付けて実行。
実装結果: すごい!憧れの【ボタン一発】で帳票作成完了!
なんと、今まで忙しい開店前に15分かけて作成していた帳票が【マクロ実行】のワンクリック一瞬で完成!!
④評価
月曜日にいそいそと同じ部署のKさんに「マクロ機能込み」の【2024売上速報】をメール。Kさんは私が不在時に帳票作成して頂いています。
私:週末に「マクロ」作ってみたんです。試してもらえる?
Kさん: 「マグロ」???
私:違う!「ChatGPT」を勉強したから、週末に作ってみたんです。「ALT」と「F8」を一緒に押して【実行】をクリックしてね。
Kさん:うん? あら!すごい!!全部表が出来ている!
あれ?でも「部門」のところ、「支社」の合計と「本社」の合計が同じじゃない?
よく見ると、実装の際に微調整した「検索値」を「支社」と「本社」に分けるための「貼り付け」に間違いがありました。ケアレスミスですが指摘されないと自分では気が付かないものですね。
Kさん:この表、最後に新しいシートにコピーして値複写してるでしょ?そこまで「マクロ」にやってもらえると更に手間が省けない?
そうですね。せっかくの自動化なので、そこまで【ボタン一発】で完成させたいですよね。
では、Kさんから頂いた以下の修正点を
①「検索値」の「貼り付け」位置指示修正
②"速報"シートを新しいブックにコピーし、値複写
③"集計"シートのデータ削除
【チャッピー】に伝え、新しい「ExcelVBAマクロ」を教えてもらいます。
最終的にできた「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
これで本当に【ボタン一発】で帳票作成 完了!!
まとめ ~DXの夢は広がる〜
今回の自動化は【帳票の貼り付け】【貼り付けデータの成型】【シートをコピーして値複写】の手作業分をマクロに置き換えただけの<ホンの初歩>です。おそらく集計方法ももっと最適な関数があると思います。が、結果オーライ。15分の短縮には変わりありません。
この【集計帳票】の自動化で削減できた15分間は、開店前にじっくりと自店の部門間や多店舗との実績を比較し、当日の売上対策を考えることが出来る貴重なものとなりました。
「ChatGPT」を有効に使えれば、ITスキルゼロでも憧れの【DX業務改善】が「夢」ではなく「現実」に出来るかもと感じています。
とはいえ「ChatGPT」に有効なマクロを返答させるよう、具体的に指示するのもひと苦労。「セル位置の相関」や「VLOOKUP関数」など、なけなしのITスキルで3日間「ChatGPT」に教えを請いながら試行錯誤で 【二人三脚】 の成果です。
初めて使ってみて「ChatGPT」は学習するといっても、それなりの質問にはそれなりの返答と利用者のレベル以上を自動的に返してくれるわけでなく、活用するには 使い手の「スキルアップ」 が必要だと実感しました。
↓ 私の最初の「プロンプト」で返ってきたマクロで出来た表(笑)
この3日間で出来たものは<ホンの初歩>ですが、「ChatGPT」を活用すれば、今後は「作成ファイルの自動保存」や「データーベース化」、さらにはそれを活用した業務分析の自動化など、夢は大きくふくらみます。
すごいぞ!「ChatGPT」チャッピー!
最後に【チャッピー】#役割 "DXのプロ" からのお言葉
精進します。
「ChatGPT」とは2022年11月に米OpenAI社が公開したWebサービスで、機械とは思えないぐらいの自然なチャットのやりとりを実現してくれるAIです。原理的には「実際の人間のテキストチャットの内容を学習し、次に続く返答を予測するAIモデル」となっています。
<参考資料>
深津式プロンプトシステム
<私の一歩&二歩>