タスクやTODOの管理にOutlookのタスク機能をよく利用しています。基本的には自分専用なのですが、ごくまれに人に見せる機会があります。このようなときはExcelファイルにエクスポートしてやると取り回しが良く便利です。
そういうわけで「Outlookのタスク機能からタスク一覧をエクスポートするVBA」を作りました。せっかくなのでQiitaにお焚き上げしておきたいと思います。
まず前提として、VBAからOutlookを操作するライブラリがインポートされている必要があります。やり方としては、VBEから「ツール(T)」>「参照設定(R)」を選択。「参照設定」ウィンドウで「Microsoft Outlook XX.X Object Library」にチェックをつけて「OK」を押下するだけです (XX.X
にはバージョン番号が入ります)
サブルーチンMain
はOutlookからエクポートしてきたタスク情報から、変数sheet
がしめすワークシートに書き込むものになります。書き込む情報としてはA列から順に「インデックス番号」「タイトル」「タスクの本文」「カテゴリ」「タスクの状況」になります。もちろん、これは一例に過ぎないので、ほかの情報についても取得が可能です。なお「タスクの状況」については、取得できる情報が列挙型Outlook.OlTaskStatus
のため、これを日本語に修正する関数ToDisplayName
も作成しています。
Sub Main()
' sheet変数は目的に合わせて初期化すること
Dim sheet As Excel.Worksheet
Dim tasks As Outlook.Items
Dim task As Outlook.TaskItem
Dim x As Integer
Set tasks = Outlook.Application.GetNamespace("MAPI").GetDefaultFolder(olFolderTasks).Items
For x = 1 To tasks.Count
Set task = tasks.Item(x)
sheet.Range("A" & x) = x
sheet.Range("B" & x) = task.Subject
sheet.Range("C" & x) = task.Body
sheet.Range("D" & x) = task.Categories
sheet.Range("E" & x) = ToDisplayName(task.status)
Next x
End Sub
Function ToDisplayName(status As Outlook.OlTaskStatus) As String
Select Case status
Case Outlook.OlTaskStatus.olTaskComplete
ToDisplayName = "完了"
Case Outlook.OlTaskStatus.olTaskDeferred
ToDisplayName = "遅延"
Case Outlook.OlTaskStatus.olTaskInProgress
ToDisplayName = "進行中"
Case Outlook.OlTaskStatus.olTaskNotStarted
ToDisplayName = "未着手"
Case Outlook.OlTaskStatus.olTaskWaiting
ToDisplayName = "待機中"
Case Else
ToDisplayName = "UNKNOWN"
End Select
End Function