Excelをサクッと加工したい…ChatGPTにExcel VBAコードを聞いてみた！

# Excelの単純な加工ってめんどくさい…
Excelの行や列を消したり、追加したりする単純な加工ってめんどくさい:frowning2:
単発だったら仕方ないけど、毎月の作業だとなんかこの作業無意味やなと思ってしまいます…

先日UdemyでExcel VBAの超入門講座を受講し、これはめんどくさいと思っているExcel加工に使えるなと思いました。
↓↓↓受講したUdemy講座に関して書いたnote記事

https://note.com/nishimoto_rie3/n/n86e4a74fe504

また別日にChatGPTについて学び、細かくChatGPTに指示すれば必要なコードを一瞬で書いてくれることを知りました。

そこで今回はChatGPTにExcel加工のVBAコードを書いてもらうことにしたいと思います:relaxed:

# さっそくChatGPTにコードを書いてもらう！
今回加工するのは、自社の経費データリストです。
なぜ今回このExcelを選んだかというと、今のところ一番加工する回数が多いからです！
年に28回…しかもめちゃくちゃ単純な加工…手始めにもってこいです！

普段このExcelでは、不要な行や列を削除した上で、VLOOKUP関数を入力する作業を行っています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3583099/35b88f43-9ebf-91ce-6bc2-66115807422a.png)

さっそくChatGPTにExcel加工のVBAコードを聞いてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3583099/4c26c485-d50f-9d3c-d2f0-472fdbd16c44.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3583099/d28d6bd4-3ab0-1d79-5ebb-b6cc6166b8cd.png)
これはすぐにできちゃうパターンかと思いながら、書いてもらったコードをコピペして実行したところ…**まさかの全消し！**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3583099/69e00b32-e13d-5919-1a9b-95dcbf334e15.png)
おっと、これは一筋縄ではいかない様子です:scream:

# ChatGPTとのやりとり

### ①不要行・不要列の削除

全部消えたとChatGPTに伝えコードを修正してもらいましたが、結果は同じ…
うーん、実行後のシートを見る限り、A列とB列はちゃんと消えているから多分『G列のセルの中身が「集計」となっている行も行ごと削除する』という部分の指示がよくなかったと推測し、ChatGPTに再度指示を出しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3583099/ab2eade5-0a93-ef63-d095-409970e86208.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3583099/c60c7a40-8328-a5b5-6a45-74bebe5aa090.png)
再度書いてもらったコードをコピペして実行したところ、ちゃんと指示したところだけ消えている！…と思ったらS列だけ消えていません。
2度S列が削除されていませんとChatGPTに伝えコードを修正してもらいましたが、またしても結果は同じ…
絶対何か私の指示にダメなところがあるはずとコードを見てたところ、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3583099/01c2a3ec-e2ab-1d55-0a44-69bb9ac8c8d3.png)
もしやA列、B列削除のあとにS列削除があるから、その時点でS列ではなくなっているから消えないのかも！と思い、ChatGPTに再度指示を出しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3583099/90a9d556-97d2-77c3-c5b1-f1977b0eefef.png)
2列分マイナスした列を指定しました。
ただ、なぜか違うところ（「集計」となっている行の削除は元々G列を指定）も書き換えてきたので再度修正指示。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3583099/eeb4af73-2511-e380-487f-b1d7e43d2606.png)
そしたら次は1つ前に指示したS列→Q列への修正をしれっと元に戻してきました。
完全にいたちごっこ…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3583099/cdf837a5-7d98-edcd-5e8b-31ef7a294bcc.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3583099/5c84e2d2-724b-f99c-923c-d556c800e3d3.png)
これでようやく不要行、不要列の削除ができました:grin:

### ②VLOOKUP関数の追加

次にシートのD列（管理区分名称）を検索値として、「営業科目」という別シートからQ列に科目を表示させるVLOOKUP関数を追加したいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3583099/22cf0bff-1e50-cff8-18fd-075fa0c23460.png)
書いてもらったコードをコピペして実行したところ、なぜか途中でファイルを指定する画面になってしまいました…どうやら「営業科目」が同じファイル内の別シートということが伝わっていないようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3583099/fa8c79ac-0db0-fdff-3b20-fd028d37ea02.png)
うまく伝わり、無事VLOOKUP関数が追加されました:laughing:

# 最終的なExcel VBAのコード
```ruby:
Sub 削除コードとVLOOKUP()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long

    ' 対象のシートを指定
    Set ws = ThisWorkbook.Sheets("Sheet1")  ' "Sheet1" を自分のシートの名前に変更してください

    ' 最終行を取得
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    ' G列が「集計」の行を削除
    For i = lastRow To 1 Step -1
        If ws.Cells(i, 7).Value = "集計" Then
            ws.Rows(i).Delete
        End If
    Next i

    ' 1～8行目、A列、B列、Q列の削除
    ws.Rows("1:8").Delete
    ws.Columns("A:B").Delete
    ws.Columns("Q:Q").Delete

    ' Q列1行目に"科目"を入力
    ws.Range("Q1").Value = "科目"

    ' VLOOKUPの公式をQ列2行目以降に追加
    lastRow = ws.Cells(ws.Rows.Count, "D").End(xlUp).Row

    For i = 2 To lastRow
        ws.Cells(i, 17).Formula = "=VLOOKUP(D" & i & ",営業科目!B:C,2,FALSE)"
    Next i

End Sub
```

# 今回できなかったこと
せっかくなので他のExcelの加工も挑戦してみようと思い、毎月加工している固定資産明細表もやってみることにしました。
Excelのセルの中の無数の余計なスペースが入っており、いつもテキストエディタにコピペし、正規表現を使用してスペースの置換をしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3583099/936a2aca-b73d-7045-120e-bdde3d20ab2a.png)
これをChatGPTにコードを書いてもらってExcel上でできるようにならないかと思ったのですが、うまくいかず…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3583099/18cbe01b-8ff3-0d0a-4e59-8557357d1d0b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3583099/e8336dac-e399-f628-1bcf-6a0980410b70.png)

そもそも元々の作業自体引き継いだ手順書通りやっているだけで、正直正規表現の意味もよく理解できていません。
それではChatGPTにうまく伝えられるはずありませんね…
これに関しては、今後の課題にしたいと思います！

# 最後に！
今回のExcel加工、自身の手作業でかかる時間を測定すると約2分。
年間28回作業が発生するので、年間の作業時間の削減は2分×28回=56分…:sweat_smile:
微々たる削減ですが、積み重ねだと思って今後も他にもできるものがないか考えたいなと思います！

今回すぐできちゃうかなと思いましたが、意外とChatGPTとのやりとりに苦戦…
人だとなんとなく理解してくれそうなことも、ChatGPT相手だとより細かく正確に伝える必要があるなと改めて思いました。

でも、Excel VBAのコードの知識がほぼ皆無な私でも、ChatGPTに聞くことでサクッとワンクリックでExcel加工できるようになる…これって本当にすごいですね！
ある程度Excel VBAがわかるようになったら、ざっくりChatGPTにコードを書いてもらって、細かいところは自分で修正とか応用も利きそうです！

今後も便利に使っていきたいと思います:smile: