【PowerShell】WinMergeの結果を自動判定してExcelに出力する方法
🏆 はじめに
ある日、上司からこんな指示が飛んできました。
👨💼 上司:「これ、700本分のコンペア結果、確認しておいて」
👨💻 「……はい?」
👨💼 上司:「WinMergeで差異チェックして、OKとNGを確認してまとめておいてね」
👨💻 「えっ、700本ですよ?」
👨💼 上司:「そうそう、すぐ終わるでしょ?」
👨💻 「(いや、終わるわけないだろ…)」
WinMergeで700本の比較結果を手動で確認しろと言われたけれど、そんなの現実的に無理。
目視で確認すると、ミスや見落とし も避けられない。
そこで、PowerShellで自動化 して解決することにしました。
🎯 課題
- WinMerge の差異チェックを手動で確認している
- A列とB列がオレンジの場合に NG と判定したい
- コメント行(
*
で始まる行)はOKとして無視したい - 700本ものファイルを手作業で確認するのは無理がある
- 最終的に結果をExcelに出力してまとめたい
💡 解決策
-
WinMergeの比較結果をExcelに出力
→ WinMerge で差異を比較し、その結果をExcel形式(またはCSV形式)で保存 - PowerShellのCOMオブジェクト (
Excel.Application
) を使用してExcelを操作 - セルの背景色を取得してオレンジ色(RGB(239, 203, 5))を識別
-
*
で始まる行は自動的に「OK」として無視 - 結果をExcelにまとめて出力
🛠️ コード
📌 ExcelのCOMオブジェクトを使用してExcelを開く
WinMergeの結果をExcelに保存した後、そのExcelを開いて処理を行います。
$Excel = New-Object -ComObject Excel.Application
$Workbook = $Excel.Workbooks.Open($excelFile.FullName)
$Sheet = $Workbook.Sheets.Item(1)
📌 オレンジ色の判定(RGB値を使用)
# RGB(239, 203, 5) を10進数に変換
$orangeRGB = 5 + (203 * 256) + (239 * 256 * 256)
$leftBgColor = $Sheet.Cells.Item($row, 1).Interior.Color
$rightBgColor = $Sheet.Cells.Item($row, 2).Interior.Color
$isLeftOrange = ($leftBgColor -eq $orangeRGB)
$isRightOrange = ($rightBgColor -eq $orangeRGB)
📌 コメント行(* で始まる行)を無視
if (($leftCell -match "^\*") -or ($rightCell -match "^\*")) {
continue
}
📌 A列とB列が両方オレンジの場合はNG判定
A列とB列のどちらもオレンジの場合は「差異あり(NG)」と判定します。
if ($isLeftOrange -and $isRightOrange) {
$hasNG = $true
}
📌 A列がB列の先頭部分に一致している場合はOK
A列の文字列がB列の文字列の先頭部分に一致している場合はOKとします。
if ([string]$rightCell.StartsWith([string]$leftCell)) {
continue
}
📌 結果をExcelに出力
$summaryResults | Out-File -FilePath $outputFilePath -Encoding UTF8
---
## ✅ 動作マトリクス
| 左オレンジ | 右オレンジ | 左*始まり | 右*始まり | 判定
|------------|------------|------------|------------|------------------
| TRUE | FALSE | TRUE | 気にしない | コメント行としてOK
| TRUE | FALSE | FALSE | 気にしない | 差異としてNG
| FALSE | TRUE | 気にしない | TRUE | コメント行としてOK
| FALSE | TRUE | 気にしない | FALSE | 差異としてNG
| TRUE | TRUE | 気にしない | 気にしない | **差異としてNG**
| FALSE | FALSE | 気にしない | 気にしない | スキップ (対象外)
---
🏁 実行結果
Book1.xlsx OK
Book2.xlsx OK
Book3.xlsx NG
Book4.xlsx NG
🚨 注意点・ハマりどころ
-
ImportExcel
モジュールは不要 - Excelが閉じられない場合、Excelプロセスが残る可能性がある
- RGB値の確認(Excelのカラーピッカーでチェック可能)
- WinMergeの結果をExcelに出力する際、形式は一貫性を持たせる
🏆 まとめ
- 無茶な指示もPowerShellで秒で終わらせる
- 700本でも1000本でも対応可能
- 目視チェックなしで確実な確認が可能