今回は、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を業務改善やスキルアップにつなげて、是非とも皆さんの生活をイキイキとしたものにしてください!
コメント