Project VBAを掌握する:Taskの「Notes」にHTMLを刻み、レポートを自動化せよ
こんにちは。現場で泥臭く、かつスマートにプロジェクトを管理しているエンジニアの皆さん。
「Projectのタスクメモ、ただの文字列じゃ情報が埋もれてしまわないか?」
「進捗報告のために、毎回コピペして整形する作業に何分使っている?」
もし心当たりがあるなら、今すぐその手作業を捨ててください。Project VBAを使えば、Taskの「Notes」にHTMLタグを流し込み、後工程(Wordやメール、Webへの転送)でそのまま美しいレポートとして再現することが可能です。
今日は、マクロの記録から一歩先へ進みたいあなたへ、「オブジェクトモデルの神髄」を伝授します。
—
1. Project VBAの「地図」を頭に入れよう
Project VBAを扱う上で、まずはこの階層構造(オブジェクトモデル)を理解してください。
- Application: プロジェクト全体を包む箱。
- Project: 開いているプロジェクトファイル。
- Task: 計画の最小単位。今日触る「Notes」はここに宿る。
[Application]
└ [ActiveProject]
└ [Tasks]
└ [Task.Notes] ← ここを攻略する!
初心者が陥りやすい罠は、「Taskそのもの」に色々な情報を詰め込みすぎることです。Notesは強力なテキストコンテナですが、ProjectのUI上ではHTMLは表示されません。 しかし、これこそが「後工程へのトリガー」になります。
—
2. 実践:NotesにHTMLを流し込むコード
以下のコードは、選択中のタスクのメモをHTML形式で書き換える基本の型です。
Sub EmbedHtmlToNotes()
Dim tsk As Task
Dim htmlTemplate As String
‘ 選択されているタスクを対象にする(なければ終了)
If ActiveSelection.Tasks.Count = 0 Then
MsgBox “タスクを選択してください。”
Exit Sub
End If
Set tsk = ActiveSelection.Tasks(1)
‘ HTMLタグを文字列として構築する
‘ ここが後工程(メールやレポート)で化ける魔法のソースです
htmlTemplate = “
“
タスク名: ” & tsk.Name & “
” & _
“
進捗率: ” & tsk.PercentComplete & “%
” & _
“
- 開始日: ” & tsk.Start & “
- 期限: ” & tsk.Finish & “
” & _
“
” & _
“
”
‘ TaskのNotesに流し込む
tsk.Notes = htmlTemplate
MsgBox “タスク「” & tsk.Name & “」にHTMLを埋め込みました。”
End Sub
このコードのポイント
- 文字列結合の基本: `&` を使って変数をタグの間に挟み込みます。
- 属性の制御: `style=’color:red;’` のようにCSSをインラインで書くのがコツです。これにより、OutlookやWordに貼り付けた瞬間にスタイルが適用されます。
—
3. 陥りやすいエラーと回避策
VBAエンジニアとしての登竜門、以下の壁にぶつかったら思い出してください。
① 「Notesが空っぽになってしまう」問題
Notesフィールドは非常に繊細です。`tsk.Notes = “”` と空文字を入れると、以前のメモが全て消えます。既存のメモを残したい場合は、`tsk.Notes & vbCrLf & htmlTemplate` のように、既存データと結合させる工夫が必要です。
② 文字列の「エスケープ」問題
HTMLタグの中に `”`(ダブルクォーテーション)を記述したい場合、VBAでは `””` と二重にする必要があります。
- NG: `
`
- OK: `
`—
4. なぜ「HTMLで書く」のが最強なのか?
単なるテキストで「進捗率:50%」と書くのと、HTMLで `50%` と書くのでは、情報の「価値」が違います。
- 後工程の自動化: OutlookのVBAでこのNotesを読み取り、そのままメール本文として送信すれば、綺麗なレイアウトの報告書が数秒で完成します。
- 検索性: 特定のクラス名やタグでフラグを立てておけば、後から「進捗が遅れているタスクだけを抽出する」といったフィルタリングも容易です。
—
最後に:エンジニアとしての心得
Project VBAは、単なる事務作業の自動化ツールではありません。「プロジェクトの可視化を制御する」ためのアーキテクチャです。
今回紹介した「HTML埋め込みテクニック」は、あなたの作ったプロジェクトデータが、他のシステムやドキュメントと会話するための「共通言語」になります。
ここをクリアしたあなたは、もう「マクロを動かす人」ではなく「業務の仕組みを設計するエンジニア」です。次はぜひ、全てのタスクに対して一括でこの処理を走らせるループ処理に挑戦してみてください。
コードのことで悩んだら、いつでもこの場所へ戻ってきてください。応援していますよ。
- OK: `
