ChatGPTでマクロ作成！文字列を打ち込むとグレーアウトしてくれるマクロを組んでみた

## スケジュール管理業務が多くて確認作業が大変😫

みなさんこんにちは！
私は店舗のデバイス管理業務を担当しているヤットと申します。
業務としては、全国にある店舗へITデバイスに関連する資材を手配したり、システムの更新プログラムの配布を行ったりしています。

しかし、私の職場は全国に500以上もの店舗を展開しており、
全店舗へ資材の手配やシステムの更新プログラムを配布作業などは一日にまとめて行わず、スケジュールを組み、決めた日程で手配を行っております。

配布スケジュールを管理する際にExcelを使用しているのですが、500店舗以上もあることからどこまで手配が完了しているのか、把握するのがパッと見ただけでは難しいのが現状です……

## 今回やりたいこと！！

現在私が店舗への配布に使用している管理表がこちらです。
（一部、情報を伏せさせていただいております）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579182/05301f39-7104-87ff-f66b-40fc3e6df011.png)

対応が完了したかどうかはE列のステータスで管理をしております。

見ていただいた通り、手配したかどうか確認をするのに真っ白だと時間がかかってしまい、
大変めんどくさいですし、抜け漏れもでてしまいます。

そこで今回、私はマクロを使用してステータスが完了になっている場合、グレーアウトさせてパッとみただけで完了していることがわかるような仕組みにしたいと思います！


## 今回使用するツール
- ChatGPT
- Excel

マクロにはVBAコードと呼ばれるコードが必要になります。
ですが、私はコードの知識がありません……😓😓

そこで今回、私がマクロ作成に使用するのが世界中で使用されるようになった**ChatGPT**です。
ChatGPTは**コード知識がなくてもコードを作成できる**という優れものになります。
それり利用してマクロを作成していきたいと思います😊

#### ＜ChatGPTについて知りたい方はこちらを参照ください＞

https://aismiley.co.jp/ai_news/chatgpt-tsukattemita/


## マクロが完成しました！

マクロボタンをクリックするとステータスが完了になっている行は
グレーアウトされるようになり、パッと見ただけでどの店舗が完了しているの
一目でわかりやすくなりました。✨✨

（マクロ導入前）
1. ステータスを完了にする
1. 完了になっている行を範囲選択する
1. グレーに色を変更する

1行にかかる時間　約2秒

**（マクロ導入後）**
1. **ステータスを完了にする**
1. **マクロボタンを押す**

**1行にかかる時間　約1秒**

::: note warn
実際にかかる時間は対応する店舗数に比例します。

（今まで）1店舗約2秒　⇒　500店舗約1000秒[約16分]
**（導入後）1店舗約1秒　⇒　500店舗約500秒　[約8分]**

:::

#### 完成したExcelがこちら
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579182/4b43fdf9-7ddf-e871-6e8a-e709a5201c80.png)


## 事前準備
- マクロ作成必要な知識を身につけよう
 
マクロはExcelに標準で搭載されているVisual Basicを利用することで使用することができます。

下記手順を参考に開けることを確認おいてください。
[開発タブ] ＞　[Visual Basic]　＞　Visual Basic内にて[挿入]　＞[標準モジュール]

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579182/ef6c8786-e1b9-7436-5fc2-3ca0cf92c016.png)


## 実装手順

ChatGPTにVBAコードを作成してもらうために、やりたいことをプロンプトを送ることで
実装に必要なコードを作成してくれます。

::: note warn
**プロンプトとは、**
ChatGPTに質問するときの文章を指します。

例）
- 今日の天気をおしえてください。
- ○○を行うためのコードを作成してください。

:::

## はじめのプロンプト

Excelデータで、ステータスが**完了**になっている行はグレーアウトになるように
するマクロを作成してもらいます。

#### 使用したプロンプトがこちら

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579182/95406944-b0ba-ee14-7ba0-c7cb201a8fe5.png)


### 実際にできたコード

先ほどのプロンプトからChatGPTが作成してくれたVBAコードがこちらになります。


```visualbasic:vba

Sub グレーアウト処理()
    Dim ws As Worksheet
    Dim rng As Range
    Dim cell As Range
   
    ' シートの指定（シート名を適切なものに変更）
    Set ws = ThisWorkbook.Sheets("配信スケジュール")
   
    ' データの範囲を指定（E列のデータがある範囲）
    Set rng = ws.Range("E:E")
   
    ' データの各セルに対して処理
    For Each cell In rng.Cells
        ' 「ステータス」が「完了」の場合にグレーアウト
        If cell.Value = "完了" Then
            cell.EntireRow.Interior.Color = RGB(192, 192, 192) ' グレーアウトの色（灰色）を指定
        End If
    Next cell
End Sub

```

上記のVBAコードをマクロのモジュール内にペーストします。
これだけでマクロが完成です！！

実際にマクロを実行してみると、ステータスが完了になっている行が
グレーアウトされました🥳🥳
かなりこれだけでも楽になります！！

でも、これだけだと完了ステータスを一旦未完了に戻したときに
グレーアウトになったままになってしまうので、
次のプロンプトを送りました。

---

### 最終のプロンプト

完了以外のステータスの時は塗りつぶしなしにしてもらうように
コードを作成してもらいます。

#### 使用したプロンプトがこちら

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579182/e3c6076a-6f9c-5f13-febc-3227972ae430.png)


### 最終的に出来上がったコード

```visualbasic:vba

Sub 色変更マクロ()
    Dim ws As Worksheet
    Dim rng As Range
    Dim cell As Range
   
    ' シートの指定（シート名を適切なものに変更）
    Set ws = ThisWorkbook.Sheets("配信スケジュール")
   
    ' データの範囲を指定（E列のデータがある範囲）
    Set rng = ws.Range("E:E")
   
    ' データの各セルに対して処理
    For Each cell In rng.Cells
        ' 「完了」の場合は行をグレーアウト
        If cell.Value = "完了" Then
            cell.EntireRow.Interior.Color = RGB(192, 192, 192) ' グレーアウトの色を指定
        Else
            cell.EntireRow.Interior.ColorIndex = xlColorIndexNone ' 背景色を白に戻す
        End If
    Next cell
End Sub

```

上記で作成されたコードをマクロのモジュールに上書きします。
実行を行ったところ、完成ステータス以外の行は、
グレーアウトが外れることに成功しました。🎉🎉



<details><summary>最初から最後までのChatGPTとのやり取りをこちらにまとめておきます</summary>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579182/c0df6ae7-51ad-b114-070a-bf1df8b7d7ed.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579182/e6d96347-5e49-f164-1a28-891f368bc4ed.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579182/5e8a8f55-fb56-1b86-291f-ecf4798d9dba.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579182/ac2e574d-9891-c01a-c30e-cc1ef89399db.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579182/a3d1e72a-4098-121a-2563-ca44438874fe.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579182/55e0bd3f-af4a-a5fc-6451-8847a07b6622.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579182/d40011d7-e6c1-8dfb-2247-847d6fbf8ccc.png)

</details>



### 今回、追加で行ったができなかったこと

今回できなかったことがあります
それはマクロを自動で実行する仕組みすることです。
ステータスを完了にするだけでグレーアウトになるようにすれば、都度ユーザーがマクロを実行するという手間が省けていいのだが、今回実装することができませんでした。

ChatGPTにコードを生成もらったのですが、モジュールに当てはめても一向に動きがありません。
コードを入力しても動かないことを伝えても、こうしたら動くと返事が返ってくるばかりでした……😭😭
おそらく、プロンプト作成に問題がありChatGPTが正常に動作するコードを作成できなかったのかもしれません。

<details><summary>プロンプト/コードを書いておくので、気になる方はこちらを参照ください</summary>

#### ChatGPTに送ったプロンプト

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579182/73f80f76-179c-d7b2-c094-f366d9277484.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579182/10ca20ab-da48-ded8-30ef-5f9d6484af76.png)


#### 試してみて動かなかったコード

```visualbasic:vba

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim ws As Worksheet
    Dim rng As Range
    Dim cell As Range
   
    ' シートの指定（シート名を適切なものに変更）
    Set ws = ThisWorkbook.Sheets("配信スケジュール")
   
    ' データの範囲を指定（E列のデータがある範囲）
    Set rng = ws.Range("E:E")
   
    ' 変更されたセルがE列にある場合の処理
    If Not Intersect(Target, rng) Is Nothing Then
        Application.EnableEvents = False ' イベントを一時的に無効化
       
        ' データの各セルに対して処理
        For Each cell In Intersect(Target, rng).Cells
            ' 「ステータス」が「完了」の場合にグレーアウト
            If cell.Value = "完了" Then
                cell.EntireRow.Interior.Color = RGB(192, 192, 192) ' グレーアウトの色（灰色）を指定
            Else
                cell.EntireRow.Interior.ColorIndex = xlNone ' グレーアウト解除
            End If
        Next cell
       
        Application.EnableEvents = True ' イベントを有効化
    End If
End Sub

```


</details>

## 完成してみての感想

今回初めてコードを使ってのシステム作成をやってみましたが、
めんどくさいと思っていた作業を短縮できるので、かなり便利だと感じました。
実際にコードを作成したのはChatGPTがやってくれたんですけね😝😝
（なんでいままでやってこなかったのかと後悔……😔）

#### ChatGPTの感想

ChatGPTは一度送ったプロンプトを記憶しているため、追加で質問するときは
一度おくった**プロンプトを省略することができる**のが、とても使いやすく感じました。
ただ、プロンプトがあやふやだと自分が実装したいことは異なる回答をもらうことになるため、
実装をしたいことを言語化する能力が問われると感じました。

#### 最後に

今までは、システムを作成するときは**人が一からコード考える**という作業がありましたが、これからの時代はChatGPTが土台のコードを考えて人はその土台に付け足していくという時代が来るのだと実感しました。
そのため、我々が今後求められる能力というのは**アイデアを生み出す力**とそれを**実行するための言語化能力**なのだと考えます。
私もその力を身に着けていこうと思います。