質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

Q&A

解決済

1回答

7647閲覧

Outlookのメールを日付で絞り込んでExcelシートに書き込みたい

antiwebhook

総合スコア7

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

0グッド

0クリップ

投稿2021/11/22 07:48

編集2021/11/24 01:14

前提・実現したいこと

ExcelVBAを用いて、本日受信したOutlookのメールの受信日時、件名を取得し、シートに書き込みたいです。
(本文や添付ファイルは必要ないです)
色々と調べていくうちにOutlookのメールを取得するサンプルを見つけ、試したところ日付と件名の取得はうまくいきました。
しかし今のところフォルダ内の全件のメールを取得してしまっているため、どうにか日付で条件を付けてメールを取得したいです。

元々はGASでGmailとデータベースの情報をスプレッドシートに出力する機能を作成したかったのですが、業務で使用しているデータベースの性質上GASでは接続がほぼ不可能らしく、慣れないVBAとOutlookを使い代用するしかありませんでした。(VBAではデータベース接続が可能でした)

VBAに関する知見はほとんどないため、どこにどのような絞り込みを行えばよいかわかりません。不勉強なのは承知の上ですが、お力添えいただけないでしょうか。

該当のソースコード

Sub GetMail() Dim objOutlook As Outlook.Application Dim myNameSpace As Outlook.Namespace Dim myInbox, mySubfolder Dim today As Date Dim targetReceivedDate As String today = Date targetReceivedDate = today MsgBox targetReceivedDate Set objOutlook = New Outlook.Application Set myNameSpace = objOutlook.GetNamespace("MAPI") Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox) Set mySubfolder = myInbox.Folders.Item("フォルダ名") Dim i As Long For i = 1 To mySubfolder.Items.Count With ThisWorkbook.Worksheets("Sheet1") .Cells(i + 1, 1).Value = mySubfolder.Items(i).SentOn .Cells(i + 1, 2).Value = mySubfolder.Items(i).Subject End With Next i End Sub

試したこと

参考になりそうなサイトを見てみた。

https://fastclassinfo.com/entry/vba_outlook_receivedmail_analysis/

https://qiita.com/t-yama-3/items/37545fa9a00c140fb657

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12213156327
→日付絞り込み前のコードを真似してみたがループ終了時に「1004 アプリケーション定義またはオブジェクト定義のエラーです。」が出る。

日付絞り込みのコードをどこにいれればよいか全く見当つかず…

補足情報(FW/ツールのバージョンなど)

Excelのバージョン:
Microsoft® Excel® for Microsoft 365 MSO (バージョン 2110 ビルド 16.0.14527.20270) 64 ビット

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bebebe_

2021/11/24 02:53 編集

Yahoo知恵袋の方のように Dim InboxFolder, subfolder, i, n, k As Long と宣言するとkにしかLongの宣言がかかっていません Dim InboxFolder As Long, subfolder As Long, i As Long, n As Long, k As Long のようにすべての箇所を宣言してもエラーになりますか?
antiwebhook

2021/12/01 04:31

返信おそくなり申し訳ありません。 宣言をすべて行った結果エラーが解消されました! (まとめて宣言はできないのですね…不勉強でした。)
guest

回答1

0

ベストアンサー

VBA

1 2For i = 1 To mySubfolder.Items.Count 3 4 If DateValue(mySubfolder.Items(i).SentOn) == today then '受信日時ならSentOnでなくReceivedTime 5 6 With ThisWorkbook.Worksheets("Sheet1") 7 .Cells(i + 1, 1).Value = mySubfolder.Items(i).SentOn 8 .Cells(i + 1, 2).Value = mySubfolder.Items(i).Subject 9 End With 10 11 end if 12 13Next i

などでしょうか?
セルの指定にiを使うと場合によっては空白の行が生まれる気がします。

投稿2021/11/24 05:13

bebebe_

総合スコア504

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

antiwebhook

2021/12/01 04:58

= todayでよかったのですね。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問