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

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

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

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

Q&A

解決済

1回答

564閲覧

Outlookのサブフォルダーの日付を指定してExcelシートに出力

kasirida

総合スコア1

Outlook

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

0グッド

0クリップ

投稿2023/01/18 03:43

outlookのサブフォルダーの特定の日付をExcelシートに出力したいです

現在サブフォルダーのみでしたら取得ができています

ExcelVBA

1 2Set subFolder = objIndex.Folders(“サブフォルダー”) 3 4For i = 1 to subFolder.Items.Count 5If subFolder.Item.class = 43 Then 6Cells(i + 1,1).value =subFolder.Item(i).SenderName 7Cells(i + 1, 2).value =subFolder.Item(i).Subject 8Cells(i + 1, 3).value =subFolder.Item(i).ReceivedTim 9Cells(i + 1, 4).value =subFolder.Item(i).Body 10End if 11Next

これに何を
何を追加したら日付を指定して取得できしょうか
お願いします

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

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

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

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

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

sk.exe

2023/01/18 07:06

> outlookのサブフォルダーの特定の日付 > If subFolder.Item.class = 43 Then あるフォルダに格納されている「MailItem オブジェクトの」、ということまでは推定できますが、「特定の日付」というのが具体的に何に関する日付(日時)を意味しているのかが不明です。 例えば「受信トレイの任意のフォルダに格納されている全ての受信メールの受信日時を取得したい」といったことなのであれば、その旨を明記されることをお奨めします。 > Cells(i + 1, 3).value =subFolder.Item(i).ReceivedTim あとこのプロパティは「ReceivedTime」が正しい名前でしょう。 (末尾の e が抜けている)
kasirida

2023/01/18 08:25

回答ありがとうございます サブフォルダー内にある日付 全部取得したいわけではなく1/17日分だけ取得といった感じです 別日には1/18日分を取得できるようにできればいいなと思っております プロパティのeが抜けてる件 ご指摘ありがとうございます。
guest

回答1

0

ベストアンサー

全部取得したいわけではなく1/17日分だけ取得といった感じです
別日には1/18日分を取得できるようにできればいいなと思っております

「受信日時が昨日である(現在のシステム日付の前日の 0:00 から 23:59 までの範囲に含まれる)メールのみをリストアップしたい」ということなのであれば、例えば次のようなコードを実行なさればよろしいでしょう。

vba

1Sub OutputReceivedMailsFromOutlook() 2On Error GoTo Err_OutputReceivedMailsFromOutlook 3 4 Const olFolderInbox = 6 5 6 Dim olApp As Object 'Outlook.Application 7 Dim blCreateApp As Boolean 8 9 blCreateApp = False 10 On Error Resume Next 11 '実行中の Outlook アプリケーションの参照 12 Set olApp = GetObject(, "Outlook.Application") 13 '参照できなかった場合 14 If Err.Number <> 0 Then 15 Err.Clear 16 On Error GoTo Err_OutputReceivedMailsFromOutlook 17 'Outlook アプリケーションの新規インスタンスの生成 18 Set olApp = CreateObject("Outlook.Application") 19 'アプリケーション起動フラグを True に 20 blCreateApp = True 21 End If 22 On Error GoTo Err_OutputReceivedMailsFromOutlook 23 24 Dim olNamespace As Object 'Outlook.Namespace 25 Dim olInBoxFolder As Object 'Outlook.Folder 26 Dim olTargetFolder As Object 'Outlook.Folder 27 Dim olMailItems As Object 'Outlook.Items 28 29 '受信トレイの参照 30 Set olNamespace = olApp.GetNamespace("MAPI") 31 Set olInBoxFolder = olNamespace.GetDefaultFolder(olFolderInbox) 32 33 '受信トレイ内のフォルダの参照 34 Set olTargetFolder = olInBoxFolder.Folders("フォルダー名") 35 'フォルダ内のメールアイテムコレクションの参照 36 Set olMailItems = olTargetFolder.Items 37 38 Dim wbBook As Workbook 39 Dim wsSheet As Worksheet 40 Dim lngRow As Long 41 42 '新規ブックの作成 43 Set wbBook = Workbooks.Add 44 'その1つめのワークシートの参照 45 Set wsSheet = wbBook.Worksheets(1) 46 '出力先行番号を1から開始 47 lngRow = 1 48 49 'ワークシートの列見出しの設定 50 With wsSheet 51 .Cells(lngRow, 1).Value = "差出人の表示名" 52 .Cells(lngRow, 2).Value = "件名" 53 .Cells(lngRow, 3).Value = "受信日時" 54 .Cells(lngRow, 4).Value = "本文" 55 End With 56 57 Dim dtStartDate As Date 58 Dim dtEndDate As Date 59 Dim strStartDate As String 60 Dim strEndDate As String 61 Dim strFilter As String 62 Dim lngHitCount As Long 63 Dim olMailItem As Object 'Outlook.MailItem 64 65 '日時範囲の開始日時を指定 66 dtStartDate = DateAdd("d", -1, Date) 67 '日時範囲の終了日時を指定 68 dtEndDate = DateAdd("s", -1, DateAdd("d", 1, Date)) 69 70 '受信日時に対する検索条件式の生成 71 strStartDate = Format(dtStartDate, "ddddd h:nn AMPM") 72 strEndDate = Format(dtEndDate, "ddddd h:nn AMPM") 73 strFilter = "[ReceivedTime] >= """ & strStartDate & """ AND [ReceivedTime] <= """ & strEndDate & """" 74 '検索条件式をイミディエイトウィンドウに出力(デバッグ用) 75 Debug.Print strFilter 76 77 'ヒットカウンタの初期化 78 lngHitCount = 0 79 80 '条件に該当する最初のアイテムを検索 81 Set olMailItem = olMailItems.Find(strFilter) 82 83 'ヒットしなくなくなるまでループ 84 Do Until olMailItem Is Nothing 85 'ヒットカウンタのインクリメント 86 lngHitCount = lngHitCount + 1 87 '出力先行番号のインクリメント 88 lngRow = lngRow + 1 89 '各プロパティの値をワークシートの各列に書き出す 90 wsSheet.Cells(lngRow, 1).Value = olMailItem.SenderName 91 wsSheet.Cells(lngRow, 2).Value = olMailItem.Subject 92 wsSheet.Cells(lngRow, 3).Value = olMailItem.ReceivedTime 93 wsSheet.Cells(lngRow, 4).Value = olMailItem.Body 94 '次のアイテムを検索 95 Set olMailItem = olMailItems.FindNext 96 Loop 97 98 'ワークシートの列幅の自動調整 99 wsSheet.UsedRange.EntireColumn.AutoFit 100 101 'ヒット件数をメッセージボックスに表示 102 MsgBox "ヒットしたメールアイテムは " & lngHitCount & " 件です。", _ 103 vbInformation, _ 104 "検索完了" 105 106Exit_OutputReceivedMailsFromOutlook: 107On Error Resume Next 108 109 Set olMailItem = Nothing 110 Set olMailItems = Nothing 111 Set olTargetFolder = Nothing 112 Set olInBoxFolder = Nothing 113 Set olNamespace = Nothing 114 'このプロシージャによって Outlook が起動された場合 115 If blCreateApp Then 116 'Outlook の終了 117 olApp.Quit 118 End If 119 Set olApp = Nothing 120 121 Set wsSheet = Nothing 122 Set wbBook = Nothing 123 124 Exit Sub 125 126Err_OutputReceivedMailsFromOutlook: 127 128 MsgBox Err.Number & ": " & Err.Description, _ 129 vbCritical, _ 130 "実行時エラー(OutputReceivedMailsFromOutlook)" 131 132 Resume Exit_OutputReceivedMailsFromOutlook 133End Sub

投稿2023/01/18 09:04

編集2023/01/18 09:17
sk.exe

総合スコア744

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

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

kasirida

2023/01/18 09:11

ありがとうございます 早速やってみます❗️
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問