【実務・中級編】リソースの「登録情報」の整合性をチェックするバリデーションツール – Project VBA解析バイブル

スポンサーリンク

Project VBAを掌握せよ:リソース整合性を「自動バリデーション」で担保する極限の設計術

プロジェクトマネジメントにおいて、リソース管理は「血液の循環」だ。単価が空欄のリソース、カレンダーが未設定の要員。これらが放置されたプロジェクトは、いずれ「予算超過」と「スケジュールの破綻」という心不全を起こす。

多くの現場では、Excelのセルを眺めながら担当者が手動でチェックしているが、それはエンジニアの仕事ではない。今回は、Project VBAの深いレイヤーを理解し、「壊れない」「属人化しない」「拡張性がある」リソースバリデーションツールの設計思想を伝授する。

—

1. なぜ「If文の羅列」はゴミコードなのか

初心者が書くバリデーションは、大抵こうだ。
`If Cells(i, 1) = “” Then …` と延々と条件分岐を重ねる。これは保守性の死を意味する。仕様変更で「単価」の定義が変わった瞬間、コード全体を書き直す羽目になるからだ。

真のアーキテクトが目指すべきは「データ駆動型バリデーション」である。
チェックすべき項目を「定義シート(設定値)」として切り出し、コードはそれを読み込んで動的に判定する。ロジックとデータを分離せよ。これが堅牢なシステムを作る第一歩だ。

—

2. 実装の要諦:疎結合な設計思想

今回作成するツールは、以下の3フェーズで動作する。

1. メタデータ定義: どの列が必須か、どんな形式であるべきかを別シートで管理。
2. バリデーションエンジン: 定義をループ処理し、対象リソースを検証。
3. レポート生成: エラー箇所を可視化し、修正を促すリストを自動出力。

堅牢なバリデーション・ロジック(プロダクションコード)

以下のコードは、単なるコピペ用ではない。業務の要件が変わっても、設定シートをいじるだけで対応できる「汎用モジュール」だ。

Option Explicit

‘ Project VBA リソースバリデーションエンジン
‘ 設計思想: 定義シート(Config)に基づき、動的にリソースシートを検証する
Public Sub ExecuteResourceValidation()
Dim wsData As Worksheet, wsConfig As Worksheet
Dim lastRow As Long, i As Long, colIndex As Integer
Dim colName As String, isRequired As Boolean

Set wsData = ThisWorkbook.Sheets(“ResourceList”)
Set wsConfig = ThisWorkbook.Sheets(“ValidationConfig”) ‘ [項目名, 必須フラグ]を定義

‘ エラーログ初期化
Debug.Print “— バリデーション開始 —”

lastRow = wsData.Cells(wsData.Rows.Count, 1).End(xlUp).Row

‘ 2行目からデータ検証開始
For i = 2 To lastRow
‘ 設定シートをループし、定義に基づいてチェック
Dim configRow As Integer
configRow = 2

Do While wsConfig.Cells(configRow, 1).Value <> “”
colName = wsConfig.Cells(configRow, 1).Value
isRequired = wsConfig.Cells(configRow, 2).Value

‘ 列番号の取得(Findメソッドで動的に解決)
On Error Resume Next
colIndex = wsData.Rows(1).Find(colName).Column
On Error GoTo 0

‘ 必須チェックの実装
If isRequired And Trim(wsData.Cells(i, colIndex).Value) = “” Then
HighlightError wsData.Cells(i, colIndex), “必須項目未入力”
End If

configRow = configRow + 1
Loop
Next i

MsgBox “検証完了。不備のあるセルを赤くハイライトしました。”, vbInformation
End Sub

Private Sub HighlightError(targetCell As Range, msg As String)
With targetCell
.Interior.Color = RGB(255, 200, 200) ‘ 警告色
.AddComment msg ‘ エラー内容をコメントに付与
End With
End Sub

—

3. ファイル連携とパフォーマンスの「罠」

このツールを共有ネットワークドライブで運用する場合、以下の2点に注意せよ。

  • 排他制御とロック: 複数人が同時に編集する環境では、VBAでの直書きは避けるべきだ。理想は「入力用フロントエンド」と「マスタDB(SQL ServerまたはAccess)」の分離。VBAはあくまでAPI経由でデータを叩くインターフェースに徹すること。
  • イベントの無効化: 大規模なリストを走査する場合、`Application.ScreenUpdating = False` と `Application.Calculation = xlCalculationManual` は必須だ。これを行わないコードは、現場のエンジニアの貴重な時間を奪う「低速なスクリプト」でしかない。

—

結論:ツールは「文化」を変える

バリデーションツールを導入するということは、単にエラーを見つける作業を自動化するだけではない。「データが正しくなければプロジェクトは進められない」という規律をチームに植え付けることに真の価値がある。

もしあなたがこのコードを導入するなら、まず「なぜこの項目が必須なのか」をチーム全員に問い直してほしい。無意味な項目をチェックさせているなら、それはコードの欠陥以前の問題だ。

さあ、コードを書き換えろ。あなたの作ったそのツールが、プロジェクトの未来を救うことになるのだから。

タイトルとURLをコピーしました