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


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

そこで、以前公開したバージョンの改訂版として開始日時を日付と時間に分けたものを作成しました。

以下がそのマクロです。ExportMyCalendar は自分の予定を、ExportOthersCalendar は Exchange 環境で共有されている他人の予定を CSV に出力するマクロです。

'ここをトリプル クリックするとマクロ全体が選択できます。
'  自分の予定表を出力するマクロ
Public Sub ExportMyCalendar()
    Const MY_CSV_FILE_NAME = "c:\mycalendar.csv" ' エクスポートするファイル名を指定してください。
    Dim fldCalendar ' As Folder
    Set fldCalendar = Application.Session.GetDefaultFolder(olFolderCalendar)
    ExportThisMonth fldCalendar, MY_CSV_FILE_NAME
End Sub
'  他人の予定を出力するマクロ
Public Sub ExportOthersCalendar()
    Const OTHERS_CSV_FILE_NAME = "c:\others.csv" ' エクスポートするファイル名を指定してください。
    Dim strUserName As String
    Dim objRecip As Recipient
    Dim fldCalendar 'As Folder
    strUserName = InputBox("ユーザー名またはアドレスを入力してください", "共有されている予定表のエクスポート")
    Set objRecip = Application.Session.CreateRecipient(strUserName)
    objRecip.Resolve
    If Not objRecip.Resolved Then
        MsgBox "ユーザーが特定できませんでした。", vbCritical, "共有されている予定表のエクスポート"
        Exit Sub
    End If
    Set fldCalendar = Application.Session.GetSharedDefaultFolder(objRecip, olFolderCalendar)
    ExportThisMonth fldCalendar, OTHERS_CSV_FILE_NAME
End Sub
'  共通ルーチンです。必ずこちらもコピーしてください。
Public Sub ExportThisMonth( fldCalendar, strFileName As String )
    Dim strStart As String
    Dim strEnd As String
    Dim dtExport As Date
    Dim objFSO 'As FileSystemObject
    Dim stmCSVFile 'As TextStream
    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 = DateAdd("m", 1, CDate(strStart)) & " 00:00"
    '
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set stmCSVFile = objFSO.CreateTextFile(strFileName, True)
    ' CSV ファイルのヘッダです。出力するフィールドを増減する場合はこちらも変更してください。
    stmCSVFile.WriteLine """件名"",""場所"",""開始日"",""開始時刻"",""終了日"",""終了時刻"",""分類項目"",""主催者"",""必須出席者"",""任意出席者"""
    Set colAppts = fldCalendar.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 & _
            """,""" & FormatDateTime(objAppt.Start, vbShortDate) & _
            """,""" & FormatDateTime(objAppt.Start, vbShortTime) & _
            """,""" & FormatDateTime(objAppt.End, vbShortDate) & _
            """,""" & FormatDateTime(objAppt.End, vbShortTime) & _
            """,""" & objAppt.Categories & _
            """,""" & objAppt.Organizer & _
            """,""" & objAppt.RequiredAttendees & _
            """,""" & objAppt.OptionalAttendees & _
            """"
'
       stmCSVFile.WriteLine strLine
        Set objAppt = colAppts.FindNext
    Wend
    stmCSVFile.Close
End Sub

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

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

  1. こんにちは。予定表をエクスポートする目的が、GoogleCalendarへの取り込みであれば、iCalendar形式で書きだすのが簡単です。

    Sub ExportCalendar()

    Dim oNamespace As NameSpace
    Dim oFolder As Folder
    Dim oCalendarSharing As CalendarSharing

    ‘ 条件設定部

    Const mySaveFolder As String = “D:\Documents and Settings\myname\My Documents\”
    ‘エクスポートしたファイルの保存先
    ‘icsファイルの名前は000.icsで決め打ち(Google Calendarにインポートするときすぐ見つけやすい名前)
    Const myEndPeriod As Integer = 3
    ‘今日からmyEndPeriodヶ月後までの予定をエクスポート

    ‘ 予定表の既定のフォルダへの参照を取得します。
    Set oNamespace = Application.GetNamespace(“MAPI”)
    Set oFolder = oNamespace.GetDefaultFolder(olFolderCalendar)

    ‘ 予定表の既定のフォルダの CalendarSharing オブジェクトを取得します。
    Set oCalendarSharing = oFolder.GetCalendarExporter

    ‘ 添付ファイルやプライベートなアイテムを含めて、
    ‘ 予定表フォルダの内容今日以降設定された月までを詳細にエクスポートするように
    ‘ CalendarSharing オブジェクトを設定します。
    With oCalendarSharing
    .CalendarDetail = olFullDetails
    .IncludePrivateDetails = True
    .StartDate = Now
    .EndDate = DateAdd(“m”, myEndPeriod, Now)
    ‘〇日後までをエクスポートしたければDateAdd(“d”, myEndPeriod, Now)
    End With

    ‘ 予定表を iCalendar 予定表 (000.ics) ファイルにエクスポートします。
    oCalendarSharing.SaveAsICal mySaveFolder & “000.ics”

    Set oCalendarSharing = Nothing
    Set oFolder = Nothing
    Set oNamespace = Nothing

    End Sub

    あとはGoogleCalendarで000.icsを指定してインポートするだけ。
    ちなみに、上記のコードはOutlook2007のマクロヘルプに出ていたものに、少しだけ手を入れたものです。

  2. 上記をコピペして処理しようとしたところ、実行時エラー70(書き込みできません)と出てしまいました。デジタル署名も作成し、OUTLOOKも再起動してから記入したのですが。

    • サンプルのエクスポート先のファイル名が C: ドライブ直下なのですが、それが原因かもしれません。
      書き込みできるフォルダーのパスに変更してお試しください。

  3. はじめまして。上記マクロで質問です。
    先月(2012年12月)の時点で似たようなマクロを実施したものが、今月はできませんでした。
    strStart = Year(Now) & “/” & Month(Now) & “/1 00:00”
    の部分が今年(2013年)のデータのみを抽出するよう設定しているのかと思い、いろいろ試しましたが、先月以前のデータが出せない状態です。
    アドバイスいただけますでしょうか?

  4. 以前(3ヶ月前)の予定表をエクスポートする場合はdtExport = Now を dtExport = DateAdd(“m”,-3,Now) に変更してみましたが、当月分しか取れません。

  5. はじめまして。このマクロで質問です。当月分の予定がすべて書き出される仕様だと思うのですが、なぜか2日分くらいしかエクスポートできません。原因が推測できれば、お手数をおかけしますがご教示いただけると助かります。(ちなみに、翌月をエクスポートするとなぜか全て書き出されます)
    環境はMicrosoft Outlook 2010(Win7/32bit)です。

  6. はじめまして。宜しくお願いします。
    OUTLOOKの予定表をCSVにエクスポートする件、大変便利に使わせてもらってます。
    これにユーザー定義フィールド”収入”、”支出”を付加したデータとしてエクスポートしたいのですが、
    上手くいきません。
    教えていただけると助かります。

  7. Outlookの予定データを日報管理として
    Accessかexcelにインポートして活用したいと考えています。

    各個人でExportする事を前提として
    以下の文章(一部ここでは省略)を除いて
    ThisOutlookSessionにコピペしマクロ登録致しました。

    ‘ 他人の予定を出力するマクロ
    Public Sub ExportOthersCalendar()
    中略
    End Sub

    デジタル署名の作成、OUTLOOKも再起動しマクロを実行
    画面ではなんの変化もなく一瞬不安になりましたが、
    エクスポート先のファイル名とされている C: ドライブ直下を確認すると
    mycalendar.csv が作成されていた。
    中身を確認すると当月の予定がExportされていました。

    以下の点を変更したいのですが…。

    Q1:日単位や週単位としたい場合はどのようにすればよいのでしょうか?
    マクロの文章に以下の説明があるのですが…
    dtExport = Now ‘ 来月の予定をエクスポートする場合は Now の代わりに DateAdd(“m”,1,Now) を使用します。
    ‘ 月単位ではなく任意の単位にする場合は以下の記述を変更します。
    strStart = Year(Now) & “/” & Month(Now) & “/1 00:00”
    strEnd = DateAdd(“m”, 1, CDate(strStart)) & ” 00:00″

    DateAdd 関数を調べてみました。m=月、d=日、ww=週が引数 interval の設定値のようです。

    本日の予定をエクスポートしたい場合
    “m”を”d”と変更することでよいのでしょうか?

    dtExport = Now

    dtExport = DateAdd(“d”,-1,Now)

    上記部分のみの変更では当月の予定がExportされます。
    下記部分も追加変更しましたが、
    本日(2016/11/17)ではなく201611/01のデータがExportされました。

    strEnd = DateAdd(“m”, 1, CDate(strStart)) & ” 00:00″

    strEnd = DateAdd(“d”, 1, CDate(strStart)) & ” 00:00″

    私の力ではこれ以上は無理です。
    本日、昨日、先週の条件でエクスポートするにはどのように変更すればよいのでしょうか?

    質問2:日付のデータの形式について
    Exportされた日付データは 2016/11/17 (木) という曜日まで表示されている形式です。
    2016/11/17のような 曜日を含まない形式でのExportはできないでしょうか?

    どうかご指南頂ければ幸いです。
    よろしくお願い申し上げます。

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中