クリック数を減らしたい！マクロ作成をChatGPTにお願いしてみた！

## クリック数が多い作業を簡素化するマクロのコード！ChatGPTに教えてもらいました！

こんにちは！
小売業の仕入れ部門で働き、日々数値と時間に追われているものです💦
先日ChatGPTを学び、プログラミングのコードも教えてくれるということを初めて知りました😲

私が働いている部署ではExcelとOutlookを使い、かつ実施内容は毎回同じという業務が多いです。
日頃からマクロで何とかならないかな~と思っていたのでこれは！と思いChatGPTに聞いてみました！

ちなみに私のレベル、マクロは少しだけ触ったことがありますがすぐ挫折してその後全く触っておらず、という感じです、、、🤨

## データ加工~メール送信まで何回クリック？
**私、クリック数が多いこと嫌いです・・・**
私の業務の中で、
①　データを送付用に加工
②　メール添付
③　メール送信
というものがあり、これがまたクリック数が多い！

特に①の「送付用に加工」はデータ容量を軽くするためだけの作業。
内容は計算式のシートをコピー＆ペーストで値貼り、データ容量が重いシートを複数選んで削除、ファイル名を変えて保存。
メールを新規作成しそのファイルを添付。メール送付先は毎回一緒で、週2回実施。
データ加工からメール送信までクリックすること約20回、、、
毎回同じことをクリック20回、、、、、、
これをどうにかしたい！と思いました。
**教えて！ChatGPT!!!**


## 完成品！！

元データのマクロボタンをクリックすると、、、
送付用に容量が軽減されたファイルが出来上がり、
そのファイルを添付、指定したメールアドレスを挿入したメールが作成されました！

　　今まで・・・クリック20回、所要時間約2分
　　**完成品・・・クリック 3回、所要時間約5秒**
　　（1、マクロボタン、2、●●に保存しますか？に対して「はい」、3、送信ボタン）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3572038/2121012e-1127-db74-836a-2d8413c3126a.png)
											

## 使用したツール
ChatGPT
Excel
Outlook


## 事前準備
**メール送付先設定**
元データとなるExcelファイルにシートを追加、ここではシート名は「メール送付先」とします。
そのA列に送付したいメールアドレスを記載します（複数可）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3572038/a2282ef7-cbd4-e6cf-14e0-b26a528608ee.png)


**開発タブの表示**
**Excelで「開発タブ」が表示されていない方は設定が必要です。**
開発タブがあることでマクロが設定できます。
Excelで「開発」のタブは表示されている方はここは飛ばしてください。

<details><summary>詳細はこちら</summary>

エクセルのファイルを開き、
下の方にあるオプションをクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3572038/b44fb716-b212-150e-06b1-c2b6c9404cfb.png)

リボンのユーザー設定でメインタブ内の「開発」にレ点をつけます。
これでタブに「開発」が追加されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3572038/fdf58649-845d-6e6a-5c28-0201327d6a49.png)

ちなみにここでいうコードは、下記のモジュール内に貼り付けることでマクロが作動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3572038/606a6b30-69b1-2a63-f8b7-7e3ad50c9bdb.png)

</details>

## ChatGPTへの質問
さて、いよいよChatGPTにコードの書き方を教えてもらいます！

### はじめの質問
まずはこんな風に聞いてみました。
（以降、ChatGPTの返答は途中でカットしています）
とても丁寧に教えてくれます。注意点も教えてくれます！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3572038/6269c742-c45d-e7a8-be20-a63ae7903d20.png)

### 追加の質問
次に追加の要求をすると前の質問を踏まえた回答をくれます。
（多少日本語が変でもくみ取ってくれますが、誤解される場合もあるので正しい伝え方がいいでしょう）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3572038/26fbf70e-327b-2c17-7a72-e014759da491.png)

### 作動しなかった時
教えられた通りにコード入力しても、エラーだったり違う動作をしたりすることがありました。
そんな時はありのままを伝えましょう。別の方法を教えてくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3572038/e76906fd-1492-afd5-4174-2133ad818c34.png)

:::note warn
**質問は整理してから！**
追加で質問や要求をしていったら最後に漏れがあったり、誤解があったりしました。
マクロも不慣れなことからコード修正もうまくいかず、、途中でつまったら一度リセットして質問は１つにまとめることをオススメします。
:::

### ChatGPTとの協力
今回コードを作るにあたって、うまくいかないことがあり何度も何度もやりとりをしました。
そのうちにChatGPTと一緒に頑張っているような気分になり、同志のような気持ちになりました、、、😃
<details><summary>そんな気持ちにさせてくれたChatGPTとのやりとりはこちら</summary>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3572038/405b776d-e013-65f1-a040-4f8e48ba290a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3572038/2b6f72c8-9222-17fd-383d-f566ae7eef09.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3572038/4f90d5e9-bb0a-2448-c65d-bffb1ca74563.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3572038/ecfb26c9-03d5-11c7-47ee-e9e2c1f89031.png)
</details>


## 最終的な質問と、完成したコード
### 質問内容

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3572038/103dd00b-988f-4e2e-963e-c7389235ecff.png)

<details><summary>質問内容をコピペするならこちら</summary>

次のマクロを作りたいです。
エクセルに「整形」というシートがあります。その中身を計算式から値に変更したい。
その後「②データ貼付」というシートと「マスタ貼付」というシートを削除したい。
そのファイルは新たにファイル保存。ファイル名は既存のファイル名の先に送付用とつけ、元のファイルと同じフォルダに保存します。
そのファイルをoutlookメールに添付します。
メール送付先のアドレスはシート「メール送付先」のA列に記載されています。
宛先にそのアドレスをすべて入れ、作成するメールは１つです。
メールの件名は
「本日の紳士SOQ」
メール文内のテキストは
「お疲れさまです。
本日のSOQ実績を送付いたします。
よろしくお願いいたします。」
その段階でメールは送信までせずに、表示される段階で完了です。
</details>

### 完成したコード！！

<details><summary>コードはこちら！</summary>

```visualbasic:vba

Sub PrepareAndDisplayEmail()
    Dim ws As Worksheet
    Dim filePath As String
    Dim SubjectText As String
    Dim MailBody As String
    Dim RecipientSheet As Worksheet
    Dim AttachmentSheet As Worksheet
    
    ' "整形"シートの参照
    On Error Resume Next
    Set ws = ThisWorkbook.Sheets("整形")
    On Error GoTo 0
    
    If Not ws Is Nothing Then
        ' 計算式を値に変更する
        ws.Cells.Copy
        ws.Cells.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        
        ' 「②データ貼付」と「マスタ貼付」シートを削除する
        Application.DisplayAlerts = False
        On Error Resume Next
        ThisWorkbook.Sheets("②データ貼付").Delete
        ThisWorkbook.Sheets("マスタ貼付").Delete
        On Error GoTo 0
        Application.DisplayAlerts = True
        
        ' ファイル名の変更と保存
    Dim newFileName As String
    Dim folderPath As String
    
    filePath = ThisWorkbook.FullName
    folderPath = Left(filePath, InStrRev(filePath, "\"))
    
    newFileName = folderPath & "送付用_" & Right(filePath, Len(filePath) - InStrRev(filePath, "\"))
    
    If MsgBox("ファイルを「" & newFileName & "」として保存しますか？", vbQuestion + vbYesNo, "保存の確認") = vbYes Then
        ThisWorkbook.SaveAs newFileName
        
        ' 作成したファイルを添付
        Dim OutApp As Object
        Dim OutMail As Object
        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(0)
        
    
    ' 送信先のアドレスを取得
    Set RecipientSheet = ThisWorkbook.Sheets("メール送付先")
    Dim LastRow As Long
    LastRow = RecipientSheet.Cells(RecipientSheet.Rows.Count, "A").End(xlUp).Row
    
   ' メールアドレスをまとめるための変数を初期化
    Dim allRecipients As String
    allRecipients = ""
    
    ' すべてのメールアドレスを取得
    For i = 1 To LastRow
        Dim recipientAddress As String
        recipientAddress = RecipientSheet.Cells(i, 1).Value
        
        ' すべてのメールアドレスを１つの変数にまとめる
        If allRecipients = "" Then
            allRecipients = recipientAddress
        Else
            allRecipients = allRecipients & ";" & recipientAddress
        End If
    Next i
    
    ' １つのメールにまとめた宛先に送信
    If allRecipients <> "" Then
        ' メールの件名と本文を設定
        SubjectText = "本日の紳士SOQ"
        MailBody = "<p>お疲れさまです。</p>" & _
                   "<p>本日のSOQ実績を送付いたします。</p>" & _
                   "<p>よろしくお願いいたします。</p>"

        ' Outlookオブジェクトの生成
        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(0)
        
        ' メールの設定
        With OutMail
            .To = allRecipients ' まとめた宛先を設定
            .Subject = SubjectText
            .HTMLBody = MailBody ' HTML形式で本文を設定
            
            ' Excelファイルを添付
            If newFileName <> "" Then
                .Attachments.Add newFileName ' 作成したファイルを添付
            End If
            
            ' メールを表示
            .Display
        End With
        
       ' Outlookのオブジェクトを解放
        Set OutMail = Nothing
        Set OutApp = Nothing
        Else
        MsgBox "メール送付先が見つかりません。", vbExclamation
    End If
    Else
        MsgBox "「整形」シートが見つかりません。", vbExclamation
    End If
    End If
End Sub
```

</details>

以上をマクロのモジュール内に打ち込み完成です！！！🤣🤣🤣
マクロボタンを設定するとより動作が簡素化されます☝


  

**今回はこちらの記事を参考にさせていただきました。**
**ありがとうございます！！！**

https://qiita.com/gushisushi/items/650bfc46fe0e1d3b452c

https://qiita.com/navy-blue919/items/463e7c2b52f6dcea8a85


## ChatGPTを使っても出来なかったこと
やりとりを繰り返しても出来なかったことがあります。

**本文への画像貼り付け**
メール本文の中に表の画像を貼り付けたく、コードを教えてもらったのですがマクロが正常に作動しませんでした。
ChatGPTと何度も何度もやり取りし、エラーが出たり、出来ても別の動作が漏れたりを繰り返していました。
今回は出来ませんでしたがまた改めて質問を整理してトライしてみようと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3572038/4d9cd89b-bb41-fe4d-5f5a-d97a6ae6f257.png)



## 作ってみて
**自分の感想**
衝撃、、、でした。
ChatGPTは聞いたらすぐ教えてくれる。
しかも質問が不完全でも予想して答えてくれる。
そしてマクロ。秒で作業完了してくれます。
これは業務改善どんどんするぞー！！！
作業時間減らしてもっと考える時間や未来のことに時間を使うのだ！！！
と、とってもモチベーションが上がったのでした。

**周りの感想**
さっそくこちらのマクロ、一緒に業務していただいているパートさんに使ってもらいました。
「すごーい！！」って言ってくれることを期待しながら（ワクワク😊）。
そしたら、、、

「そうですね、メールの本文にファイル内の表の画像を付けられたら情報がすぐ見られていいですね」
「で、●●の件なんですが、・・・・」

はい、まさにその通りです。。。
それはトライしたのですがどうしてもマクロがうまく作動せず、、、課題です。

すぐ業務に使える！と思ったのですが、より完成度が高くないとわざわざ今やっているやり方からそちらには移行しづらいですね、、、相手がそれを望んでいない、興味が無いならなおさらです。

**業務改善に向けて**
今は今で一生懸命やっています。
ただ**作業**と**結果対応**の時間が多いんだと思います。
やるべきことは仮説を立ててそれに取り組んでチェック＆アクションを繰り返すこと。
**より良い未来**に向けて行動を変えていくこと。

そうしていくためにもChatGPTを活用して**時短**を図るのはとても有効なことをとても実感しました。
最後まで読んでいただきありがとうございました🤗