【ChatGPTでマクロ編集】OutlookメールをExcelに取り込む!初心者向けに機能追加の方法を解説

ChatGPT

今回は、OutlookメールをExcelに取り込むVBAの続編となります。さらなる効率化を図るため、ChatGPTを活用した機能追加の方法を解説します。

ChatGPTで作ったVBAを修正していくことで、自動化の幅が広がり、使いやすく便利な形にしていくことができます。

OutlookメールをExcelに取り込むことをターゲットとして紹介していますが、他のVBAでも共通して使える内容となっています。

このやり方を応用して、それぞれに作ったVBAを修正し、より効率的なVBAを作ってみてください!

はじめに

今回は以前作成した、OutlookメールをExcelに取り込むためのマクロに機能追加を行います。

以前のVBAでは、受信フォルダのメールをすべて読み込むコードで、かなり動作が遅くなっていました。さらに、受信日などの情報が取得できておらず、使い勝手も悪い状態です。

そこで、動作を早く・使い勝手がいいコードに修正していきます。

特に、初心者の方にもわかりやすいように解説していますので、自身のマクロ作成の参考にしていただければと思います。

OutlookメールをExcelに取り込むための基本的なマクロの作成方法

今回は以前作成したVBAが基本として解説を行います。

もしまだ前回の記事をご覧いただいていない場合は、以下のリンクからご確認ください。

ChatGPTを組み込んだOutlookからExcelへのデータ転記マクロの作成手順

①:追加する機能を明確化する

今のコードにどこが不満で、どんな機能が欲しいかという情報は、しっかり言葉にしておく必要があります。当たり前のようですが、修正の機能がしっかり決まっておらず、思ったように動作しない問題は、意外と起こります。

今回の場合、「使い勝手が悪い」「動作が遅い」という課題があるため、機能として以下を追加していきます。

1.取得するデータに日付を追加する

2.取得するデータの期間指定ができるようにする

3.動作を早くする

これらの機能をChatGPTに質問しながら追加していきます。

②-1:【機能追加】取得するデータに日付を追加する

質問としては「さっきのコードに、○○の機能を追加してください」という単純なものでOKです。

具体的な質問と回答の流れはこのような形です。

私:「OutlookのメールをExcelに取り込むデータとして、日付を追加してください。」

【回答】

基本的には、「コード全体」の部分をコピペするだけです。ただ一番下の行に「End Sub」と書いているかどうかは、必ず確認してください。

End Sub」で「このVBAはここまで」という意味になります。ChatGPTは回答が途切れることがあるので、確認が必要です。

途切れていたので、もう一度作成してもらいます。

途中で切れているコードは、「もう一度出力してください」という形で質問を行うと、そのままコピペできる形で出力してくれます。

次にコードの確認ですが、前回同様日本語で書かれた部分だけを見ていけば、とりあえずOKです。

日本語で書かれている部分を読んでいって、修正されていそうかを確認してみます。

この部分で「日付」と入っています。

厳密に言うと、日付の取得をしている部分ではないのですが、ChatGPTに日付を追加するということが伝わっていそうということはわかったので、一旦OKとして進めていきます。

②-2:【機能追加】取得するデータの期間指定ができるようにする

先ほどと同様、シンプルに質問を行っていきます。

具体的な質問と回答の流れはこのような形です。

私:「OutlookのメールをExcelに取り込むデータの、期間指定ができるようにコードを修正してください。

【回答】

今回も「End Sub」が書かれていなかったので、再度出力を依頼しました。ただコードが長くなっている為、全文表示ができません。

その場合は「続き」と入力すると、先ほどのVBAを続きから出力してくれます。

最初の回答を貼り付けた後、その下に追加されたコードを貼り付けましょう。

コードの確認は、「期間指定のためのダイアログボックスを表示」と書いてあるので、このまま進めていきます。

②-3:【機能追加】動作を早くする

動作の高速化の為、まず行ってほしいのが「画面を止める」ことです。

通常、VBAの実行中はExcelの画面が動き続けていますが、この動きを停止させることで処理速度が大幅に向上します。

【やり方】

Dim ○○…と書いてある部分の下に、「Application.ScreenUpdating = False」を追加する

End Sub の上に、「Application.ScreenUpdating = True」を追加

必ず上は「=False」、下は「=True」になるようにしてください。

この2つの文章を張り付けるだけで、かなり動作は軽くなります。

②-4:【機能追加】動作を早くする(応用)

今回のコードでは、受信日が指定期間かどうかをすべてのメールで確認し、エクセルに書き込むという動作をしています。その為、画面を停止させてもかなり動作としては重くなります。

そこでVBAを編集して、動作を軽くしていきます。ここからの内容は、ChatGPTでは作成できないので、自分でコードを書いていきます。

内容は、メールが受信日時で新しい順に並んでいるので、指定期間のメール出てきた時点で、期間外になったら取り込みをやめる、というコードに変更しています。

ChatGPTではVBAの作成には一定のレベルまで対応できますが、使い勝手の微調整などの部分では、VBAの知識が必要となります。

コピペで使用できるコードを利用しながら、少しずつVBAに慣れていく過程で基本や作り方を学ぶことをおすすめします。

③:実際のコードと実行結果

前回の内容と、②の内容を踏まえて作成したコードが以下となります。

Sub ImportOutlookEmails()
    Dim OutlookApp As Outlook.Application
    Dim OutlookNamespace As Outlook.Namespace
    Dim OutlookFolder As Outlook.MAPIFolder
    Dim OutlookItems As Outlook.Items
    Dim OutlookMail As Outlook.MailItem
    Dim xlApp As Excel.Application
    Dim xlWorkbook As Excel.Workbook
    Dim xlWorksheet As Excel.Worksheet
    Dim iRow As Integer
    Dim startDate As Date
    Dim endDate As Date
    
    Application.ScreenUpdating = False
    
    ' 期間指定のためのダイアログボックスを表示
    startDate = InputBox("取り込むメールの開始日を入力してください(yyyy/mm/dd形式)")
    endDate = InputBox("取り込むメールの終了日を入力してください(yyyy/mm/dd形式)")
    
    ' Outlookのインスタンスを作成
    Set OutlookApp = New Outlook.Application
    Set OutlookNamespace = OutlookApp.GetNamespace("MAPI")
    
    ' 取り込むOutlookのメールフォルダを指定(例: 受信トレイ)
    Set OutlookFolder = OutlookNamespace.GetDefaultFolder(olFolderInbox)
    
    ' Excelのインスタンスを作成
    Set xlApp = New Excel.Application
    xlApp.Visible = False ' Excelを表示する場合はTrueに設定
    
    ' 取り込むExcelファイルを指定(存在しない場合は新規作成)
    Set xlWorkbook = ThisWorkbook
    Set xlWorksheet = xlWorkbook.Sheets(1)
    
    ' Excelヘッダー行を設定
    xlWorksheet.Cells(1, 1).Value = "送信者"
    xlWorksheet.Cells(1, 2).Value = "件名"
    xlWorksheet.Cells(1, 3).Value = "本文"
    xlWorksheet.Cells(1, 4).Value = "日付"
    
    iRow = 2 ' データ行の開始行
    
    ' Outlookのメールをループして取得
    Set OutlookItems = OutlookFolder.Items
    OutlookItems.Sort "[ReceivedTime]", True ' 受信日時でソート(新しい順)
    Count = 0
    For Each OutlookMail In OutlookItems
        ' メールの受信日時が指定された期間内である場合のみ取り込む
        If OutlookMail.ReceivedTime >= startDate And OutlookMail.ReceivedTime <= endDate Then
            ' メールを取得し、必要な情報をExcelに書き込む
            xlWorksheet.Cells(iRow, 1).Value = OutlookMail.SenderEmailAddress
            xlWorksheet.Cells(iRow, 2).Value = OutlookMail.Subject
            xlWorksheet.Cells(iRow, 3).Value = OutlookMail.Body
            xlWorksheet.Cells(iRow, 4).Value = Format(OutlookMail.ReceivedTime, "yyyy/mm/dd")
            
            iRow = iRow + 1 ' 次の行に移動
            Count = 1
        ElseIf OutlookMail.ReceivedTime <= startDate Or OutlookMail.ReceivedTime >= endDate And Count = 1 Then
            ' 一度期間内に入った後、期間から外れればループから出る
            Exit For
        End If
        
    Next OutlookMail

    ' Excelファイルを保存(任意のパスとファイル名を指定)
    xlWorkbook.SaveAs "フォルダアドレス\エクセル名.xlsm"
    
    ' メッセージボックスで処理が完了したことを表示
    MsgBox "OutlookのメールをExcelに取り込みました。"
    
    ' オブジェクトを解放
    Set xlWorksheet = Nothing
    Set xlWorkbook = Nothing
    xlApp.Quit
    Set xlApp = Nothing
    Set OutlookItems = Nothing
    Set OutlookFolder = Nothing
    Set OutlookNamespace = Nothing
    Set OutlookApp = Nothing

    Application.ScreenUpdating = True

End Sub

これを実行すると、期間指定のダイアログボックスに期間を打ち込むと、その期間のメールがエクセルに出力されるようになります。

ダイアログボックス画面

さいごに

Outlookの取り込みVBAを使って、ChatGPTを活用した機能追加の方法を解説しました。

ただ、ChatGPTを使ったVBAの作成・編集については、より細かな部分の使い勝手や機能を求めるには、限界があります。

最初はコピペできるいくつかのVBAコードを使用し、コードの大まかな構造を理解することから始めることをおすすめします。その後、コードの書き方や読み方を学び、自身でVBAの作成や編集に取り組んでみてください。

VBAを業務改善やスキルアップにつなげて、是非とも皆さんの生活をイキイキとしたものにしてください!

コメント

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