VBAでOutlook予定表を管理!初心者でもスケジュールを確認する方法

当ページのリンクには広告 (Amazonアソシエイト含む) が含まれています。

「OutlookのスケジュールをExcelで管理したい!」
そんな疑問を持っていませんか?


Outlookの予定表をExcelに自動で取り込みたい

他人のスケジュールも確認して、業務の効率を上げたい

VBA初心者でも簡単にOutlook予定表を取得する方法を知りたい

この記事は、VBAで「Outlookのスケジュールを取得する方法」
を解決します!


この記事では、「VBAを使用してOutlookのスケジュールを取得する方法」を詳しく解説します。

Outlookのスケジュールを自動で取得できれば、Excelでスケジュール管理が簡単になります。
自分だけでなく 他人の予定も効率的に確認できる ので、会議の調整やタスクの進捗管理にも役立ちます!

使用例もすべてコピペして実行できるので、ぜひ最後までご覧いただき、実践してみてください。


【 この記事の概要 】

よく使う度
難しさ
覚えておくと安心度
目次

この記事で「できるようになる」こと

自分や他人のOutlookスケジュールを取得してできる便利なこと

OutlookのスケジュールをVBAで取得し、Excelで管理できるようになると、以下のような業務効率化が実現します。

自分の予定だけでなく他人の予定も簡単に把握できるため、 チーム全体の作業効率が向上 します。

スケジュールを管理するとこんなことができます。
  • チームの会議やイベントをスムーズに調整できる
    • Outlookで共有されている他人のスケジュールをExcelにまとめれば、チーム全員の空き時間が一目でわかります
      これにより、会議の調整やイベントの計画がスムーズに行えます。
      また、 Excelの機能を活用して複数人の予定を可視化するカレンダーを作成することも可能です。
      • 活用例
        • プロジェクト会議の日程調整
        • チーム全員の予定表をエクセルで一元管理
        • 部門横断の会議や研修スケジュールの調整
  • 予定をExcelで加工して分析・レポート作成が可能
    • Outlookから取得したデータをExcelに取り込むことで、自由に加工や分析ができます
      例えば、特定のタスクに費やした時間を計算したり、会議の頻度を可視化したりすることが可能です。
      これにより、業務時間の最適化や会議の見直しが容易になります。
      • 活用例
        • 会議の頻度や時間を分析し、非効率な会議を削減
        • プロジェクトごとの作業時間を算出し、リソース配分を最適化
        • チームメンバーごとの稼働状況を把握してタスク配分を見直し
  • チーム全体のスケジュールを見える化
    • 自分や他人のスケジュールを取得してExcelにまとめることで、チーム全体の稼働状況を把握できます。
      特にリモートワークや複数のプロジェクトが並行して進行している場合に役立ちます。
      • 活用例
        • 各メンバーの空き時間をExcelでグラフ化して共有
        • 他部署との予定調整に必要な情報を瞬時に取得
        • 部下や後輩の稼働状況を可視化してマネジメントを最適化
スポンサーリンク

VBAでOutlookを操作するための準備をご紹介

まず、VBAでOutlookを操作するために必要な基本的な準備から始めましょう。

Outlookライブラリファイルへの参照設定を行いましょう

Outlookを操作するには、Outlookの機能をVBAで認識させる必要があります。

以下の手順でライブラリを設定してください。

設定手順

1. Excelを開き、Alt + F11 を押してVBAエディタを開きます。
 これで、VBAのコードを記述できる編集画面が表示されます。

1. Excelを開き、Alt + F11 を押してVBAエディタを開きます。

2. メニューから「ツール」→「参照設定」をクリックします。
 参照設定ダイアログボックスが表示されます。

2. メニューから「ツール」→「参照設定」をクリックします。

3. 「Microsoft Outlook XX.X Object Library」を選択
 一覧から「Microsoft Outlook XX.X Object Library」を見つけ、チェックを入れて「OK」をクリックします。
 (XX.Xはバージョン番号)

3. 「Microsoft Outlook XX.X Object Library」を選択

これで、VBAからOutlookを操作する準備が整いました!

VBAでOutlookを操作するために知っておきたい基本オブジェクト

OutlookをVBAで操作するには、Outlook特有のオブジェクトを理解することが重要です。
これらのオブジェクトは、Outlookの機能を制御する際の基盤となります。

特に、 予定表やメールデータの取得、管理、送信 に必要なオブジェクトを押さえることで、効率的なコード作成が可能になります。

以下に、Outlook操作で使われる主なオブジェクトをわかりやすく解説します。

とりあえず、動作するコードを見てみたいという方は「VBAで予定表を取得する使用例をご紹介」までスキップ

Outlook操作で使われる主なオブジェクト一覧

以下のテーブルは、Outlook VBAで使用される主なオブジェクトとその用途をまとめたものです。

スクロールできます
オブジェクト名説明主な用途基本コード例
Outlook.
Application
Outlook全体を操作するエントリーポイント– アプリケーション全体の制御
– 他のオブジェクトへのアクセス
Set app = CreateObject("Outlook.Application")
Outlook.
Namespace
Outlook内のデータ構造を管理する– フォルダ(予定表やメールフォルダ)の参照
– サブフォルダの取得
Set ns = app.GetNamespace("MAPI")
Outlook.
MAPIFolder
メールや予定表を格納するフォルダ– 予定表データやメールの操作
– フォルダ内のデータ一覧を取得
Set folder = ns.GetDefaultFolder(olFolderCalendar)
Outlook.
Items
フォルダ内のアイテム(予定やメール)の集合– 予定表やメールをリスト形式で取得
– データのフィルタリング
Set items = folder.Items
Outlook.
AppointmentItem
個々の予定アイテムを操作する– 予定の件名、日時、場所などの取得・設定Set appt = items(1)

Outlook.Applicationを設定する方法

VBAでOutlookを操作する際、最初にセットアップすべきオブジェクトが Outlook.Application です。

このオブジェクトは、Outlook全体の制御や他のオブジェクトへのアクセスを可能にするエントリーポイントです。

以下に、Outlook.Applicationを設定する方法を2種類紹介します。

CreateObject を使う方法

この方法は、Outlookが起動していない場合でも新しいインスタンスを作成するために使用します。

Dim outlookApp As Outlook.Application
'// Outlookアプリケーションを操作するための変数を宣言しています。
'// (変数名は、outlookAppでなくても問題ありません)

Set outlookApp = New Outlook.Application
'// 実際にOutlookアプリケーションを起動し、操作できるようにしています。
ポイント

柔軟性が高く、Outlookが起動していない場合でもインスタンスを作成できます。
しかし、初回実行時に若干時間がかかる場合があります。

New ステートメントを使う方法

New ステートメントを使うと、Outlookアプリケーションのインスタンスをより高速に作成できます。

Dim outlookApp As Object
'// Outlookアプリケーションを操作するための変数を宣言しています。
'// (変数名は、outlookAppでなくても問題ありません)

Set outlookApp = CreateObject("Outlook.Application")
'// 実際にOutlookアプリケーションを起動し、操作できるようにしています。
ポイント

動作速度が速いですが、環境によってはエラーが発生する場合があります。


この2つはどちらを使用しても問題有りません。

このコードを使うことで、VBAがOutlookの機能(メール送信、取得など)を使えるようになります。

VBAでOutlookを操作するための基本オブジェクト解説:Namespace、MAPIFolder、Items、AppointmentItem

OutlookをVBAで操作する際には、複数のオブジェクトを活用する必要があります。

特に重要なのが、 NamespaceMAPIFolder、「Items、「AppointmentItem です。
これらを理解することで、予定表やメールデータを取得し、管理・加工できるようになります。

この記事では、これらのオブジェクトの役割や使い方を初心者向けに詳しく解説します。

早速コードを使用してみたいという方は「事項 : 使用例」を確認ください。

1. Namespace:Outlookデータ操作の起点

Namespaceとは?

Namespace は、Outlookのデータ構造を管理する「MAPI(Messaging Application Programming Interface)」への入口を提供するオブジェクトです。

Outlookでは、メール、予定表、連絡先、タスクなど、さまざまなデータがフォルダ単位で整理されています。
このNamespaceを通じて、それらのフォルダやデータにアクセスできます。

たとえば、「受信トレイのメールを取得したい」「予定表のデータを読み取りたい」という場合、Namespaceを使ってOutlookのデータにアクセスすることが最初のステップになります。

MAPIとは?

MAPI は、Outlook内のすべてのデータ(メール、予定表、連絡先など)を統一的に管理する仕組みです。

MAPIは、Outlookがデータを操作するための統一されたインターフェースを提供しています。
Namespaceを通じてMAPIにアクセスすることで、Outlook内のあらゆるデータを効率的に取得・管理できます。

Namespaceを介してMAPIにアクセスすることで、次のような利点があります。

「MAPI」どんなことができる?
  • 標準化された操作
    • すべてのデータを同じ方法で取得可能。(例:メール、予定表、連絡先など)
  • データ構造の管理
    • フォルダ単位でデータを整理・保存。
  • 柔軟なアクセス
    • 他人の共有フォルダや予定表にもアクセス可能(適切な権限が必要)。

Namespaceの役割と活用例

Namespaceを使用することで、次のような操作が可能になります。

  • デフォルトフォルダへのアクセス
    • 受信トレイ(Inbox)、送信トレイ(Sent Items)、予定表(Calendar)など、Outlookが持つ標準フォルダに直接アクセスできます。
  • 共有フォルダや他人のフォルダへのアクセス
    • 他人が共有しているメールボックスや予定表を操作することも可能です。
  • メールや予定表の管理
    • フォルダ内のデータを取得して、特定の条件で検索したり、加工したりできます。

Namespaceを使うと何が便利?

  • 効率的なアクセス
    Outlookのデータをフォルダ単位で扱えるため、目的のデータに素早くアクセスできます。
    例:「受信トレイのメールを取得したい」「予定表の特定期間のデータを抽出したい」など。
  • 共有データの操作
    Namespaceを介することで、他人の共有フォルダや予定表のデータにもアクセスできます(適切な権限が必要)。
  • 統一された操作方法
    メール、予定表、連絡先など、Outlook内のすべてのデータに同じ方法でアクセスできるため、操作がシンプルになります。

Namespaceの宣言例

以下のコードでNamespaceを取得し、予定表フォルダにアクセスできます。

Dim outlookApp As Outlook.Application
Dim ns As Outlook.Namespace

'// Outlookアプリケーションを取得
Set outlookApp = CreateObject("Outlook.Application")

'// Namespaceを取得
Set ns = outlookApp.GetNamespace("MAPI")
解説
  • GetNamespace("MAPI")
    • OutlookのMAPIデータストアに接続するメソッドです。
      このコードで取得した ns オブジェクトを使い、必要なデータにアクセスします。

他人の共有フォルダへのアクセス

Namespaceを利用すると、他人の共有フォルダにもアクセスできます(適切な権限が必要)。

以下は他人の予定表を取得する例です。

Dim recipient As Outlook.Recipient
Dim sharedCalendar As Outlook.MAPIFolder
Dim email As String

'// 他人のメールアドレスを指定
email = "someone@example.com"

'// 他人の予定表を取得
Set recipient = ns.CreateRecipient(email)
recipient.Resolve ' アドレスが正しいか確認

If recipient.Resolved Then
    Set sharedCalendar = ns.GetSharedDefaultFolder(recipient, olFolderCalendar)
    MsgBox "共有予定表のフォルダ名: " & sharedCalendar.Name
Else
    MsgBox "指定されたメールアドレスのユーザーが見つかりません。"
End If
解説
  • GetNamespace("MAPI") はOutlookデータへのエントリーポイントです。
  • 他人のフォルダにアクセスする場合は適切な権限が必要です。

2. MAPIFolder:Outlookフォルダ操作の基本

MAPIFolder は、Outlookのフォルダ(予定表、受信トレイ、送信済みアイテム、連絡先など)を操作するためのオブジェクトです。

Outlookのデータはフォルダ単位で整理されており、MAPIFolderを使用することで、これらのフォルダやその中のデータにアクセスして管理できます。

特に予定表の操作では、MAPIFolderを利用してスケジュール情報を取得・編集します。
「予定表の特定期間のデータを取得したい」「サブフォルダ内の予定を参照したい」といった場合、MAPIFolderが必須のオブジェクトになります。

デフォルトフォルダの種類

以下の定数を指定することで、Namespaceオブジェクトから目的のフォルダを取得できます。

フォルダ名定数説明
受信トレイolFolderInboxメールの受信トレイ
送信済みアイテムolFolderSentMail送信済みのメール
予定表olFolderCalendarスケジュールが格納されるフォルダ
連絡先olFolderContactsアドレス帳

これらの定数を指定することで、Namespaceオブジェクトから目的のフォルダを簡単に取得できます。

MAPIFolderの基本的な使い方

MAPIFolderの宣言例

以下は、Namespaceを使用して予定表フォルダを取得する例です。

Dim calendarFolder As Outlook.MAPIFolder

'// Namespaceから予定表フォルダを取得
Set calendarFolder = ns.GetDefaultFolder(olFolderCalendar) '// 予定表
解説
  • このコードにより、Namespaceを介してOutlookのデフォルト予定表フォルダにアクセスできるようになります。
    取得した calendarFolder を使って、スケジュールデータを操作します。

サブフォルダを取得する例

予定表にはサブフォルダを作成し、別のプロジェクトやチーム用にスケジュールを管理することがあります。

以下はサブフォルダを取得する例です。

Dim subFolder As Outlook.MAPIFolder

'// サブフォルダを取得
Set subFolder = calendarFolder.Folders("プロジェクトA")
MsgBox "サブフォルダ名: " & subFolder.Name
解説
  • このコードでは、親フォルダ(calendarFolder)の中にある「プロジェクトA」という名前のサブフォルダを取得し、その名前をメッセージボックスに表示します。

3. Items:フォルダ内のアイテムを扱う

Itemsとは?

Itemsオブジェクトは、Outlookフォルダ内に保存されているすべてのアイテム(メール、予定、タスク、連絡先など)を一括で管理するためのオブジェクトです。

たとえば、「予定表フォルダ内の特定の期間に該当する予定を抽出したい」「受信トレイ内の未読メールを取得したい」といった場合、このItemsオブジェクトを活用します。

Itemsオブジェクトを利用することで、フォルダ内のアイテムを1件ずつ確認したり、条件を絞り込んで必要なデータだけを取得することが可能です。

Itemsでできること

Itemsオブジェクトを使えば、以下のような操作が簡単に行えます。

スクロールできます
機能概要
すべてのアイテムを取得フォルダ内のアイテム(メールや予定、タスクなど)をリスト形式で取得。
フィルタリング条件に合致するアイテムだけを抽出。(例:特定期間の予定、未読メールなど)
新しいアイテムの追加フォルダ内に新しいメールや予定を作成して追加。
アイテムのプロパティ操作件名、日時、場所など、各アイテムのプロパティを読み取り・書き込み可能。

Itemsの宣言例

1) フォルダ内のすべてのアイテムを取得
Dim items As Outlook.Items

'// 予定表フォルダ内のアイテムを取得
Set items = calendarFolder.Items
解説
  • このコードでは、MAPIFolderオブジェクトからItemsオブジェクトを取得しています。
    これにより、フォルダ内のすべてのアイテムにアクセスできます。
2) フォルダ内の全アイテムを列挙

フォルダ内のすべてのアイテムを1件ずつ操作したい場合は、For Eachループを使用します。

Dim item As Object

'// すべてのアイテムを列挙
For Each item In items
    Debug.Print item.Subject '// 件名をデバッグウィンドウに出力
Next item
解説
  • このコードでは、予定表やメールの件名を順番にデバッグウィンドウに表示します。
    アイテムの種類によって使用できるプロパティが異なるため、型を確認しながら操作するのがポイントです。
3) 特定の条件でアイテムをフィルタリング

フォルダ内のアイテム数が多い場合、条件に合致するデータだけを取得することで効率的な操作が可能になります。

ItemsオブジェクトのRestrictメソッドを使うと簡単にフィルタリングできます。

Dim filteredItems As Outlook.Items

'// 特定期間の予定を抽出
Set filteredItems = items.Restrict("[Start] >= '2024/01/01' AND [Start] <= '2024/12/31'")
解説
  • このコードでは、指定された期間内に開始される予定だけを取得しています。
    [Start][End]などのプロパティを利用して柔軟な検索が可能です。
    • [Start] プロパティとは?
      • [Start] は、アイテムが開始される日時を示します。
        特に予定表のアイテム(AppointmentItem)では、会議やイベントが始まる日時を取得・操作するために使用されます。
        • 形式
          • 日時(Date型)
            例: 2024/01/01 10:00:00 AM
        • 主な用途
          • 特定の日付や時間以降に開始される予定を検索
          • 開始日時を基準にした並び替え
          • フィルタリング条件の設定(例: 開始日時が一定期間内に収まる予定)
    • [End] プロパティとは?
      • [End] は、アイテムが終了する日時を示します。
        予定表アイテムの終了時間を取得・操作するために使用されます。
        • 形式
          • 日時(Date型)
            例: 2024/01/01 11:00:00 AM
        • 主な用途
          • 特定の日付や時間以前に終了する予定を検索
          • 終了日時を基準にしたフィルタリング
          • 予定の期間を計算(例: Duration = [End] - [Start]
4) 特定の期間内の予定を取得して表示

以下のコードでは、予定表フォルダ内から2024年1月1日~2024年12月31日までの予定を取得し、その件名と開始時刻をデバッグウィンドウに出力します。

Dim appt As Object
Dim filteredItems As Outlook.Items

'// 特定期間内の予定を取得
Set filteredItems = items.Restrict("[Start] >= '2024/01/01' AND [Start] <= '2024/12/31'")

'// 取得した予定を列挙
For Each appt In filteredItems
    If TypeOf appt Is Outlook.AppointmentItem Then
        Debug.Print appt.Subject & " - " & appt.Start
    End If
Next appt
解説
  • このコードを応用すれば、例えば特定の会議だけを抽出したり、指定のキーワードを含む予定を検索したりすることも可能です。

4. AppointmentItem:予定を操作する

AppointmentItemとは?

AppointmentItem は、Outlookの予定表内に記録されている1つ1つの予定を操作するためのオブジェクトです。

これを使用すると、予定の詳細情報(件名、開始日時、終了日時、場所など)を取得・設定できるほか、新しい予定を作成したり、既存の予定を更新したりすることができます。

予定表の操作では、最も重要なオブジェクトの1つであり、効率的なスケジュール管理やカスタムアプリケーションの構築に役立ちます。

AppointmentItemでできること

スクロールできます
機能概要
予定の詳細情報を取得・設定件名、開始日時、終了日時、場所、本文などを取得・変更可能です。
予定の作成・保存・削除新しい予定を作成したり、既存の予定を削除する操作が可能です。
会議の設定会議の招待状を作成し、出席者を管理できます。

AppointmentItemの宣言例

1) 宣言と取得の例

以下は、予定表フォルダ内の最初の予定を取得する例です。

Dim appt As Outlook.AppointmentItem

'// フォルダ内の最初の予定を取得
Set appt = items(1)

'// 予定の詳細を表示
Debug.Print appt.Subject       '// 件名
Debug.Print appt.Start         '// 開始日時
Debug.Print appt.End           '// 終了日時
Debug.Print appt.Location      '// 場所
Debug.Print appt.Body          '// 詳細(本文)
解説
  • items(1) でフォルダ内の最初のアイテムを取得します。
  • フォルダ内にはメールやタスクも含まれる場合があるため、アイテムが AppointmentItem であるか確認するのが安全です。

    If TypeOf appt Is Outlook.AppointmentItem Then
    '// 予定アイテムの場合のみ処理を実行
    End If
スポンサーリンク

Outlookの予定表を取得するための5つのステップ

OutlookをVBAで操作する際、各オブジェクトは明確な役割を持ち、連携しながら動作します。

これらの関係を理解することで、より効率的にOutlookを操作できるようになります。

以下は基本的なオブジェクトの流れです。

STEP
Outlook.Application

→ Outlook全体を操作する基盤を作成します。

STEP
Namespace

→ Outlook内のデフォルトフォルダや他人の共有フォルダにアクセスします。

STEP
MAPIFolder

→ 必要なフォルダ(予定表、受信トレイなど)を選択します。

STEP
Items

→ 選択したフォルダ内のアイテム(予定、メールなど)をリスト形式で取得します。

STEP
AppointmentItem

→ 個別の予定を取得し、件名、日時、場所などの詳細を編集します。

VBAで予定表を取得する際の注意ポイント

Outlookの予定表をVBAで取得する際、いくつかのポイントに注意する必要があります。

これらを事前に確認しておくことで、エラーやトラブルを防ぎ、スムーズな操作が可能になります。

1. Outlookが起動していない

Outlookが起動していない場合、VBAコードの実行時にエラーが発生することがあります。

以下を確認して、問題を解消しましょう。

確認したいこと
  • Outlookアプリケーションが起動しているか確認。
  • 起動していない場合は、VBAコード内でOutlook.Applicationを適切にセットアップ。

対処方法

On Error Resume Next
Set outlookApp = GetObject(, "Outlook.Application")

If outlookApp Is Nothing Then
    Set outlookApp = CreateObject("Outlook.Application")
End If

On Error GoTo 0

このコードを使用すると、Outlookが起動していない場合でも自動的にアプリケーションを起動します。

2. 日付フォーマットが異なる

地域設定や環境によって、日付フォーマット(YYYY/MM/DDやMM/DD/YYYY)が異なることがあります。

これにより、特定の日付範囲で予定を取得する際にエラーが発生する場合があります。

確認したいこと
  • Format 関数を使用して、日付をVBAが正しく認識する形式に変換します。
  • グローバル設定に合わせて、コードを調整することを忘れないでください。

対処方法

Dim startDate As String
Dim endDate As String

startDate = Format(Date, "yyyy/mm/dd")
endDate = Format(Date + 7, "yyyy/mm/dd")

3. Excelのシートがない

データを書き込むExcelシートが存在しない場合、コードがエラーになることがあります。

シート名が正確であることを確認し、必要に応じてシートを自動作成する仕組みを追加しましょう。

確認したいこと
  • 以下のコードでシートを確認し、なければ自動で作成するように設定します。

対処方法

Dim ws As Worksheet
On Error Resume Next

Set ws = ThisWorkbook.Sheets("予定表データ")
If ws Is Nothing Then
    Set ws = ThisWorkbook.Sheets.Add
    ws.Name = "予定表データ"
End If

On Error GoTo 0
スポンサーリンク

VBAで予定表を取得する使用例をご紹介

ここでは、実際にVBAでOutlookを操作するためのコード例を紹介します。

以下に紹介する使用例は、すべてコピペしてすぐに実行できるコードです。
気になる例は、ぜひご覧いただき、実際に実行してみてください。

VBAの基礎から応用までを効率よくしっかり学習したい方には、UdemyのVBA講座もおすすめです。

特に自己学習で進める場合、ビデオや実践例があると理解が進みやすくなります。

多彩な講座から自分に合った講座を探そう!
UdemyでVBAを検索
UdemyでVBAを検索 画像出典:Udemy

\  自分のペースで学べるVBA講座はこちら  /

使用例1: Outlook予定表から特定期間の予定を取得する方法

この記事では、VBAを使用してOutlookの予定表から特定期間の予定を取得し、Excelに一覧表示する方法を紹介します。
※ 取得する日付は、本日 ~ 1週間後までとしています。
  適宜変更してください。

コードは完全に動作する実例として提供し、詳細な解説を行います。

コード例 | 特定期間の予定をExcelに出力

Public Sub ExportOutlookAppointments()
    Dim outlookApp As Outlook.Application
    Dim ns As Outlook.Namespace
    Dim calendarFolder As Outlook.MAPIFolder
    Dim items As Outlook.Items
    Dim filteredItems As Outlook.Items
    Dim appt As Object
    Dim ws As Worksheet
    Dim startDate As String
    Dim endDate As String
    Dim i As Long

    '// 日付範囲を指定
    startDate = Format(Date, "yyyy/mm/dd")      '// 現在の日付
    endDate = Format(Date + 7, "yyyy/mm/dd")    '// 現在から7日後

    '// Outlookアプリケーションのセットアップ
    Set outlookApp = CreateObject("Outlook.Application")
    Set ns = outlookApp.GetNamespace("MAPI")
    Set calendarFolder = ns.GetDefaultFolder(olFolderCalendar)

    '// アイテムを取得し、フィルタリング
    Set items = calendarFolder.Items
    items.Sort "[Start]"
    items.IncludeRecurrences = True
    Set filteredItems = items.Restrict("[Start] >= '" & startDate & "' AND [Start] <= '" & endDate & "'")

    '// Excelシートを準備
    Set ws = ThisWorkbook.Sheets(1)
    ws.Cells.Clear
    ws.Cells(1, 1).Value = "件名"
    ws.Cells(1, 2).Value = "開始日時"
    ws.Cells(1, 3).Value = "終了日時"
    ws.Cells(1, 4).Value = "場所"
    ws.Cells(1, 5).Value = "詳細"

    '// フィルタリング結果をExcelに出力
    i = 2
    For Each appt In filteredItems
        If TypeOf appt Is Outlook.AppointmentItem Then
            ws.Cells(i, 1).Value = appt.Subject
            ws.Cells(i, 2).Value = appt.Start
            ws.Cells(i, 3).Value = appt.End
            ws.Cells(i, 4).Value = appt.Location
            ws.Cells(i, 5).Value = appt.Body
            i = i + 1
        End If
    Next appt

    MsgBox "予定表のデータをExcelに出力しました。", vbInformation

    '// オブジェクトの解放
    Set appt = Nothing
    Set filteredItems = Nothing
    Set items = Nothing
    Set calendarFolder = Nothing
    Set ns = Nothing
    Set outlookApp = Nothing
End Sub

処理結果

使用例1: Outlook予定表から特定期間の予定を取得する方法

コードの動作概要

STEP
Outlookアプリケーションのインスタンスを作成

CreateObject("Outlook.Application") でOutlookを操作可能にします。

STEP
Namespaceを取得し、予定表フォルダを選択

Namespaceを介して予定表フォルダ(Calendar)にアクセスします。

STEP
特定期間の予定をフィルタリング

[Start][End]を基に、指定範囲内の予定だけを抽出します。

STEP
Excelシートに予定を出力

取得した予定データを、Excelのシート1に一覧として表示します。

このコードで使用している機能

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. Public Sub ExportOutlookAppointments()
    • マクロの開始を示します。
      「ExportOutlookAppointments」という名前のマクロを定義しています。
  2. Dim outlookApp As Outlook.Application
    Dim ns As Outlook.Namespace
    Dim calendarFolder As Outlook.MAPIFolder
    Dim items As Outlook.Items
    Dim filteredItems As Outlook.Items
    Dim appt As Object
    Dim ws As Worksheet
    Dim startDate As String
    Dim endDate As String
    Dim i As Long
    • 必要な変数を宣言します。
      • outlookApp : Outlookアプリケーションを操作するための変数
      • ns : Namespaceオブジェクト。Outlookのデータ構造にアクセスします。
      • calendarFolder : 予定表フォルダを表すオブジェクト
      • items : 予定表内のすべてのアイテム
      • filteredItems : 条件でフィルタリングされたアイテム
      • appt : 予定の詳細情報を格納。
      • ws : Excelシートを表す変数。
      • startDate & endDate : 予定を取得する日付範囲を指定。
      • i : Excelシートの行番号を管理。
  3. startDate = Format(Date, “yyyy/mm/dd”)
    endDate = Format(Date + 7, “yyyy/mm/dd”)
    • 現在の日付から1週間分の予定を取得するための範囲を設定します。
  4. Set outlookApp = CreateObject(“Outlook.Application”)
    Set ns = outlookApp.GetNamespace(“MAPI”)
    Set calendarFolder = ns.GetDefaultFolder(olFolderCalendar)
    • OutlookアプリケーションとNamespaceを初期化し、予定表フォルダにアクセスします。
  5. Set items = calendarFolder.Items
    items.Sort “[Start]”
    items.IncludeRecurrences = True
    Set filteredItems = items.Restrict(“[Start] >= ‘” & startDate & “‘ AND [Start] <= ‘” & endDate & “‘”)
    • 予定表内のアイテムを取得。
    • 開始日時で並び替え。
    • 繰り返し予定も含め、指定した日付範囲でフィルタリング。
  6. Set ws = ThisWorkbook.Sheets(1)
    ws.Cells.Clear
    ws.Cells(1, 1).Value = “件名”
    ws.Cells(1, 2).Value = “開始日時”
    ws.Cells(1, 3).Value = “終了日時”
    ws.Cells(1, 4).Value = “場所”
    ws.Cells(1, 5).Value = “詳細”
    • Excelのシートをクリアし、ヘッダーを設定します。
  7. i = 2
    For Each appt In filteredItems

    If TypeOf appt Is Outlook.AppointmentItem Then
    ws.Cells(i, 1).Value = appt.Subject
    ws.Cells(i, 2).Value = appt.Start
    ws.Cells(i, 3).Value = appt.End
    ws.Cells(i, 4).Value = appt.Location
    ws.Cells(i, 5).Value = appt.Body
    i = i + 1
    End If
    Next appt
    • フィルタリングした予定を1件ずつExcelに出力します。
      「If TypeOf appt Is Outlook.AppointmentItem」により、予定アイテムのみ処理します。
  8. MsgBox “予定表のデータをExcelに出力しました。”, vbInformation
    • 完了メッセージを表示します。
  9. Set appt = Nothing
    Set filteredItems = Nothing
    Set items = Nothing
    Set calendarFolder = Nothing
    Set ns = Nothing
    Set outlookApp = Nothing
    • 使用したオブジェクトを解放してメモリを節約します。
  10. End Sub
    • マクロの終了を示します。

総括・ポイント

このコードは、VBAでOutlookの予定表から特定期間のデータを取得し、Excelに出力する具体的な例です。

  • メリット
    • 手動入力の削減と業務効率化。
  • ポイント
    • フィルタリング条件や日付範囲を自由に調整可能。
  • 応用
    • フィルタ条件を変更することで、特定の会議だけを抽出することも可能。

初心者でも安心してカスタマイズできる、わかりやすいコード例です。

使用例2: 特定のキーワードを含む予定を取得

このコードは、Outlook予定表内から「会議」や「ミーティング」など特定のキーワードを含む予定だけを抽出して、Excelに出力するものです。
※ 取得する日付は、本日 ~ 1週間後までとしています。
  適宜変更してください。

会議や特定のイベントを効率的に管理する場合に役立ちます。キーワードを指定するだけで目的の予定が抽出されます。

コード例 | 特定のキーワードを含む予定を取得

Public Sub ExportFilteredAppointmentsByKeyword()
    On Error GoTo ErrorHandler

    Dim outlookApp As Outlook.Application
    Dim ns As Outlook.Namespace
    Dim calendarFolder As Outlook.MAPIFolder
    Dim items As Outlook.Items
    Dim filteredItems As Outlook.Items
    Dim appt As Object
    Dim ws As Worksheet
    Dim i As Long
    Dim keyword As String
    Dim startDate As String
    Dim endDate As String

    '// キーワードを指定
    keyword = InputBox("取得する予定のキーワードを入力してください:", "キーワード指定", "会議")
    If keyword = "" Then
        MsgBox "キーワードが指定されていません。処理を中止します。", vbExclamation
        Exit Sub
    End If

    '// 日付範囲を指定(現在から1か月後)
    startDate = Format(Date, "yyyy-mm-dd")
    endDate = Format(DateAdd("m", 1, Date), "yyyy-mm-dd")

    '// Outlookアプリケーションのセットアップ
    Set outlookApp = CreateObject("Outlook.Application")
    Set ns = outlookApp.GetNamespace("MAPI")
    Set calendarFolder = ns.GetDefaultFolder(olFolderCalendar) ' 参照設定が必要

    '// アイテムを取得し、フィルタリング
    Set items = calendarFolder.Items
    items.Sort "[Start]"
    items.IncludeRecurrences = True
    '// 日付範囲でフィルタリング
    Set filteredItems = items.Restrict("[Start] >= '" & startDate & "' AND [Start] <= '" & endDate & "'")

    '// Excelシートを準備
    Set ws = ThisWorkbook.Sheets(1)
    ws.Cells.Clear
    ws.Cells(1, 1).Value = "件名"
    ws.Cells(1, 2).Value = "開始日時"
    ws.Cells(1, 3).Value = "終了日時"
    ws.Cells(1, 4).Value = "場所"
    ws.Cells(1, 5).Value = "詳細"

    '// キーワードでフィルタリングして出力
    i = 2
    For Each appt In filteredItems
        If TypeOf appt Is Outlook.AppointmentItem Then
            If InStr(1, appt.Subject, keyword, vbTextCompare) > 0 Then
                ws.Cells(i, 1).Value = appt.Subject
                ws.Cells(i, 2).Value = appt.Start
                ws.Cells(i, 3).Value = appt.End
                ws.Cells(i, 4).Value = appt.Location
                ws.Cells(i, 5).Value = appt.Body
                i = i + 1
            End If
        End If
    Next appt

    MsgBox "キーワード「" & keyword & "」を含む予定をExcelに出力しました。", vbInformation

    '// オブジェクトの解放
    Set appt = Nothing
    Set filteredItems = Nothing
    Set items = Nothing
    Set calendarFolder = Nothing
    Set ns = Nothing
    Set outlookApp = Nothing
    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました: " & Err.Description, vbCritical
End Sub

処理結果

使用例2: 特定のキーワードを含む予定を取得

コードの動作概要

STEP
キーワードの指定

キーワードはInputBoxを使用してユーザーから入力します。デフォルト値は「会議」に設定されています。
入力が空白の場合はエラーメッセージを表示し、処理を終了します。

STEP
期間の設定

開始日は今日、終了日は1週間後の日付として設定されます。
日付はFormat関数で「YYYY-MM-DD」形式に変換され、OutlookのRestrictメソッドで利用可能な形式に整えられます。

STEP
Outlookのセットアップ

Outlookのインスタンスを作成し、Namespaceオブジェクトを取得。予定表フォルダ(MAPIFolder)を選択して操作対象を指定します。

STEP
予定表アイテムをフィルタリング

取得したアイテムを期間指定(Restrict)で絞り込み、該当期間の予定だけを対象にします。
IncludeRecurrencesTrueに設定することで、繰り返し予定も取得可能です。

STEP
Excelへの出力準備

指定したExcelシートをクリアし、ヘッダーを設定します。
各列に「件名」「開始日時」「終了日時」などの項目を整然と出力します。

STEP
キーワードでさらに絞り込み

For Eachループを使用して、件名(Subject)にキーワードが含まれる予定だけをExcelに出力します。

STEP
処理結果を通知

メッセージボックスを表示して、完了メッセージをユーザーに知らせます。

このコードで使用している機能

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. Public Sub ExportFilteredAppointmentsByKeyword()
    • マクロの開始を示します。
      「ExportFilteredAppointmentsByKeyword」という名前のマクロを定義しています。
  2. Dim outlookApp As Outlook.Application
    Dim ns As Outlook.Namespace
    Dim calendarFolder As Outlook.MAPIFolder
    Dim items As Outlook.Items
    Dim filteredItems As Outlook.Items
    Dim appt As Object
    Dim ws As Worksheet
    Dim i As Long
    Dim keyword As String
    Dim startDate As String
    Dim endDate As String
    • 必要な変数を宣言します。
      • outlookApp : Outlookアプリケーションを操作するための変数。
      • ns : Namespaceオブジェクトで、Outlook内のデータ構造を表します。
      • calendarFolder : Outlook予定表フォルダを表す変数。
      • items : 予定表内のすべてのアイテムを管理するオブジェクト。
      • filteredItems : 条件を指定して絞り込んだアイテムを格納します。
      • appt : 個々の予定を表すオブジェクト。
      • ws : Excelシートを操作するための変数。
      • i : 出力する行を管理するためのカウンタ変数。
      • keyword : 検索条件となるキーワードを格納。
      • startDate / endDate : 予定を抽出する期間の開始日と終了日を表します。
  3. keyword = InputBox(“取得する予定のキーワードを入力してください:”, “キーワード指定”, “会議”)
    If keyword = “” Then
    MsgBox “キーワードが指定されていません。処理を中止します。”, vbExclamation
    Exit Sub
    End If
    • ユーザーにキーワードを入力させます。
      • InputBox : ユーザーからキーワードを入力してもらいます。
      • デフォルト値は「会議」です。
      • キーワードが空の場合は警告を表示し、処理を中止します。
  4. startDate = Format(Date, “yyyy-mm-dd”)
    endDate = Format(DateAdd(“ww”, 1, Date), “yyyy-mm-dd”)
    • startDate : 今日の日付を表します。
    • endDate : 今日から1週間後の日付を計算し、範囲の終了日として設定します。
    • Format関数を使用して日付を「YYYY-MM-DD」形式に整えています。
  5. Set outlookApp = CreateObject(“Outlook.Application”)
    Set ns = outlookApp.GetNamespace(“MAPI”)
    Set calendarFolder = ns.GetDefaultFolder(olFolderCalendar)
    • Outlookアプリケーションと「Namespace」を初期化し、予定表フォルダにアクセスします。
      • CreateObject(“Outlook.Application”)
        • Outlookアプリケーションを起動します。
      • GetNamespace(“MAPI”)
        • 「Namespace」を取得し、Outlookデータ構造にアクセスします。
      • GetDefaultFolder(olFolderCalendar)
        • 予定表フォルダを取得します。
  6. Set items = calendarFolder.Items
    items.Sort “[Start]”
    items.IncludeRecurrences = True

    Set filteredItems = items.Restrict(“[Start] >= ‘” & startDate & “‘ AND [Start] <= ‘” & endDate & “‘”)
    • 予定表内のすべてのアイテムを取得します。
      • items.Sort “[Start]”
        • 開始日時で予定を並び替えます。
      • items.IncludeRecurrences = True
        • 繰り返し予定を含めて取得します。
      • Restrict
        • 指定した期間内の予定だけを取得します。
  7. Set ws = ThisWorkbook.Sheets(1)
    ws.Cells.Clear
    ws.Cells(1, 1).Value = “件名”
    ws.Cells(1, 2).Value = “開始日時”
    ws.Cells(1, 3).Value = “終了日時”
    ws.Cells(1, 4).Value = “場所”
    ws.Cells(1, 5).Value = “詳細”
    • Excelシートをクリアし、ヘッダーを設定します。
      各列に「件名」「開始日時」などのヘッダーを設定します。
      • ws.Cells.Clear
        • シートの内容を初期化します。
  8. i = 2
    For Each appt In filteredItems
    If TypeOf appt Is Outlook.AppointmentItem Then
    If InStr(1, appt.Subject, keyword, vbTextCompare) > 0 Then
    ws.Cells(i, 1).Value = appt.Subject
    ws.Cells(i, 2).Value = appt.Start
    ws.Cells(i, 3).Value = appt.End
    ws.Cells(i, 4).Value = appt.Location
    ws.Cells(i, 5).Value = appt.Body
    i = i + 1
    End If
    End If
    Next appt
    • 取得した予定を1件ずつ確認し、キーワードを含む予定をExcelに出力します。
      該当する予定の情報(件名、日時、場所、詳細)をExcelシートに出力します。
      • TypeOf appt Is Outlook.AppointmentItem
        • アイテムが予定アイテム(AppointmentItem)であるか確認。
      • InStr(1, appt.Subject, keyword, vbTextCompare)
        • 件名にキーワードが含まれるかを確認。
  9. MsgBox “キーワード「” & keyword & “」を含む予定をExcelに出力しました。”, vbInformation
    • 処理の完了をメッセージボックスで通知します。
  10. Set appt = Nothing
    Set filteredItems = Nothing

    Set calendarFolder = Nothing
    Set ns = Nothing
    Set outlookApp = Nothing
    • 使用したオブジェクトを解放し、メモリを節約します。
  11. End Sub
    • マクロの終了を示します。

総括・ポイント

このコードは、Outlookの予定表から「特定のキーワードを含む予定」を抽出し、Excelに出力する便利なマクロです。
キーワードを使ったフィルタリングによって、膨大な予定データから必要な情報だけを効率的に取り出せるため、業務の効率化や分析に役立ちます。

Excelへの出力部分では、データを整然とした形式で保存するため、レポート作成や共有もスムーズに行えます。
また、初心者でもコピペしてすぐに実行できる構造なので、OutlookとExcelの連携を試してみたい方に最適です。

  • プロジェクト管理
    • 特定のプロジェクト名が含まれる会議やイベントを抽出して管理。
  • 業務レポート
    • 必要な予定だけを抽出してレポート形式で共有。
  • スケジュール分析
    • どのような予定が多いか、特定の期間に偏りがあるかなどの分析に活用。

使用例3: 選択したシートの予定をOutlookに登録(重複確認付き)

Excelに記載された予定データを基に、Outlook予定表に自動的に登録するマクロです。
※必要なエクセルフォーマットは「処理結果」を参照ください。

このコードには 既存の予定と重複を確認 する処理を追加しています。
同じ予定が登録されるのを防ぐことで、予定表が整理された状態を維持できます。

Excelで予定を整理し、ワンクリックでOutlook予定表に反映させたい場合に非常に便利です。

コード例 | 選択したシートの予定をOutlookに登録

Public Sub AddAppointmentsFromExcel()
    Dim outlookApp As Outlook.Application
    Dim ns As Outlook.Namespace
    Dim calendarFolder As Outlook.MAPIFolder
    Dim items As Outlook.Items
    Dim newAppt As Outlook.AppointmentItem
    Dim existingAppt As Object
    Dim ws As Worksheet
    Dim i As Long
    Dim isDuplicate As Boolean
    
    '// Excelシートの設定
    Set ws = ThisWorkbook.Sheets(1)
    
    '// Outlookアプリケーションのセットアップ
    Set outlookApp = CreateObject("Outlook.Application")
    Set ns = outlookApp.GetNamespace("MAPI")
    Set calendarFolder = ns.GetDefaultFolder(olFolderCalendar)
    Set items = calendarFolder.Items
    
    '// シート内のデータをOutlook予定表に登録
    i = 2
    Do While ws.Cells(i, 1).Value <> ""
        '// 重複チェックフラグを初期化
        isDuplicate = False
        
        '// 予定表内のアイテムを確認
        For Each existingAppt In items
            If TypeOf existingAppt Is Outlook.AppointmentItem Then
                If existingAppt.Subject = ws.Cells(i, 1).Value And _
                   existingAppt.Start = ws.Cells(i, 2).Value And _
                   existingAppt.End = ws.Cells(i, 3).Value Then
                    isDuplicate = True
                    Exit For
                End If
            End If
        Next existingAppt
        
        '// 重複がない場合のみ登録
        If Not isDuplicate Then
            Set newAppt = calendarFolder.Items.Add(olAppointmentItem)
            With newAppt
                .Subject = ws.Cells(i, 1).Value
                .Start = ws.Cells(i, 2).Value
                .End = ws.Cells(i, 3).Value
                .Location = ws.Cells(i, 4).Value
                .Body = ws.Cells(i, 5).Value
                .Save
            End With
        End If
        
        i = i + 1
    Loop
    
    MsgBox "ExcelのデータをOutlook予定表に登録しました(重複除外)。", vbInformation
    
    '// オブジェクトの解放
    Set newAppt = Nothing
    Set items = Nothing
    Set calendarFolder = Nothing
    Set ns = Nothing
    Set outlookApp = Nothing
End Sub

処理結果

使用例3: 選択したシートの予定をOutlookに登録(重複確認付き)

コードの動作概要

STEP
Excelのデータを準備

Excelシートの1列目に「件名」、2列目に「開始日時」、3列目に「終了日時」、4列目に「場所」、5列目に「詳細」を入力しておきます。

STEP
Outlookアプリケーションのセットアップ

OutlookアプリケーションとNamespaceをセットアップし、予定表フォルダにアクセスします。

STEP
重複チェック

現在の予定表に同じ件名、開始日時、終了日時の予定があるかを確認します。

STEP
予定の登録

重複がない場合のみ、新しい予定を登録します。

STEP
登録完了メッセージの表示

処理が終了すると、登録完了を知らせるメッセージが表示されます。

このコードで使用している機能

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. Public Sub AddAppointmentsFromExcel()
    • マクロの開始を示します。
      「AddAppointmentsFromExcel」という名前のサブプロシージャです。
  2. Dim outlookApp As Outlook.Application
    Dim ns As Outlook.Namespace
    Dim calendarFolder As Outlook.MAPIFolder
    Dim items As Outlook.Items
    Dim newAppt As Outlook.AppointmentItem
    Dim existingAppt As Object
    Dim ws As Worksheet
    Dim i As Long
    Dim isDuplicate As Boolean
    • isDuplicate: 重複を確認するためのフラグ
  3. Set ws = ThisWorkbook.Sheets(1)
    • 現在のブック内の1枚目のシートを操作対象に設定します。
  4. Set outlookApp = CreateObject(“Outlook.Application”)
    Set ns = outlookApp.GetNamespace(“MAPI”)
    Set calendarFolder = ns.GetDefaultFolder(olFolderCalendar)
    Set items = calendarFolder.Items
    • Outlookアプリケーションと「Namespace」をセットアップし、予定表フォルダにアクセスします。
  5. i = 2
    Do While ws.Cells(i, 1).Value <> “”
    isDuplicate = False
    • Excelの2行目からデータをループ処理し、件名が空でない限り続行します。
  6. For Each existingAppt In items
    If TypeOf existingAppt Is Outlook.AppointmentItem Then
    If existingAppt.Subject = ws.Cells(i, 1).Value And _
    existingAppt.Start = ws.Cells(i, 2).Value And _
    existingAppt.End = ws.Cells(i, 3).Value Then
    isDuplicate = True
    Exit For
    End If
    End If
    Next existingAppt
    • 予定表内のアイテムをループして、同じ件名・開始日時・終了日時の予定が存在するかを確認します。
  7. if Not isDuplicate Then
    Set newAppt = calendarFolder.Items.Add(olAppointmentItem)
    With newAppt
    .Subject = ws.Cells(i, 1).Value
    .Start = ws.Cells(i, 2).Value
    .End = ws.Cells(i, 3).Value
    .Location = ws.Cells(i, 4).Value
    .Body = ws.Cells(i, 5).Value
    .Save
    End With
    End If i = i + 1
    Loop
    • 重複がない場合のみ、新しい予定を登録します。
  8. MsgBox “ExcelのデータをOutlook予定表に登録しました(重複除外)。”, vbInformation
    • 処理が完了したことを通知します。
  9. Set newAppt = Nothing
    Set items = Nothing
    Set calendarFolder = Nothing
    Set ns = Nothing
    Set outlookApp = Nothing
    • 使用したオブジェクトを解放し、メモリを節約します。
  10. End Sub
    • マクロの終了を示します。

総括・ポイント

このコードは、Outlookの予定表から「特定のキーワードを含む予定」を抽出し、Excelに出力する ための便利なマクロです。
キーワードを使ったフィルタリングによって、大量の予定データから必要な情報だけを効率的に取り出せます。
業務効率化やデータ分析をサポートするツールとして活用できます。

Excelに出力されたデータは整然とした形式で保存されるため、レポート作成や他部門との共有がスムーズに行えるのも特徴です。
さらに、コードは初心者でもコピペして実行可能な構造になっており、OutlookとExcelの連携を簡単に体験できます。

  • プロジェクト管理
    • 特定のプロジェクト名が含まれる会議やイベントを効率的に抽出して管理。
    • 複数のプロジェクトにまたがるスケジュールの整理に最適。
  • 業務レポート
    • 抽出した予定をExcel形式で出力し、レポートとして共有。
    • 定期的な会議やタスクの進捗確認にも役立ちます。
  • スケジュール分析
    • 特定のキーワードが含まれる予定がどの期間に集中しているかを確認。
    • リソースの過不足や効率の改善ポイントを把握できます。
スポンサーリンク

この記事のまとめ

この記事では、VBAを使用してOutlookのメール作成・送信を自動化する方法を解説しました。

初心者から応用まで学べるよう、実際の使用例を交えながら丁寧に説明しています。

ポイントのおさらい

さらに学ぶために

Outlookの予定表をExcelで操作することで、以下のような業務効率化が実現します。

ぜひ、この記事を参考にOutlookとExcelの連携に挑戦してみてください!

効率化できること
  • 会議調整の効率化
    • チームメンバーの空き時間をExcelにまとめて視覚化。
  • データの加工・分析
    • 予定データを加工して、会議の頻度やリソース配分を分析。
  • スケジュールの可視化
    • チーム全体の稼働状況を把握し、タスク管理を最適化。
あわせて読みたい
サイトマップ このページは、本サイトの記事を分かりやすくまとめました。ぜひご覧ください。 目次 「VBA」を見る 「Officeスクリプト」を見る 「ワークシート関数」を見る 「Python...
スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次