ChatGPTでVBAを作成!-エクセルからOutlookの一斉送信をするコードを作成-

ChatGPT

今回はChatGPTを使用してVBAコードを作成し、エクセルからOutlookの一斉送信をする方法を紹介します。

ChatGPTを仕事で使いたいけど、どう使えばいいかわからないという方は、多いのではないかと思います。アイデアを出すような使い方もありますが、個人的にはこういったコードを書く作業をお願いするのが一番効率が上がる方法ではないかと思っています。

今回は、異動のあいさつや一斉送信などでも使える、エクセルリストからメールを作成するVBAを、ChatGPTに作成してもらいながら、質問の仕方や修正するポイントなどを紹介していきます。

※メールの取得はこちら

はじめに

まず簡単な説明ですが、ChatGPTは、こちらの質問に対して回答をしてくれる文章作成AIの一つです。一方、VBAは、Microsoft Office製品の中で使われるマクロ言語の一つであり、簡単なプログラムを作成することでOffice製品の操作を自動化できるものです。

この記事では、ChatGPTを使用してVBAコードを作成する方法を解説し、エクセルからOutlookの一斉送信を行うVBAコードを作成していきます。

VBAの基礎的な知識が必要ですが、初心者でも理解できるように説明するので、ぜひチャレンジしてみてください。

エクセルでのリスト作成

まずはエクセルで一斉送信を行う為のリストを作成します。

今回作成したのはこのようなリストです。

Outlookのメール送信画面に記入が必要な個所は、宛先・CC・件名・本文の大きく4つなので、それをエクセルで書いているといったイメージです。エクセルでまとめることで、エクセルのメールリストを張り付けるだけで一斉送信を行ったりできたり、他のVBAと組み合わせてメール自動の簡単なプログラムを組むことも可能となります。

VBAを使用するときに注意してほしいのが、リストの一番左の列に空欄を作らないセルの結合を使わない事の2点です。

リストに空欄があると、そのリストの一番下を取得したりするときに誤作動を起こす原因となります。特にChatGPTでVBAを作る時は、リストの長さを取得するときに一番左の列を使うことが多いです。そのため、一番左の列は、一番下の行迄空欄がないようなリストを作成するようにしてください。

このような空欄を左の列には作らないようにする。

また、セルの結合もセルの位置を指定するときに誤作動を起こす元になってしまいます。

この2点に気を付けて、必要事項が書かれているリストを作成していきます。

ChatGPTへの質問・コード生成

続いてChatGPTへVBAコードの作成を依頼します。

依頼するときは以下のフォーマットに沿って質問するとスムーズです。

エクセルで以下のリストを作成しました。○○を行うVBAを作成したいので、コード作成してください。(※ここにリストを張り付ける。)

この○○のところに何をしたいVBAかを書き、最後にエクセルのリストをコピーしてそのまま貼り付けして質問すればOKです。

今回の場合、このような形になりました。

今回は、Outlookでメールの自動送信を行うVBAを作成してほしかったので、○○の部分にその内容を記載しています。「宛先 CC 件名 本文…」の部分は、エクセルをそのまま張り付けた内容です。人間にはかなり読みにくいですが、ChatGPTは読み取ってくれます。

この質問の回答として返ってきた内容がこちらです。

このような形のコードと、

設定として必要な手順が表示されました。

続いては、今回ChatGPTが生成したVBAを見ながら、修正するポイントを見ていきます。

VBAの修正

まず、今回作成されたコードは以下の通りです。

Sub SendEmail()
    Dim olApp As Outlook.Application
    Dim olMail As Outlook.MailItem
    Dim ws As Worksheet
    Dim lRow As Long
    Dim strto As String, strcc As String, strbcc As String
    Dim strsub As String, strbody As String

    'Outlookのアプリケーションを起動
    Set olApp = New Outlook.Application

    'メール送信リストが記載されたシートを設定
    Set ws = ThisWorkbook.Sheets("Sheet1")

    '最終行を取得
    lRow = ws.Cells(Rows.Count, 1).End(xlUp).Row

    '1行ずつデータを取得し、メールを送信
    For i = 2 To lRow
        '宛先
        strto = ws.Cells(i, 1).Value
        'CC
        strcc = ws.Cells(i, 2).Value
        '件名
        strsub = ws.Cells(i, 3).Value
        '本文
        strbody = ws.Cells(i, 4).Value

        'メールを作成
        Set olMail = olApp.CreateItem(olMailItem)

        '送信先、CC、件名、本文を設定
        With olMail
            .To = strto
            .CC = strcc
            .Subject = strsub
            .Body = strbody
            .Display 'メールを表示
            '.Send '自動で送信する場合はコメントアウトを外す
        End With

        'オブジェクトを解放
        Set olMail = Nothing
    Next i

    'Outlookのアプリケーションを終了
    olApp.Quit

    'オブジェクトを解放
    Set olApp = Nothing

End Sub

こうして生成されたコードですが、とにかく日本語の部分だけを読んでください。VBAのコードの中で「’」の後の文字は、コードに直接関係のないコメントという意味になります。ChatGPTで作られたコードは、コメントにコードの意味が細かく書いてあるため、コメントを読むだけでこのコードが何を表しているのかを知ることができます

コメントをもとに、おかしなコードがないかを確認していくのですが、今回はほぼそのままで使用できるコードとなっていました。ただこのコードでも以下の点を確認・修正する必要があります。

※一行ずつ詳細はこちら

①『Sub SendEmail()』を好きな名前に変更(任意)

まず1行目の『Sub SendEmail()』という部分が、このVBAのタイトルを表します。これを好きな名前に変更しておいた方が分かりやすいです。

『Sub SendEmail()』
→『Sub メールマクロ()』など好きなタイトルに変更する

※この場合は「メールマクロ」というタイトルになっています。

『Sub タイトル()』という形でタイトル名が決まっているので、このSub と()の間の部分を消して、自分の好きなタイトルを入れれば、タイトルが変更できます。

②シート名を変える(必須)

今回、このメールリストがあるシート名に変更する必要があります。変更する箇所は、11行目のSet ws = ThisWorkbook.Sheets(“Sheet1”)のSheet1の部分です。この部分を、メールのリストがあるシート名に変更します。

今回私は「メールリスト」という名前のシートにこのリストを作成したので以下のように変更します。

Set ws = ThisWorkbook.Sheets(“Sheet1”)
→Set ws = ThisWorkbook.Sheets(“メールリスト”)

目印は「’メール送信リストが記載されたシートを設定」という文字の下というところです。『シートを設定』というのはChatGPTのほかのコードを作成するときもよく出てくるので、あれば自分のシートの名前に変更してください。

皆さんのシートの名前に合わせてこの部分は変更が必要な個所となります。

③最終行の取得(確認事項)

VBAにおいて「’」の後の文字は、コードに直接関係のないコメントという意味になります。そのコメントの中に「最終行の取得」や「最終列の取得」といった言葉には注意が必要です。

最終列の取得では、リストの端がどこかを探すといった処理が行われています。このコードがないと、リストの長さが少しでも変わると誤作動を起こすようになってしまいます。

先ほどリストの作成の時に注意点としてあげた、左に空欄が無いようにすることを守っていれば、「最終列の取得」という項目さえあれば、おおむね誤作動することはないと思います。

④自動で送信するかどうかを設定する

‘.Send ‘自動で送信する場合はコメントアウトを外す」という文言がありますが、今の状態ではOutlookにリスト内容のメールを作って、送信する手前の状態で停止するようになっています。ですので、手作業で一点ずつ送信ボタンだけは押す必要があります。

ただこの一番右にある「’」をバックスペースで消すと、送信まで自動で行ってくれるようになります。送信のクリックはそれほど手間でもないので、基本的には手作業で送信ボタンを押すことをお勧めしますが、自動化を行うことも可能です。

環境設定

続いて、環境設定についての部分をみていきます。

このコードを使用する場合は、Outlookがインストールされ、動作している必要があります。

また、OutlookからVBAにアクセスするための設定が必要な場合があります。以下の手順で設定を行ってください。

1.Outlookを開き、[ファイル]タブをクリックします。
2.[オプション]をクリックし、[セキュリティセンター]を選択します。
3.[セキュリティセンターの設定]をクリックします。
4.[マクロの設定]タブをクリックします。
5.[すべてのマクロを有効にする]を選択し、[OK]をクリックします。

これで、VBAからOutlookを操作することができるようになります。

結論を先に言うと、この設定は基本的に行う必要がありません。

この設定はOutlookのセキュリティを解除するものとなっており、VBAがエラーになった場合に検討すればいいレベルの内容です。

ChatGPTでは、質問に対して回答をするために実際には不要な手順を説明することもあるため、こういった内容には注意が必要です。

不要な手順かどうかを見極める基準は、Windowsの場合「推奨しません」と書いてある内容は、エクセルの保存をした状態で、設定しないまま一度コードを実行してしまえばいいと思います。トライ&エラーを気にせずできることが個人でVBAを書く強みでもあるので、保存だけ忘れないようにして、一度実行をすればいいと思います。

VBAの記入・実行

VBAの記入については、標準モジュールを新しく作って記入をしてください。

そして今回のコードを実行してみると…

エラーが出ました。エラー内容は「ユーザー定義型は定義されていません」という内容です。

とりあえずOKを押して、表示を消すと名前に→がしてあり網掛けになっていて、その下が選択されたようになっていると思います。この選択されたように見えるところが、エラーが起きている個所となります。

今はVBAが実行中に一時停止している状態なので、上にある□の停止マークを押して一度マクロを止めて、エラーについてChatGPTに聞いていきます。

先ほどの、エラー表示・エラーの箇所をChatGPTに聞いていきます。

このコードを実行すると、「 Dim olApp As Outlook.Application」の部分で、「ユーザー定義型が定義されていません」というエラーが出ます。どうすればいいですか?

これに対して、以下のような回答が返ってきました。

「ユーザー定義型が定義されていません」というエラーが出る場合、通常は必要な参照設定が追加されていないことが原因です。Outlookを自動化するためには、Microsoft Outlook 16.0 Object Libraryの参照設定を追加する必要があります。手順は以下の通りです。

1.エクセルを開き、[開発]タブを選択します。
2.[参照設定]をクリックします。
3.[参照設定]ダイアログボックスで、[参照]ボタンをクリックします。
4.[COM オブジェクト]タブをクリックし、[Microsoft Outlook 16.0 Object Library]を選択します。
5.[OK]ボタンをクリックして、ダイアログボックスを閉じます。

参照設定が追加されたら、再度コードを実行してみてください。

環境設定が必要なようなので、参照設定から設定を変更していきます。ここでは[開発]タブから[参照設定]を選択とありますが、そこには参照設定は無いので、VBAの編集画面から設定を行います。

参照設定の下の方に、Microsoft Outlook 16.0 Object Libraryがあるので、チェックを入れOKボタンを押します。

この設定を行ったうえで、再度VBAを実行すると

このような形で、メールを自動作成することができます。

まとめ

今回はChatGPTに教えてもらったことだけを使って、VBAを作成する方法をトラブルシューティングを含めて紹介しました。

簡単なVBAであれば、修正もほぼ不要でChatGPTで自動作成することができますので、ChatGPTへの質問方法や、確認箇所のポイントを押さえて、皆さんもそれぞれの業務を効率化していってください!

※このコードの詳細解説

※メールの取得

コメント

タイトルとURLをコピーしました