前任者のエクセルVBAを解析したい・・

サラリーマンの皆さん、こんな事思ったことありませんか？
「前任者の作成したVBAが訳わからん！」
「入社する会社間違えてね？！」と・・・。

会社には一人二人いるんですよ・・。めちゃくちゃエクセルに詳しい人が!!
そんな人物の後任になったが最後・・記述したエクセルVBAがわからん！
だけど、業務にはほぼ必須になっている・・。
という状況が！

まだシートに記述している関数ならなんとかなります。
参照セルもわかるし、「IF」の中に何個「IF」があろうとも一つづつ検証していけばいいですから・・。

VBAになると途端に解析が難しい。
代名詞、変数、行列の指定などなど・・。

そんなコード解析に悩む人に朗報！
勉強になりつつ、コード解析も簡単になる、Chat GPT新機能「Canvas」が登場しました！


### Chat GPT「Canvas」
先日新たに、Chat GPTに「Canvas」という機能が追加された。
「Canvas」の昨日は主に以下の通り

コードレビュー：コードを改善提案を行う
ログの追加：デバッグに役立つ
コメントの追加：コードにコメント追加して理解しやすい
バグの修正：問題のあるコードを検出して修正、エラーを解決

簡単に言えば、文章執筆やプログラム言語の編集作業がしやすくなったイメージです。
まだまだ全容は理解していませんが試してみたいと思います。

##### ※注意!現状では有料版のみと機能です


### 「Canvas」を試してみる
試してみる前に、みなさんこんな事は思ったことありませんか？
「人事異動してきたけど、前任者が作成したVBAがわからん！」
こんな経験はありませんでしょうか。
コードの記述法はたしかに、それぞれの人物の性格がでます。
さらには、エクセルのバージョン変更で動かなくなった時、業務に多大な影響は出る事もあるでしょう。

そんな時に便利なのが、「Canvas」のレビュー機能になります。


## 実際に使用してみる


今回テスト用コードはこちらになります
```
Sub ListImageFiles()
    Dim ws As Worksheet
    Dim folderPath As String
    Dim fileName As String
    Dim row As Long
    
    Set ws = ThisWorkbook.Sheets("画像ファイル名")
    
    folderPath = ThisWorkbook.Path & "\"
    
    row = 2
    
    fileName = Dir(folderPath & "*.*")
    
    Do While fileName <> ""
        If LCase(Right(fileName, 3)) = "jpg" Or _
           LCase(Right(fileName, 3)) = "png" Or _
           LCase(Right(fileName, 3)) = "gif" Or _
           LCase(Right(fileName, 3)) = "bmp" Then
           
            ws.Cells(row, 1).Value = fileName
            row = row + 1
        End If
        
        fileName = Dir
    Loop
    
End Sub
```

マクロを動かす前にフォルダ内はこのようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881447/85832b2a-5f57-c82a-8349-018a4ac44da3.png)
上記VBAをファイルを画像ファイル３種類が同じフォルダに入っている想定です。

エクセルファイルのVBAを起動すると・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881447/7cc81df3-755b-20a7-5058-eb211e079409.png)
A２列以降に画像ファイル名が表示されました！

それでは次に、実際に「Canvas」を使ってみます！

### Chat GPT「Canvas」起動方法

Chat GPT「Canvas」の起動方法ですが、
Chat GPTのトップ画面のモデル選択で「GPT-4o with canvas」を選択します。
##### ※注意!現状では有料版のみの機能です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881447/1dd62b2a-d7fe-6790-c500-f46d7e39b478.png)


### 「Canvas」使用方法
それでは、実際に「Canvas」を使ってみましょう。
まずは、単純にこのコードの改善点として、B列に「拡張子」を追加してもらいましょう。



**プロンプト例①**
```
下記エクセルVBAのコードを改良してください。
・改良点
B列に取得した画像ファイルの拡張子を取得してください。

・エクセルVBA
＝＝＝上記のVBAコード＝＝＝＝
```

このように入力すると下記のような画面になります。
これが新機能の「Canvas」モードになります。

**※左側は従来の対話画面、右側がCanvas画面**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881447/fde212c1-58a7-c4ec-3201-d2718f81bcde.png)

この際、例えば「やっぱりC列にファイルサイズを表示するようにしたい！」場合
対話画面に入力すると、「Canvas」画面のコードが修正されます。


**※対話画面に「C列にファイルサイズを追加してください」**　
入力すると「Canvas」画面に反映される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881447/30266213-7abd-eb3b-77b0-5718a3a5da50.png)



プログラムのコーディングする際は、なんどもコード全文のやり取りをしなくても済むので
かなり編集が楽になります！
また、「前のコードに戻したい！」時も右上に戻すボタンがあるので、簡単に戻せます。

### 「Canvas」便利機能：コードレビュー機能

「Canvas」画面の右下ボタンからコードレビューを選択すると・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881447/d1954a72-fa3c-5347-7030-a990022f1b58.png)

なんと、Chat GPTが、コードのチェックをしてくれて改善点を提案してくれます。
「Canvas」画面では、修正箇所をハイライトしてくれるので非常にわかりやすいです。
修正提案を適用するしないなど、選択もできるようになっています。
**※この機能は現在使用すると英語で答えが返ってきますが
対話画面に「日本語でお願いします」と入れれば日本語になります。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881447/ef77be9b-6706-2820-b0f4-861d2bbea5a0.png)


## 最後に
「Canvas」は、プログラミングの初心者から上級者まで、コードの編集や改善を簡単に行える便利です！
コードレビュー機能以外にもバグチェック機能などもありますので
有料版利用している方は試してみてください！
※無料版もいずれ実装予定との事！

それでは、良い旅を！