Outlook の予定表を CSV ファイルにエクスポートするマクロ


Outlook のエクスポートを使えば、予定表を CSV ファイルにエクスポートできますが、定期的にエクスポートを実施したいような場合、毎回エクスポート ウィザードを使うのはわずらわしいと感じる方もいるかもしれません。

そこで、以下のようなマクロを作ってみました。このマクロは今月の予定を C:\thismonth.csv に保存するというものです。保存先などを変更してツールバーにマクロを登録しておけば、ワンクリックでエクスポートできるようになります。 


' 今月の予定をエクスポートするマクロ
' ここをトリプル クリックするとマクロ全体が選択できます。
Public Sub ExportThisMonthCalendar()
    Dim dtExport As Date
    Dim strStart As String
    Dim strEnd As String
    Dim objFSO 'As FileSystemObject
    Dim stmCSVFile 'As TextStream
    Const CSV_FILE_NAME = "c:\thismonth.csv" '' エクスポートするファイル名を指定してください。
    Dim colAppts As Items
    Dim objAppt 'As AppointmentItem
    Dim strLine As String
    dtExport = Now ' 来月の予定をエクスポートする場合は Now の代わりに DateAdd("m",1,Now) を使用します。
    ' 月単位ではなく任意の単位にする場合は以下の記述を変更します。
    strStart = Year(Now) & "/" & Month(Now) & "/1 00:00"
    ' エクスポートする範囲の最後の日の次の日を strEnd に指定します。
    strEnd = DateAdd("m", 1, CDate(strStart)) & " 00:00"
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set stmCSVFile = objFSO.CreateTextFile(CSV_FILE_NAME, True)
    ' CSV ファイルのヘッダです。出力するフィールドを増減する場合はこちらも変更してください。
    stmCSVFile.WriteLine """件名"",""場所"",""開始日時"",""終了日時"",""分類項目"",""主催者"",""必須出席者"",""任意出席者"""
    Set colAppts = Application.Session.GetDefaultFolder(olFolderCalendar).Items
    colAppts.Sort "[Start]"
    colAppts.IncludeRecurrences = True
    Set objAppt = colAppts.Find("[Start] < """ & strEnd & """ AND [End] >= """ & strStart & """")
    While Not objAppt Is Nothing
        strLine = """" & objAppt.Subject & _
            """,""" & objAppt.Location & _
            """,""" & objAppt.Start & _
            """,""" & objAppt.End & _
            """,""" & objAppt.Categories & _
            """,""" & objAppt.Organizer & _
            """,""" & objAppt.RequiredAttendees & _
            """,""" & objAppt.OptionalAttendees & _
            """"
        stmCSVFile.WriteLine strLine
        Set objAppt = colAppts.FindNext
    Wend
    stmCSVFile.Close
End Sub


マクロの登録方法やメニューへの追加について

Outlook の予定表を CSV ファイルにエクスポートするマクロ」への27件のフィードバック

  1. VBA初心者です。
    まさにこのマクロを使いたくて、今、読み解いているのですが、
    Dim colAppts As Items
    が何を意味するのかわからなくて悩んでいます。
    Itemsって具体的にどういうものなんでしょうか?

    • Items はアイテムの集まりを意味します。
      このマクロでは予定表のアイテムを CSV にエクスポートしているわけですが、そのアイテム全体を Items として定義しているのです。

  2. ありがとうございます。
    Itemsはユーザ定義型になるのでしょうか。
    であれば、自分で定義しないとだめなんですよね。
    (実際に実行してみるとユーザ定義型は定義されていません」と出ました。「Microsoft Scripting Rumtime」にチェックを入れてもメッセージが出るので、独自に定義しないとダメなのかなと思った次第です)

  3. 初心者で申し訳ありません。

    代理人権限が付与されている他の人の予定をCSVダウンロードするには、どうしたらよいでしょうか?

    • 上記のマクロの下記のコードを変更し、ほかの人の予定表を開いた状態でマクロを実行してください。

      変更前:
      Set colAppts = Application.Session.GetDefaultFolder(olFolderCalendar).Items

      変更後:
      Set colAppts = ActiveExplorer.CurrentFolder.Items

  4. 予定表ではなく、受信トレイと送信済アイテムを自動(マクロで一発ボタンを配置したい)でバックアップしたいのですが
    このスクリプトを編集すれば可能でしょうか?

    現在、以下の作業を毎回手動で行っており非常に不便を感じています。
    どこを変更すればよいか御指南ください。

    OUTLOOK 2003で下記、一連の作業をマクロ化したい。
    —————————————-
    1) ファイル

    2) インポートとエクスポート
      (インポート/エクスポート ウィザード)

    3) ファイルへエクスポート

    4) 個人用フォルダ ファイル(.pst)

    5) 個人用フォルダのエクスポート
       ①受信トレイ
       ②送信済アイテム
       いずれもサブフォルダを含む

    6) 重複したらエクスポートしない

    完了
    —————————————-

      • 早速の回答ありがとうございます!
        アドインのご紹介ありがとうございました。
        便利なアドインが他にもたくさんありそうですね。
        勉強不足でした(^-^;)

        ご紹介頂いたアドインを活用してみます!!

        予定表のcsvエクスポートも使わせて頂きます♪
        またご相談することがあるかもしれませんが
        今後ともよろしくお願い致します。

      • 度々失礼致します。

        ご紹介頂いたアドインはpstファイルそのものの定期的バックアップでした(^-^;)

        私がやりたかったのは、サーバー上の受信トレイや送信済のメールをローカル(個人フォルダ/pst)へバックアップする作業です。

        該当するアドインがあるか、探してみます!

      • なるほど。Exchange サーバー上のメールを PST にバックアップするのですね。
        本来であればサーバー上で一括バックアップが望ましいと思うのですが…
        マクロでできるかどうか検討してみます。

  5. こんにちは!
    お手数をお掛けして申し訳ありません。

    Excelのように操作の記録が出来れば非常に簡単なことなのですが・・・(^-^;)
    よろしくお願い致します。

  6. […] 以前、「Outlook の予定表を CSV ファイルにエクスポートするマクロ」や「Exchange 環境で共有されている他人の予定表のデータを取得するマクロ」として、予定表を CSV ファイルに出力するマクロを公開していたのですが、開始日時や終了日時を日付と時間に分けて出力する方法についてのご質問をいただきました。 […]

  7. outlook 2003 をXPで使っていましたが、このほど7へ移行しました。すると、予定表のファイル(カンマ区切りのCSV)へのexportが動かなくなりました。Outlook(pst)形式でもエキスポートは実行できますが、ExcelやAccess形式では動きません。
    本記事のマクロでCSVファイルへの出力を試みましたが、予定表の項目としてobjAppt.Startはサポートされていますが、
    yyyy/mm/ddまでは出力されますが時刻はサポートされていません。ヘルプで調べて移動表項目のプロパーティ名から推測してobjAppt.StartTimeを試みましたがサポートされていないとコンパイルエラーが出ます。他にもEndTime、Duration、ReminderSetなどがサポートされていないようです。また、記事の部分はどうしても出力したいのですが項目名が分かりません。

    どうぞ回答・コメント、よろしくお願いします。

    • objAppt.Start は日付だけでなく時刻も含んでいるはずです。
      CSV ファイルの内容はどのようにして確認されたのでしょうか?
      もし、Excel などで開いているのであれば、メモ帳で開いたときに時刻が含まれていませんか?

    • 7.への回答有り難うございました。予定表のプロッパーティ objAppt.Start に時刻もちゃんと含まれていました。全くのうっかりミスでした。
      お手を取り申し訳ありません。しかしながら、予定表の個別項目に最も大きなスペースを使って示される「記事」欄を出力したいのですがプロパーティ名が分かりません。helpでそれらしき項目名を指定してみてもサポートしていないとのメッセージが帰ってきます。ご教示下さい。

      • 自己レスポンスです。「記事」の部分のプロップパーティ名は”Body”でした。本欄のメールに関するマクロを読んでいて発見しました。実は、VBのOUTLOOKに関するマニュアルが手元に無いためにHelpを頼りにしていたのですが、「予定表項目」で検索しても”body”は出てこなかったのでした。お騒がせ致しました。

  8. こちらを開始~終了日時指定にするため、このように付け足したのですが、

      strStart = InputBox(“YYYY/MM/DDの形式にて入力してください”, “検索開始日”) & ” 00:00″
    strEnd = InputBox(“YYYY/MM/DDの形式にて入力してください”, “検索終了日”) & ” 00:00″

    これプラス、件名の中のキーワードを検索できる記述はありませんでしょうか・・・?
    できれば、OR AND検索ができると望ましいですが、ひとつのWORDでも構いません。

    • たとえば、特定のキーワードを含む予定だけをエクスポートするなら、
      stmCSVFile.WriteLine strLine
      という行を以下のようにすればよいでしょう。
      If objAppt.Subject Like “*キーワード*” Then stmCSVFile.WriteLine strLine
      これをAND検索にしたければ、
      If objAppt.Subject Like “*キーワード1*” And objAppt.Subject Like “*キーワード2*” Then stmCSVFile.WriteLine strLine
      ですし、OR検索したければ、
      If objAppt.Subject Like “*キーワード1*” Or objAppt.Subject Like “*キーワード2*” Then stmCSVFile.WriteLine strLine
      となります。

  9. いつもお世話になってます。
    csvファイルではなく、icsファイルとして吐き出したいと考えているのですが、可能でしょうか?

  10. stmCSVFile.WriteLine strLine
    の部分でエラーがでてしまうのですが、どういったことが考えられますか??

    別途ご紹介いただいている、他の方の予定を書き出すマクロではこのエラーは起こりません。
    ただ、自分のアカウント名をいれると、こちらのマクロを実行した際と同様
    stmCSVFile.WriteLine strLine の部分でエラーになります。

    実行時エラー5
    プロシージャの呼び出し、または引数が不正です。 というエラーです。

    • おそらく本文に日本語のコードページであるShift-JISには含まれない文字があるものと思われます。
      以下の変更で対処可能です。

      ・ Set stmCSVFile = objFSO.CreateTextFile(CSV_FILE_NAME, True) を Open CSV_FILE_NAME For Output As #1 に置き換える。

      ・ stmCSVFile.WriteLine を Print #1, に置き換える
      例:
      stmCSVFile.WriteLine “””件名””,””場所””,””開始日時””,””終了日時””,””分類項目””,””主催者””,””必須出席者””,””任意出席者”””

      Print #1, “””件名””,””場所””,””開始日時””,””終了日時””,””分類項目””,””主催者””,””必須出席者””,””任意出席者”””
      とする。

      ・stmCSVFile.Close を Close #1 に置き換える。

  11. お返事ありがとうございます!解決しました!!

    日程の設定のところを、INPUTBOXで指定するようにしているのですが、
    strStart = InputBox(“開始日を入力してください(YYYY/MM/DD形式にて)”) & “00:00”
    strEnd = InputBox(“終了日を入力してください(YYYY/MM/DD形式にて)”) & “23:59”

    この00:00と23:59というものをつけると、「終日」で入っている予定しか拾ってこず、
    時間をいれないと、終了日の9:00くらいまでの予定しかひろってきません・・・。

    開始日の0:00から、終了日の23:59までのものを拾ってくるようにするには、どうしたらいいのでしょうか・・・?

    • & “00:00″ となっていますが、” 00:00″ というように 00 の前に空白が必要です。
      そうでないと、たとえば 2014/01/01 とユーザーが入力した場合に 2014/01/0100:00 というような不正なデータになります。

  12. […] 以前、「Outlook の予定表を CSV ファイルにエクスポートするマクロ」や「Exchange 環境で共有されている他人の予定表のデータを取得するマクロ」として、予定表を CSV ファイルに出力するマクロを公開していたのですが、開始日時や終了日時を日付と時間に分けて出力する方法についてのご質問をいただきました。 […]

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中