【Outlook VBA】登録済みの予定を日付で検索して取得する方法

outlook,vba,getappointment

皆様こんにちは、ノグチです。

以前の記事では、Outlookの予定を登録する方法をご紹介しました。

【はじめてのOutlook VBA】Outlookの予定を登録する方法
Outlook VBAでコーディングするためのVBEの準備と、VBAで予定を登録する方法をご紹介しています。1件の予定登録の手間は大したことがなくても、複数登録する必要が出てくると面倒臭い...本稿では複数の予定をOutlookにまとめて登録するための第一歩として、単体の予定をVBAで登録する方法をご紹介します。

登録した予定はOutlookのカレンダーを見れば一目瞭然ですが、ボタン一つでチェックできれば更に便利ですよね。

Outlook VBAならできるかもしれませんよ。

ということで今回は、Outlookに登録されている予定を取得してメッセージで表示する方法をご紹介します!

スポンサーリンク

Outlookの予定を取得する

GetDefaultFolderメソッドで予定表フォルダにアクセス

以前の記事で、受信メールフォルダにアクセスする方法をご紹介しました。

【エクセルVBA】GetNamespaceメソッドでOutlookのデータフォルダにアクセスする方法
GetNameSpaceメソッドでOutlookのデータフォルダにアクセスする方法をご紹介しています。このメソッドでOutlookのNameSpaceオブジェクトを取得すれば、メール、連絡先、予定表などのデータフォルダにアクセスして、更にその中のデータを読込んだり、エクセルシートに書き出したりすることができますよ。

予定についても、考え方は受信メールフォルダにアクセスする場合とほぼ同じ。

GetDefaultFolderメソッドの引数に、予定表のフォルダを表す定数olFolderCalendorを指定すればOKです。

こんな風に。

Namespaceオブジェクト.GetDefaultFolder(olFolderCalendar)

これで、予定表のFolderオブジェクトが取得できます。

Itemsメソッドとプロパティで予定の内容を取得

予定表のFolderオブジェクトが取得できたら、Itemsメソッドで予定を取得して、更にプロパティで予定の情報を取得しましょう。

Itemsメソッド記述方法と各プロパティは、下記記事でご紹介していますので、こちらをご覧ください。

【はじめてのOutlook VBA】Outlookの予定を登録する方法
Outlook VBAでコーディングするためのVBEの準備と、VBAで予定を登録する方法をご紹介しています。1件の予定登録の手間は大したことがなくても、複数登録する必要が出てくると面倒臭い...本稿では複数の予定をOutlookにまとめて登録するための第一歩として、単体の予定をVBAで登録する方法をご紹介します。

たとえば、予定の件名と開始時間を取得したいとしたら、ItemsメソッドのSubjectプロパティとStartプロパティを使って、こんな風に記述します。

Private Sub GetAppointment()
Dim myNamespace     As NameSpace
Dim myFolder        As Object

Set myNamespace = GetNamespace("MAPI")
Set myFolder = myNamespace.GetDefaultFolder(olFolderCalendar)

MsgBox myFolder.Items(1).Start & vbCrLf & myFolder.Items(1).Subject

End Sub

このコードを実行してみると…

outlook,vba,予定,メッセージ

この通り、予定の内容を取得して、メッセージで表示できていますね。

日時を指定して登録済みの予定を取得する

さて、上でご紹介したコードに更に手を加えて、今度は指定した日付の予定が取得できるようにしてみましょう。

上のコードのままでは、実用的とは言えませんからね。

何も難しいことはなく、For Each文とIf文を使って、予定フォルダー内の各予定が指定条件にマッチするかを見てあげればよいだけです。

上のコードに、For Each文で予定フォルダ内の予定を1件ずつ取得する処理と、取得した予定が条件にマッチしているか?をIf文でチェックする処理を入れてみましょう。

こんなコードになります。

Private Sub GetAppointment()
Dim myNamespace     As NameSpace
Dim myFolder        As Object
Dim ObjAppo         As Object
Dim strMsg          As String

Set myNamespace = GetNamespace("MAPI")
Set myFolder = myNamespace.GetDefaultFolder(olFolderCalendar)

For Each ObjAppo In myFolder.Items
    
    If Format(ObjAppo.Start, "yyyy/mm/dd") = Format("2019/03/20", "yyyy/mm/dd") Then
        With ObjAppo
            strMsg = strMsg & Format(.Start, "hh:mm") & Space(3) & _
                    ObjAppo.Subject & vbCrLf
        End With
    End If
Next ObjAppo

MsgBox strMsg

End Sub

そして実行してみると…

outlook,vba,指定日,予定

この通り、3月20日に登録された予定を全て取得してくれていますね。

Date関数で今日日付の予定を取得する

上のコードの、If文の条件にDate関数をセットすれば、本日日付の予定を取得することができますよ。

 このIf文を…

 If Format(ObjAppo.Start, "yyyy/mm/dd") = Format("2019/03/20", "yyyy/mm/dd") Then

このように記述すればOKです。

If Format(ObjAppo.Start, "yyyy/mm/dd") = Date Then

これなら、カレンダーを見なくてもマクロを実行すれば、今日の予定を確認できますね。

最後に

今回は、Outlookのに登録された予定を取得する方法をご紹介しました。

Outlookには色々なイベントプロシージャが用意されていますので、イベントと組み合わせて使ってみるとより便利に使えるかもしれませんね。

それでは、最後までお読みいただきありがとうございました!

連載目次:Outlook VBA 予定を登録してみよう

Outlook VBAで、予定の管理も便利にしてしまいましょう。

VBAでの予定の登録だけでなく、登録済みの予定への操作方法もご紹介しています。

  1. 【はじめてのOutlook VBA】Outlookの予定を登録する方法
  2. 【Outlook VBA】エクセルワークシートの内容で予定登録する方法
  3. 【Outlook VBA】登録済みの予定を日付で検索して取得する方法
  4. 【Outlook VBA】イベントApplication_Startupで起動時に今日の予定を表示する方法
タイトルとURLをコピーしました