Outlookの予定表に登録されている予定をExcelシートへ一覧表にしたいことはないでしょうか。
例えば月次集計で定例会実施件数など活動履歴を集計したいときなどです。
そんな時に悩むことは、
・VBAでOutlookの予定表情報を一括取得したいが方法がわからない
ですよね。
今回はそんなお悩みを解決する、
・VBAで期間指定でOutlook予定表に登録されている予定をExcelへ出力する方法
についてまとめます!
もくじ
予定一覧をExcelへ出力するイメージ
今回のOutlook予定表を出力するVBAの実行イメージについて説明をします。
まずVBAの実装先は、出力結果を書き込む先のExcel側となります。
Excelブック側からVBAを実行し以下の流れで処理が行われます。
①Excelブック(VBA) → 予定一覧ちょうだい → Outlook
②Excelブック ← 予定一覧を出すよ ← Outlook
Excel側のVBAを実行すると、
ExcelのワークシートにOutlookの予定表情報が書き込まれます!
カンタンですね。
早速VBAを実装をして動かしてみましょう!
Excel VBAからOutlookを操作するための下準備
①まずExcelを起動し、「開発」タブをクリックします。
②VBEの画面が開いたら、メニューから「ツール」>「参照設定」を選択します。
③「Microsoft Outlook XX.X Object Library」を探してチェックボックスにチェックし「OK」をクリックします。
以上です。
VBAを実装する
続いてVBAを実装します。
今回VBAは以下の通りとなります。
なお、VBAは前回の「【Excel VBA】カンタン!Outlookの連絡先をExcelワークシートへ取り込む」をベースに、連絡先部分を予定表へ変更をおこなったものとなります。
Sub Outlookの予定表を取り込む()
'Outlook用の定義
Dim olApp As Outlook.Application
Dim olNamespace As Outlook.Namespace
Dim olFolder As Folder
Dim olConItems As Outlook.Items
Dim olItem As AppointmentItem
'Excel用の定義
Dim wbBook As Workbook
Dim wsSheet As Worksheet
Dim lnContactCount As Long
Dim strDummy As String
'スクリーンの更新を停止します。
Application.ScreenUpdating = False
'Excelのブックとワークシートのオブジェクトを設定します。
Set wbBook = ThisWorkbook
Set wsSheet = wbBook.Worksheets(1)
'書き込み先のセルを指定します。また1行目にタイトルを記述します。
With wsSheet
.Range("A1").CurrentRegion.Clear
.Cells(1, 1).Value = "件名"
.Cells(1, 2).Value = "場所"
.Cells(1, 3).Value = "開始日時"
.Cells(1, 4).Value = "終了日時"
.Cells(1, 5).Value = "予定の本文"
.Cells(1, 6).Value = "予約者"
.Cells(1, 7).Value = "必須出席者"
.Cells(1, 8).Value = "任意出席者"
With .Range("A1:Z1")
.Font.Bold = True
.Font.ColorIndex = 10
.Font.Size = 11
End With
End With
wsSheet.Activate
'Outlookオブジェクトを設定し、MAPI名前空間を介してOutlookの予定表を取得します。
Set olApp = New Outlook.Application
Set olNamespace = olApp.GetNamespace("MAPI")
Set olFolder = olNamespace.GetDefaultFolder(olFolderCalendar)
Set olConItems = olFolder.Items
'取得結果を記述する行番号を指定します。2行目のセルから開始されることになります。
lnContactCount = 2
For Each olItem In olConItems
Debug.Print TypeName(olItem)
If TypeName(olItem) = "AppointmentItem" Then
With olItem
Cells(lnContactCount, 1).Value = .Subject
Cells(lnContactCount, 2).Value = .Location
Cells(lnContactCount, 3).Value = .Start
Cells(lnContactCount, 4).Value = .End
Cells(lnContactCount, 5).Value = .Body
Cells(lnContactCount, 6).Value = .Organizer
Cells(lnContactCount, 7).Value = .RequiredAttendees
Cells(lnContactCount, 8).Value = .OptionalAttendees
End With
lnContactCount = lnContactCount + 1
End If
Next olItem
'オブジェクトを解放します。
Set olItem = Nothing
Set olConItems = Nothing
Set olFolder = Nothing
Set olNamespace = Nothing
Set olApp = Nothing
'スクリーンの更新を再開します。
Application.ScreenUpdating = True
MsgBox "Outlook予定表の取り込みが完了しました!", vbInformation
End Sub
実装手順は以下の通りです。今回はExcel側にこのVBAを実装します。
①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。
②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。
③右ペインのウインドウに上記のVBAを入力します。
こちらで完了です。
VBAを実行する
①「開発」タブの「VBA」をクリックし「Outlookの予定先を取り込む」を選択し、「実行」をクリックします。
②Excelのワークシートに書き込まれたら完成です!
なお、実行にあたり予定の登録数が多い場合は処理に時間がかかることがありますのでご注意ください。
今回のVBAについて説明
予定表のリストはolFolderCalendarというメンバーに格納されています。
コードではolItemオブジェクトのタイプ名が”AppointmentItem”だった場合に処理を進めるようにしています。
If TypeName(olItem) = “AppointmentItem” Then
また連絡先の項目はプロパティに格納されており、今回は以下の項目に絞っています。
件名:Subject
場所:Location
開始日時:Start
終了日時:End
予定の本文:Body
予約者:Organizer
必須出席者:RequiredAttendees
任意出席者:OptionalAttendees
予定表のすべて項目は以下となっていますので、必要に応じて取捨選択頂ければと思います。
【参考】AppointmentItem オブジェクト (Outlook)
名前 | 説明 |
---|---|
attachments | 指定されたアイテムのすべての添付ファイルを表す Attachments オブジェクトを返します。 |
autoresolvedwinner | Outlook アイテムに関連付けられている請求先情報を表す文字列を設定または返します。 |
BillingInformation | 連絡先の記念日を示す日付を設定または返します。読み取り/書き込み。 |
Body | Outlook アイテムの本文を表す文字列型 (String) の値を返すか設定をします。 値の取得と設定が可能です。 |
BusyStatus | 予定のユーザーのビジー状態を示す**OlBusyStatus** 定数を設定または返します。 値の取得と設定が可能です。 |
Categories | Outlook アイテムに割り当てられた分類項目を表す文字列を設定または返します。 値の取得と設定が可能です。 |
Companies | Outlook アイテムに関連付けられている会社の名前を表す文字列を設定または返します。 値の取得と設定が可能です。 |
AutoResolvedWinner | ブール値アイテムが自動競合解決の勝者であるかどうかを返します。読み取り専用です。 |
BillingInformation | Outlook アイテムに関連付けられている請求先情報を表す文字列を設定または返します。読み取り/書き込み。 |
ConversationTopic | Outlook アイテムのテーマスレッドのトピックを表す文字列を返します。 読み取り専用です。 |
Creationtime | Outlook アイテムの作成日時を示す日付を返します。 読み取り専用です。 |
Duration | 期間 (分単位) を示す長整数型 (Long ) の値を取得または設定します。 値の取得と設定が可能です。 |
End | 終了日時を示す日付を設定または返します。 値の取得と設定が可能です。 |
EndInEndTimeZone | タイムゾーンで表される予定の終了日時を表す日付値を設定を取得または取得します。 値の取得と設定が可能です。 |
EndUTC | 世界協定時刻 (UTC) 形式で表現される予定の終了日時を表す日付値を設定を取得または取得します。 値の取得と設定が可能です。 |
LastModificationTime | Outlook アイテムが最後に変更された日付と時刻を指定する日付を返します。 読み取り専用です。 |
Location | 予定の特定のオフィスの場所を表す文字列を設定または返します (たとえば、建物1の部屋1または Suite 123)。 値の取得と設定が可能です。 |
Meetingstatus | 予定アイテムがリンクされている会議ワークスペースの URL を表す文字列型 (string ) の値を返します。 読み取り専用です。 |
MeetingWorkspaceURL | 連絡先の勤務先住所の番地部分を表す文字列を設定または返します。読み取り/書き込み。 |
Organizer | 予定の開催者の名前を表す文字列を返します。 読み取り専用です。 |
PropertyAccessor | 連絡先に使用する電子名刺の種類を指定する定数 OlBusinessCardType を返します。値の取得のみ可能です。 |
BusinessFaxNumber | オブジェクトのプロパティの作成、取得、設定、および削除をサポートする**PropertyAccessor** オブジェクトを返します。 読み取り専用です。 |
Recipients | Outlook アイテムのすべての受信者を表す Recipients コレクションを取得します。 読み取り専用です。 |
ReminderMinutesBeforeStart | アラームが予定の開始前に発生する時間を分単位で示すを設定または返します。 値の取得と設定が可能です。 |
ReminderSet | アイテムのアラームが設定されている場合は、 Trueを指定するブール値を設定します。 値の取得と設定が可能です。 |
ReplyTime | 予定の返信時刻を示す日付を設定または返します。 値の取得と設定が可能です。 |
AppointmentItem | 会議の予定に必要な出席者名のセミコロンで区切られた文字列を返します。 値の取得と設定が可能です。 |
Resources | 会議のリソース名のセミコロンで区切られた文字列を返します。 値の取得と設定が可能です。 |
ResponseRequested | 現在のユーザーの予定の会議の全体的な状態を示す**olresponsestatus** クラスの定数を取得します。 読み取り専用です。 |
Responsestatus | Outlook アイテムに関連付けられている会社の名前を表す文字列を設定または返します。読み取り/書き込み。 |
Size | Outlook アイテムのサイズ (バイト単位) を示す値を返します。 読み取り専用です。 |
Start | 開始日時を示す日付を設定または返します。 値の取得と設定が可能です。 |
Startinstarttimezone | 予定の開始日時を表す日付値を設定を取得または取得します。 値の取得と設定が可能です。 |
Starttimezone | 予定の開始時刻のタイムゾーンに対応する**TimeZone** 値を設定または返します。 値の取得と設定が可能です。 |
Subject | Outlook アイテムの件名を示す 文字列 を返すか、設定します。 値の取得と設定が可能です。 |
追記:Find、FindNextメソッドで期間指定し、抽出する予定を絞り込む
前回連絡先出力の時にご紹介したFind、FindNextメソッドを利用して、抽出する予定を絞り込む機能を追加しましたので、追記いたします。
コードは以下の通りです。
Sub Outlookの予定表を取り込む_期間指定Ver()
'Outlook用の定義
Dim olApp As Outlook.Application
Dim olNamespace As Outlook.Namespace
Dim olFolder As Folder
Dim olConItems As Outlook.Items
Dim olItem As AppointmentItem
'Excel用の定義
Dim wbBook As Workbook
Dim wsSheet As Worksheet
Dim lnContactCount As Long
Dim strDummy As String
'スクリーンの更新は行われません。
Application.ScreenUpdating = False
'Excelのブックとワークシートのオブジェクトを設定します。
Set wbBook = ThisWorkbook
Set wsSheet = wbBook.Worksheets(1)
'書き込み先のセルを指定します。また1行目にタイトルを記述します。
With wsSheet
.Range("A1").CurrentRegion.Clear
.Cells(1, 1).Value = "件名"
.Cells(1, 2).Value = "場所"
.Cells(1, 3).Value = "開始日時"
.Cells(1, 4).Value = "終了日時"
.Cells(1, 5).Value = "予定の本文"
.Cells(1, 6).Value = "予約者"
.Cells(1, 7).Value = "必須出席者"
.Cells(1, 8).Value = "任意出席者"
With .Range("A1:Z1")
.Font.Bold = True
.Font.ColorIndex = 10
.Font.Size = 11
End With
End With
wsSheet.Activate
'Outlookオブジェクトを設定し、MAPI名前空間を介してOutlookの予定表を取得します。
Set olApp = New Outlook.Application
Set olNamespace = olApp.GetNamespace("MAPI")
Set olFolder = olNamespace.GetDefaultFolder(olFolderCalendar)
Set olConItems = olFolder.Items
'取得結果を記述する行番号を指定します。2行目のセルから開始されることになります。
lnContactCount = 2
Dim objAppt As AppointmentItem
Dim strStart As String
Dim strEnd As String
strStart = Format("2019/09/16", "yyyy/mm/dd") '抽出する予定の開始日を指定
strEnd = Format("2019/09/17", "yyyy/mm/dd") '抽出する予定の終了日を指定
strEnd = DateAdd("d", 1, strEnd) ' 1日追加
'Findメソッドで期間指定して抽出する予定を絞り込む
Set olItem = olConItems.Find("[End] < """ & strEnd & """ AND [Start] >= """ & strStart & """")
While TypeName(olItem) = "AppointmentItem"
'Findで検索すると期間範囲外の余計なものまでヒットしてしまうので、再度フィルタリングする
If olItem.Start >= strStart And olItem.End < strEnd Then
With olItem
Cells(lnContactCount, 1).Value = .Subject
Cells(lnContactCount, 2).Value = .Location
Cells(lnContactCount, 3).Value = .Start
Cells(lnContactCount, 4).Value = .End
Cells(lnContactCount, 5).Value = .Body
Cells(lnContactCount, 6).Value = .Organizer
Cells(lnContactCount, 7).Value = .RequiredAttendees
Cells(lnContactCount, 8).Value = .OptionalAttendees
End With
lnContactCount = lnContactCount + 1
End If
Set olItem = olConItems.FindNext
Wend
'オブジェクトを解放します。
Set olItem = Nothing
Set olConItems = Nothing
Set olFolder = Nothing
Set olNamespace = Nothing
Set olApp = Nothing
'スクリーンの更新を再開します。
Application.ScreenUpdating = True
MsgBox "Outlook予定表の取り込みが完了しました!", vbInformation
End Sub
今回は2019/09/16~2019/09/17までを指定しました。
期間を変更する箇所は以下となります。
strStart = Format(“2019/09/16“, “yyyy/mm/dd”) ‘抽出する予定の開始日を指定
strEnd = Format(“2019/09/17“, “yyyy/mm/dd”) ‘抽出する予定の終了日を指定
VBAから「Outlookの予定表を取り込む_期間指定Ver」を指定し、実行してみましょう。
はい!絞り込めましたね。
やはり絞り込み機能はあったほうが良いです。
さいごに
いかがでしょうか。
今回は
・VBAで期間指定でOutlook予定表に登録されている予定をExcelへ出力する方法
についてまとめました。
まだまだ便利な方法がりますので、よろしければご参照頂ければと思います。
大変便利に使用させていただいております。
さて、
Cells(lnContactCount, 6).Value = .Organizer
にて予約者の「表示名」は取得できていますが、
その予約者のメールアドレスを取得することは可能でしょうか?
色々プロパティをいじってみてるのですが、うまくいきません。
そもそもメールアドレスは取得できないのでしょうか?
いつもご利用ありがとうございます。
予約者のメールアドレスを取得する件につきまして、RecipientsコレクションのAddressプロパティに含まれていれば可能かと存じます。
コードを以下のように変更し検証いただきたくお願いいたします。
■変更前
Cells(lnContactCount, 6).Value = .Organizer
■変更後
Dim objRecipient As Object
For Each objRecipient In .Recipients
If .Organizer = objRecipient.Name Then
Cells(lnContactCount, 6).Value = objRecipient.Address
Exit For
Else
Cells(lnContactCount, 6).Value = .Organizer
End If
Next
お世話なります。回答ありがとうございます。
追加予定表の取り込みをさっそくトライしてみます。
とても便利で活用させて頂いてます。ありがとうございます。
1点質問があります。
Outlookに新しく追加した予定表※から、このマクロでデータ抽出したいのですが、「オブジェクトのタイプ名」の指定の仕方を教えて頂けないでしょうか。
※例えば、「予定表」と分けた「実績」
>予定表のリストはolFolderCalendarというメンバーに格納されています。
>コードではolItemオブジェクトのタイプ名が”AppointmentItem”だった場合に処理を進めるようにしています。
いつもご利用ありがとうございます。
Outlookに新しく追加した予定表(例として「実績」)を対象にデータを抽出する件ですが、
以下の記事の内容が該当いたしますので、よろしければご参考いただきたくお願いいたします。
https://extan.jp/?p=3370
例:追加フォルダ名「実績」(パス:\\<メールボックス>\予定表\実績\)の場合
Set olFolder = olNamespace.GetDefaultFolder(olFolderCalendar).Folders(“実績”)
また予定表に登録したアイテムであればオブジェクトタイプは”AppointmentItem”でよいかと思います。
まずは上記フォルダによる指定で予定のデータが抽出可能であるかご確認いただきたくお願いいたします。
グループアドレスの件、ご回答いただき誠にありがとうございます。
回答いただいた内容ではエクセルのシート2に抽出したいメンバーのアドレスを手動で打ち込むとのことでしたが、Outlookのグループアドレスに登録されている各メンバーのメールアドレスを抽出して、エクセルのシート2に自動で格納されるシステムを構築したいと考えています。(グループアドレスのメンバーが頻繁に入れ替わるため、手動ではなく自動で抽出できるように模索しております…)
何かいい案をご存知であれば、アドバイスいただけますでしょうか。
グループアドレスのメンバー情報取得について、案ということで検証はしていませんが、
グループ(Excenge上の配布リスト)のメンバー取得、メンバー情報のExcelへの転記、スケジュールのインポートと機能は分けた方がよいでしょう。
グループのメンバー取得の方法は
https://docs.microsoft.com/ja-jp/office/client-developer/outlook/pia/how-to-get-members-of-an-exchange-distribution-list
が参考になるかと思います。
また、PowerShellのGet-DistributionGroupMemberでも取得できるようです。
メンバー情報のExcelへの転記については出力したファイルがCSVということでしたら
https://extan.jp/?p=5120
が参考になるかと思います。
ご検討くださいませ。
大変貴重な情報をありがとうございます。
今回ご紹介いただいた手法は手動でメールアドレスを打ち込むものでしたが、Outlookのグループメールに登録されたメンバー各自のメールアドレスのスケジュールを一括してインポートする方法をご存知でしょうか?
いつもご利用ありがとうございます。
グループメンバのスケジュールを一括してインポートする方法については
以下の記事にて近い内容がございますので、ご参照頂ければと存じます。
https://extan.jp/?p=2802
配布グループなどグループに登録されたメンバーのメールアドレスを手動で抽出し、
Excelの2つ目のシートにメールアドレスを入力すれば、そのリスト分のスケジュールを取得することが可能です。
なお、実行アドレスのアクセス権は対象予定表のすべての項目を読み取れる権限になるようにしてください。
よろしくお願いいたします。
VBA未経験者ですが、大変参考にさせていただきました。
1点質問させていただきたいのですが、指定した期間内で、subjectもしくはbodyに特定のキーワードがあるもののみ取り込むことは可能でしょうか。
いつもご利用ありがとうございます。
またVBA未経験者大歓迎です。
subjectもしくはbodyに特定のキーワードがあるもののみ取り込む方法につきまして、
InStr関数(文字列を検索して見つかった位置を返す処理)にsubject、bodyプロパティと特定キーワードを指定し、判定条件にすることで実現可能です。
例えば期間指定Verのサンプルコードに条件を追加する場合は以下の箇所を変更します。
■変更前
If olItem.Start >= strStart And olItem.End < strEnd Then
■変更後
If olItem.Start >= strStart And olItem.End < strEnd And InStr(olItem.Subject, “実績報告”) Then
※Bodyにしたい場合はSubjectと差し替えてください。
※”実績報告”が特定キーワードに該当しますので、適宜変更してください。
よろしくお願いいたします。
いつも有益な情報をありがとうございます。
Outlook予定表の取り込みが完了しました!というポップアップは出るのですが、実際に予定表が取り込まれません。どのような原因が考えられるでしょうか。
いつもご利用ありがとうございます。
予定表が取り込まれない原因といたしまして、以下が考えられます。
①1シート目以外のシートを参照している
②期間指定版にて指定した期間の範囲に予定が存在しない
③取得対象アカウントが規定になっていない
①については出力先が1シート目となりますので1シート目をご確認ください。
②については、以下の期間を予定が存在する範囲に変更をしてください。
strStart = Format(“2019/09/16”, “yyyy/mm/dd”) ‘抽出する予定の開始日を指定
strEnd = Format(“2019/09/17”, “yyyy/mm/dd”) ‘抽出する予定の終了日を指定
③については複数のアカウントを登録している場合の原因となります。
対象アカウントを既定へ変更頂ければと存じます。
よろしくお願いいたします。
いつも参考にさせていただいております。抽出する予定の開始日と終了日について、コードに直接書き込むのではなく、Excelの特定のセル(たとえばL1セルに開始日、L2セルに終了日)を入力した上でマクロを実行することで、入力した期間のデータが抽出されるようにしたいのですが、どのようなコードを記載すればよいのでしょうか。お手数ですが、お教えいただけると大変助かります。
いつもご利用ありがとうございます。
抽出する予定の開始日と終了日をセルの値から参照するよう変更する件ですが、
L1セルに開始日、L2セルに終了日とする場合は、
以下のコードを、
strStart = Format(“2021/09/11”, “yyyy/mm/dd”) ‘抽出する予定の開始日を指定
strEnd = Format(“2021/11/1”, “yyyy/mm/dd”) ‘抽出する予定の終了日を指定
こちらへ変更頂きたくお願いいたします。
strStart = Format(Range(“L1”).Value, “yyyy/mm/dd”) ‘抽出する予定の開始日を指定
strEnd = Format(Range(“L2”).Value, “yyyy/mm/dd”) ‘抽出する予定の終了日を指定
お世話になります。
Outlookスケジュールを下記のように運用しています。
個人用の予定表
┗予定表(既定)
┗プライベート(新たに作成)
上記のプライベートのみをExcelワークシートに取り込む場合、どのようにすればよいでしょうか。既定のものしか取り込めないのでしょうか。
いつもご利用ありがとうございます。
追加した予定表の予定情報をExcelへ取り込む方法について確認をすることができました。
詳細は記事にまとめましたので、よろしければご参照ください。
【VBA】ExcelへOutlookの追加予定表の予定情報を取り込む方法
なお、追加した予定表の名前を「プライベート」とする場合は、サンプルコードを以下のようにしていただければと存じます。
Set olFolder = olNamespace.GetDefaultFolder(olFolderCalendar).Folders(“プライベート”)
よろしくお願いいたします。
いつもご利用ありがとうございます。
原則として既定の予定表のみが取得の対象となっていますので、追加した予定表は対象外となります。
ざっと追加した予定表を指定する方法がないか確認しましたが、有力な情報は見当たりませんでした。
もしありましたら記事へ追記をしたいと思います。
よろしくお願いいたします。
確認させて頂きました。
やりたい事がやれそうです。
VBAをやり始めて3ヵ月が経ちましたが楽しくなって来ました。また、色々と参考にさせて頂きます。
ありがとうございました。
やりたいことが見えてきたということでよかったです!
作られたVBAが業務に活用されることを願っています。
よろしくお願いいたします。
大変返信遅れ申し訳ありません。
とても参考になり早速実装させて頂きました。
ありがとうございました。
少し質問させて下さい。
Conversation IDとEntryIDは会議案内した時点で変わらないものでしょうか。
現在、ユーザーフォームから打ち合わせ案内とタスク仕事納期を送信し、送信した情報をExcelシートに自動で入力させようと色々参考にさせて作りました。
Outlook の変更点をExcelシートに反映したいと思っています。
例えば、欠席したら打ち合わせは必要なしとしてセルに打ち合わせ否と入力させるこんな感じです。
あっ、質問は、会議の日にちを変更するとIDも変わってしまうのかです。
IDを照合して会議日が変わった事をExcelシートに反映したいと考えています。
長々と書きましたが、ご教示お願い致します。
ご質問の会議の日にちを変更するとID(ConversationIDとEntryID)は変わるかにつきましては、
会議を新規登録した時点でIDは発番され、それ以降に案内通知を実施したり、会議の日にちや時間を変更したとしてもIDは変わることはありません。
EntryIDの取り扱いについてはこちらをご参考頂ければと思います。
https://extan.jp/?p=2275
よろしくお願いいたします。
大変便利で使わせて頂いております。
Excelから会議案内し、予定表をExcelに取得しています。出席者の応答(承諾、仮承諾、辞退、応答なし)も取得したいのですが宜しくお願い致します。
いつもご利用ありがとうございます。
出席者の応答結果を取得する件ですが、ざっと調べたところ、MS側にも載っておらず有力な情報を見つけることはできませんでしたが、
応答結果のメールから情報を収集すればできそうです。
具体的には会話ID(ConversationID)と参加者(送信者)のメールアドレス、応答結果を収集し、会議単位でまとめるといった処理となります。
できましたら別の記事でご紹介したいと思いますので、完成までお時間頂ければと思います。
返信遅れ申し訳ありませんでした。
宜しくお願い致します。
こちらに出席者の応答結果を集計するマクロについてまとめましたので、
よろしければご参考くださいませ。
https://extan.jp/?p=2973
大変勉強させて頂いています。
1点なのですが、こちらの予定表の取り込み先を共有予定表などにすることは可能なのでしょうか?
よくわかっておらず申し訳ございません。教えていただけますか。
こちらに他人が共有する予定表を取り込むコードを記載しましたので、ご参照ください。
https://extan.jp/?p=2243
コード上で日時指定で実行していますが
Excel上でボタンを押すと先月分のデータが取り込めるような
マクロも可能なのでしょうか。
いつもご利用ありがとうございます。
先月、今月、翌月分予定表が取り込めるボタンを追加した内容の記事を公開しましたので、よろしければご参照ください。
https://extan.jp/?p=2421
はい、可能となります。
ボタンに関しては、Excel上にボタン配置してマクロを登録をします。
先月の月末月初は以下の関数で取得し、値をマクロへ渡します。
先月の月初 =EOMONTH(TODAY(),-2)+1
先月の月末 =EOMONTH(TODAY(),-1)
別の機会にでもサンプルコードを提示したいと思います。
大変便利だと思い活用させていただいています。
1点教えてほしいのですが上記マクロを組んで抽出したところ、
定期的な予定(例えば毎週水曜日の会議)が抽出されません。
これが全て抽出されるようなマクロの組み方を教えていただけませんか?
こちらに定期的な予定を出力するコードを記載しましたので、ご参照ください。
https://extan.jp/?p=2243
定期的な予定の情報については、少々難しく、GetRecurrencePattern メソッドを呼び出して、指定された予定に関連付けられている RecurrencePattern オブジェクトを取得する形となります。
Set objPattern = olItem.GetRecurrencePattern
次に期間を取得します。
objPattern.PatternStartDate
objPattern.PatternEndDate
最後が難しいのですが、日次、週次、月次、年次パターンを取得します。
objPattern.RecurrenceType
頻度 (毎週、隔週、3 週間に 1 度など) の場合は
objPattern.Interval
会議のある曜日の場合は
objPattern.DayofWeekMask
で取得し、期間とパターンで開催日を導きだす必要があります。
詳細はこちらをご参照ください。
https://docs.microsoft.com/ja-JP/previous-versions//ee692908(v=technet.10)?redirectedfrom=MSDN