1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【PowerShell】WinMergeの結果を自動判定してExcelに出力する方法

Posted at

【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本でも対応可能
  • 目視チェックなしで確実な確認が可能
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?