MS Projectの「Text1」から卒業しよう。カスタムフィールドを一括で日本語化する魔法のスクリプト
こんにちは。プロジェクトの自動化、そして業務プロセスの設計を専門としているエンジニアです。
MS Projectを使い始めたばかりの頃、多くの人が最初に直面する「壁」があります。それは、独自の項目を追加しようとしたときに現れる「Text1」「Number1」「Date1」といった、無機質で味気ない名前の羅列です。
「クライアント名」や「進捗ステータス」といった分かりやすい名前で管理したいのに、一つずつ手動で設定するのはあまりに時間がかかり、ミスも起きやすい……。マクロの記録機能を使ってみても、なぜそのコードが動いているのか分からず、結局「Text1」のまま使い続けてしまう。
もしあなたが今、そんな状況にいるなら、おめでとうございます。あなたは今、「単なる操作の記録」から「システムとしての自動化」へとステップアップする入り口に立っています。
今日は、プロジェクト開始時に「Text1」などのフィールド名を、マスタリストに従って一括で日本語化する、実戦的なVBAスクリプトを伝授します。ここをクリアすれば、Project VBAの基本はバッチリですよ。
1. なぜ「Text1」のままではいけないのか?
技術的な話に入る前に、なぜこの作業が重要なのかを理解しておきましょう。
MS Projectにおけるカスタムフィールド(Text1〜Text30など)は、いわば「中身が決まっていない空の収納ボックス」です。
「Text1」というラベルがついた箱に、あなたが「クライアント名」というデータを入れることはできますが、他のメンバーが見たときには「この箱には何が入っているんだ?」と混乱を招きます。
「データ(中身)」と「ラベル(フィールド名)」を一致させること。
これが、プロジェクト管理におけるデータの整合性を保つ第一歩なのです。
2. 実装の設計図:マクロの記録を超えて
マクロの記録機能は、「ボタンを押す」という動作を記録するのには向いていますが、「もしこれがText1だったら、名前を『案件名』に変える」といった条件分岐(ロジック)を扱うことはできません。
今回私たちが作るスクリプトの構造はこうです。
1. マッピング(対応表)を作る: 「Text1は『案件名』」「Text2は『担当部署』」というルールを決める。
2. ループ処理(繰り返し): フィールドを一つずつ順番に見ていく。
3. プロパティの書き換え: 条件に合致したら、その名前(Nameプロパティ)を書き換える。
3. 【実践】カスタムフィールド一括日本語化スクリプト
それでは、コードを見ていきましょう。初心者の方でも読みやすいよう、極限まで丁寧にコメントを記述しました。
このスクリプトは、タスク(Task)側のカスタムフィールドを対象としています。
Option Explicit
''' <summary>
''' プロジェクト開始時にカスタムフィールドの名前を一括で日本語化する
''' </summary>
Sub SetupCustomFields()
Dim tField As TaskCustomField
Dim i As Integer
' 画面更新を停止して処理速度を向上させる(お作法です)
Application.ScreenUpdating = False
On Error GoTo ErrorHandler ' エラーが発生した場合の飛び先を指定
Debug.Print "--- カスタムフィールド設定開始 ---"
' --- ステップ1: タスク用カスタムフィールドのループ処理 ---
' MS ProjectのTaskCustomFieldコレクションを順番に見ていきます
' ここでは例として、Text1からText10までを対象にします
For i = 1 To 10
' Text1, Text2... という名前のフィールドを特定するためのロジック
' FieldIDは内部的な番号ですが、ここでは分かりやすく名前で判定します
Select Case i
Case 1
' Text1 を 「案件名」 に変更
Set tField = ActiveProject.TaskCustomFields(i)
tField.Name = "案件名"
Case 2
' Text2 を 「クライアント名」 に変更
Set tField = ActiveProject.TaskCustomFields(i)
tField.Name = "クライアント名"
Case 3
' Text3 を 「プロジェクト区分」 に変更
Set tField = ActiveProject.TaskCustomFields(i)
tField.Name = "プロジェクト区分"
Case 4
' Text4 を 「備考」 に変更
Set tField = ActiveProject.TaskCustomFields(i)
tField.Name = "備考"
' 必要に応じて Case 5, Case 6... と増やしていけます
Case Else
' 定義していない番号はスキップ
End Select
Debug.Print "Field " & i & " を設定しました。"
Next i
' --- 完了処理 ---
Application.ScreenUpdating = True
MsgBox "カスタムフィールドの設定が完了しました!", vbInformation, "完了"
Exit Sub
ErrorHandler:
' エラーが起きたときに、何が原因か教えてくれるようにします
Application.ScreenUpdating = True
MsgBox "エラーが発生しました。番号: " & Err.Number & vbCrLf & _
"内容: " & Err.Description, vbCritical, "エラー発生"
End Sub
コードの重要ポイント解説
# ① `Select Case` 文の活用
`If…Then…ElseIf` を何度も書くとコードが非常に読みづらくなります。「もし1ならこれ、2ならこれ」と分岐させる場合は、この `Select Case` を使うのがプロの書き方です。メンテナンス性が格段に上がります。
# ② `ActiveProject.TaskCustomFields(i)`
ここが心臓部です。`ActiveProject`(今開いているプロジェクト)の中にある `TaskCustomFields`(タスク用のカスタムフィールド集)の、`i`番目(1番目、2番目…)を操作せよ、という命令です。
# ③ `On Error GoTo ErrorHandler`
実務で最も重要なのがこれです。もし「すでにそのフィールドが別の用途で使われていて変更できない」といった予期せぬ事態が起きても、プログラムが強制終了してPCがフリーズしたようになるのを防ぎ、優しくエラー内容を教えてくれます。
4. 陥りやすい罠:エンジニアからのアドバイス
このスクリプトを動かす際に、初心者がハマりやすいポイントが2つあります。
罠その1:タスクとリソースの混同
MS Projectには、「タスク用のカスタムフィールド」と「リソース(人員)用のカスタムフィールド」の2種類が存在します。
上記のコードは「タスク用」です。もし「人員のスキルレベル」などを変えたい場合は、`ActiveProject.ResourceCustomFields` を使う必要があります。ここを間違えると、「名前を変えようとしたのに、対象が見つからない!」というエラーになります。
罠その2:フィールド番号のズレ
`TaskCustomFields(1)` は必ずしも `Text1` とは限りません。
もし、すでに誰かが「Text1」を別の用途で定義してしまっている場合、番号の管理が複雑になります。
「確実に Text1 を指定したい」という場合は、番号ではなく「種類(Type)」を判定するロジックを組み込むのが、次なるステップ(中級者への道)です。
まとめ:自動化の力で、管理を「クリエイティブ」に
いかがでしたか?
たった数十行のコードですが、これを使うことで、プロジェクト開始時の「地味で退屈な設定作業」を、一瞬の「実行」へと変えることができます。
プログラミングの本質は、単にコードを書くことではありません。「繰り返される無駄な作業を見つけ出し、それを仕組みによって排除すること」にあります。
このスクリプトをベースに、次は「Excelの管理表から読み込む」といった拡張に挑戦してみてください。その先に、あなただけの最強のプロジェクト管理システムが待っています。
応援していますよ。一歩ずつ、進んでいきましょう。
