目次
はじめに ~住所録の自動転記プログラムを作ってみよう~
「ChatGPTって面白いけど、結局チャットで質問するだけのツールでしょ?」
そう思っていませんか?
実は、ChatGPTの真価は単なる会話ツールとしてではなく、プログラミングのパートナーとして発揮されます。特に、業務効率化のためのプログラム作成において、ChatGPTは以下のような強力なサポートを提供してくれます:
- プログラムコードの生成
- エラーの原因特定と修正方法の提案
- コードの改良アイデアの提示
- 実装手順の詳細な解説
今回は、そんなChatGPTの実力を体験できる具体例として、エクセルVBAによる住所録データの自動転記プログラムを作っていきます。プログラミング未経験でも、ChatGPTと一緒なら、業務改善のためのツール作りが驚くほど簡単にできるんです。
今回のゴール:
- 住所録の情報を印刷用シートに自動転記するプログラムを作成する
- ChatGPTを使ったVBAプログラムの作り方を学ぶ
- ChatGPTとの効果的なやり取りを通じて、プログラムを改良する方法を習得する
やりたいことを整理する
まずは作業用のエクセルシートを用意します。2つのシートを用意します。
一つ目は「会員情報」シートです。

2行目に会員番号、氏名、郵便番号、住所の項目名を作り、3行目以降にデータを入れています。(本記事ではダミーデータを使用しています。) A1セルには、どの会員番号の情報を転記するか指定できるように、転記する番号を入力することにしました。
「封筒印刷」シートは下記のようにしました。

なお、実際のエクセルシートはここからダウンロードできます。
今回の目標は、
「会員情報」シートから、好きな「会員番号」を選択し、その情報を「封筒印刷」で指定したフォーマットで転記する。
とします。いちいち手でコピペするのではなく、1クリックでコピーできるようにしましょう!
ChatGPTにお願いする
ではChatGPTと一緒にプログラムを作っていきましょう。まず最初はこんな感じで聞いてみました。
(なお、ChatGPTとの会話は、実行するたびに変化するので皆さんが試すときも全く同じ会話になるとは限りません。以下の会話はあくまで一例を示したものとしてご理解ください。)
excelのVBAプログラムを作成してください。
やりたいこと
– 「会員情報」シートの情報を「封筒印刷」シートにコピーしてください。
すると下記のような回答が返ってきました。

さすがにお願いがざっくりしすぎていて、伝わらなかったようです。どこを教えてほしいのかリクエストを出してくれました。ではこのリクエストに従って回答しましょう。
下記のプロンプトを入力してみます。ポイントは具体的な行番号(1,2,3…)や列番号(A,B,C…)、セル(マス目)の番地(A1, C3, D2)などを指定して、ChatGPTに理解しやすいようにすることです。
1)会員情報シート
A列:会員番号
B列:氏名
C列:郵便番号
D列:住所
3行目から実際の会員情報が入っています。会員番号は1からスタートします。
2)封筒印刷シート
それぞれ下記のセルにコピーしてください。
会員番号:C6セル
氏名:C7セル
郵便番号:C2セル
住所:C3セル
3)コピーの方法
「会員情報」シートのA1セルに、転記してほしい会員の「会員番号」が入力されています。
A1セルと一致する会員一人の情報をコピーしてください。
すると早速コードを生成してくれました。

生成してくれたプログラム
Sub 会員情報転記()
Dim ws会員情報 As Worksheet
Dim ws封筒印刷 As Worksheet
Dim 会員番号 As String
Dim 行数 As Long
Dim 見つけた As Boolean
' シートの設定
Set ws会員情報 = ThisWorkbook.Sheets("会員情報")
Set ws封筒印刷 = ThisWorkbook.Sheets("封筒印刷")
' A1セルの会員番号を取得
会員番号 = ws会員情報.Range("A1").Value
' A1セルに入力がない場合はメッセージを表示
If 会員番号 = "" Then
MsgBox "A1セルに会員番号を入力してください。"
Exit Sub
End If
' 初期設定
見つけた = False
' 3行目から検索開始(会員番号が1から連番で入力されている想定)
For 行数 = 3 To ws会員情報.Cells(ws会員情報.Rows.Count, 1).End(xlUp).Row
If ws会員情報.Cells(行数, 1).Value = 会員番号 Then
' 一致した場合、封筒印刷シートに転記
ws封筒印刷.Range("C6").Value = ws会員情報.Cells(行数, 1).Value ' 会員番号
ws封筒印刷.Range("C7").Value = ws会員情報.Cells(行数, 2).Value ' 氏名
ws封筒印刷.Range("C2").Value = ws会員情報.Cells(行数, 3).Value ' 郵便番号
ws封筒印刷.Range("C3").Value = ws会員情報.Cells(行数, 4).Value ' 住所
見つけた = True
Exit For
End If
Next 行数
' 会員番号が見つからなかった場合のメッセージ
If Not 見つけた Then
MsgBox "指定された会員番号が見つかりませんでした。"
Else
MsgBox "情報を封筒印刷シートにコピーしました。"
End If
End Sub
さらに、このプログラムをどのようにexcelファイルに組み込んで実行すれば良いかも教えてくれました。

筆者の環境はMac OSなのでWindowsをご使用の方はまた違いますが、参考までにVBAの転記方法を紹介します。
まず、メニューの「ツール」から「マクロ」ー「Visual Basic Editor」に進みます。

このような画面が立ち上がります。

次に「挿入」ー「標準モジュール」を選択します。

Module 1という画面が新しく表示されます。

表示されたウィンドウにChatGPTが生成してくれたプログラムをコピーして貼り付けます。

コピペが完了したら一旦、画面左上の×印でVBAのエディター画面を終了します。

プログラムを実行してみる
メニューのツールから、「マクロ」を選択します。

「会員情報転記」を選んで実行します。

ちなみに、「会員情報」シートのA1セルには「1」が入力されているので、「佐藤太郎」さんの情報が転記されるはずです。実行すると下記のポップアップウィンドウが表示されました。

「封筒印刷」シートを確認すると、きちんと転記されていました。

試しにA1セルの数字を「7」に変えて実行してみましょう。中村さんの情報がコピーされるはずです。

狙い通り、中村さんの情報がコピーされていますね。

このように、プログラミングを一切行わなくても、ChatGPTと会話するだけでVBAのプログラムを作ることができました!
プログラムを修正する
実際にプログラムを動かしてみると、さらに変更したい箇所が出てくるものです。そんな時は追加でお願いをして修正してもらいましょう。
会員番号を修正する
封筒の会員番号の欄は数字が入っているだけで、どういう意味の番号かわかりません。「会員番号7」のように表示されるよう、リクエストして修正してもらいます。どういう動作をさせたいかわかりやすいように「例」をつけてあげるとより良いです。
正常に動作しました。
お願いなのですが、会員番号を「封筒印刷」に転記するとき
“会員番号”+「転記した会員番号」で転記するようにお願いします。
例:会員番号が「3」のとき、転記先のセルに「会員番号3」と転記する。
修正案を提案してくれます。先ほどコピペしたプログラムを丸ごと置き換えて実行してみましょう。

修正後のプログラムは下記のとおりです。
Sub 会員情報転記()
Dim ws会員情報 As Worksheet
Dim ws封筒印刷 As Worksheet
Dim 会員番号 As String
Dim 行数 As Long
Dim 見つけた As Boolean
' シートの設定
Set ws会員情報 = ThisWorkbook.Sheets("会員情報")
Set ws封筒印刷 = ThisWorkbook.Sheets("封筒印刷")
' A1セルの会員番号を取得
会員番号 = ws会員情報.Range("A1").Value
' A1セルに入力がない場合はメッセージを表示
If 会員番号 = "" Then
MsgBox "A1セルに会員番号を入力してください。"
Exit Sub
End If
' 初期設定
見つけた = False
' 3行目から検索開始(会員番号が1から連番で入力されている想定)
For 行数 = 3 To ws会員情報.Cells(ws会員情報.Rows.Count, 1).End(xlUp).Row
If ws会員情報.Cells(行数, 1).Value = 会員番号 Then
' 一致した場合、封筒印刷シートに転記
ws封筒印刷.Range("C6").Value = "会員番号" & ws会員情報.Cells(行数, 1).Value ' 会員番号(「会員番号3」の形式で転記)
ws封筒印刷.Range("C7").Value = ws会員情報.Cells(行数, 2).Value ' 氏名
ws封筒印刷.Range("C2").Value = ws会員情報.Cells(行数, 3).Value ' 郵便番号
ws封筒印刷.Range("C3").Value = ws会員情報.Cells(行数, 4).Value ' 住所
見つけた = True
Exit For
End If
Next 行数
' 会員番号が見つからなかった場合のメッセージ
If Not 見つけた Then
MsgBox "指定された会員番号が見つかりませんでした。"
Else
MsgBox "情報を封筒印刷シートにコピーしました。"
End If
End Sub
実行してみると正しく動作していることがわかります。

ボタンを追加する
プログラムの動作はできたのですが、実行するのにメニューから「マクロ」を選択するのが面倒ですね。楽にできる方法が無いか聞いてみます。
OKです。マクロを簡単に実行できるようにしたいですが、どのような方法がありますか?
すると、どういう方法があるか教えてくれます。

おすすめの方法の「ボタンを設置する」を試してみるとこのようになります。

ボタンを追加して、ここを押すだけでプログラムが実行できるようになりました。便利でわかりやすい仕組みになりました!
最終的なExcelファイルは以下からダウンロード可能です。
エラーの対応をする
ちなみに、今回はエラーが発生せずにそのまま動作しましたが、場合によってはエラーが起きたり想定通りの動作をしない時も起こります。そのような場合は「どういうエラーが出ているか」をChatGPTに教えて解決策を提案してもらいましょう。
まとめ
- ChatGPTを活用することで、プログラミング初心者でもVBAによる業務改善が可能
- 基本的な機能を作った後、段階的に改良を加えていく手法が効果的
- MacでもWindowsでも動作する汎用的なコードの作成が可能
ぜひ、この記事を参考に、あなたも業務改善にチャレンジしてみてください!