【動画&サンプル付き】2つのファイルを比較しOK / NG判定

まるきち君!今日は初めて実践として2つのファイルを比較してみよう!Excel VBAならボタンひとつで実行できるよ!

ファイル比較って今まで目視でやってて時間もかかるし、疲れてるとミスりまくるんだよね~

実践記事はサンプルと動画付きだからそのまま転用することができるよ!いっしょにみていこうよ!

イッエーイ!お願いします!

サンプル &動画

サンプル & 動画はこちらになります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
Sub ExcelFile_compare1()
 
    'ものおブログ実践1.xlsm内 行/列位置
    Const START_ROW As Long = 4
    Const END_ROW As Long = 21
     
    Const SEIHIN_COL As Long = 5
    Const HIKAKU1_COL As Long = 6
    Const HIKAKU2_COL As Long = 7
    Const HIKAKU3_COL As Long = 8
     
    Const JOKEN1_KOKYAKU_COL = 11
    Const JOKEN2_KOKYAKU_COL = 12
    Const JOKEN3_KOKYAKU_COL = 13
 
    Const JOKEN1_MONO_COL = 16
    Const JOKEN2_MONO_COL = 17
    Const JOKEN3_MONO_COL = 18
 
    '【顧客要求】製品名管理ファイル.xlsx 行/列位置
    Const KOKYAKU_START_ROW As Long = 1
    Const KOKYAKU_START_COL As Long = 1
 
    Const KOKYAKU_END_ROW As Long = 19
    Const KOKYAKU_END_COL As Long = 4
     
    '【ものづくり条件】製品名管理ファイル.xlsx 行/列位置
    Const MONO_START_ROW As Long = 1
    Const MONO_START_COL As Long = 1
     
    Const MONO_END_ROW As Long = 19
    Const MONO_END_COL As Long = 4
     
    Dim bkPath_FileName As String
    Dim i As Long
 
 
    '-------------データ削除-------------
 
    Call Clear_data
 
    '-------------顧客要求データのコピー-------------
         
    ChDir "C:\"
  
    bkPath_FileName = Application.GetOpenFilename("Excelファイル,*.xlsx", , "顧客要求データファイルを選択")
  
    If bkPath_FileName = "False" Then Exit Sub
      
    Workbooks.Open bkPath_FileName
     
    Range(Cells(KOKYAKU_START_ROW, KOKYAKU_START_COL), Cells(KOKYAKU_END_ROW, KOKYAKU_END_COL)).Copy _
    Destination:=ThisWorkbook.Worksheets("Sheet1").Range("J3")
     
     
    'ワークブックを閉じる
    ActiveWorkbook.Close
     
    '-------------ものづくり条件データのコピー-------------
     
    bkPath_FileName = Application.GetOpenFilename("Excelファイル,*.xlsx", , "ものづくり条件データファイルを選択")
  
    If bkPath_FileName = "False" Then Exit Sub
      
    Workbooks.Open bkPath_FileName
     
    Range(Cells(MONO_START_ROW, MONO_START_COL), Cells(MONO_END_ROW, MONO_END_COL)).Copy _
    Destination:=ThisWorkbook.Worksheets("Sheet1").Range("O3")
     
    'ワークブックを閉じる
    ActiveWorkbook.Close
 
    ThisWorkbook.Worksheets("Sheet1").Activate
 
    '製品名のコピー
    Range(Cells(START_ROW, 10), Cells(END_ROW, 10)).Copy Cells(START_ROW, SEIHIN_COL)
     
    '-----------比較処理-----------
    For i = START_ROW To END_ROW
     
        '条件1の比較
        If Cells(i, JOKEN1_KOKYAKU_COL) = Cells(i, JOKEN1_MONO_COL) Then
             
            Cells(i, HIKAKU1_COL) = "OK"
         
        Else
         
            Cells(i, HIKAKU1_COL) = "NG"
            Cells(i, HIKAKU1_COL).Interior.Color = vbRed
             
            Cells(i, JOKEN1_MONO_COL).Interior.Color = vbYellow
         
        End If
     
        '条件2の比較
        If Cells(i, JOKEN2_KOKYAKU_COL) = Cells(i, JOKEN2_MONO_COL) Then
             
            Cells(i, HIKAKU2_COL) = "OK"
         
        Else
         
            Cells(i, HIKAKU2_COL) = "NG"
            Cells(i, HIKAKU2_COL).Interior.Color = vbRed
             
            Cells(i, JOKEN2_MONO_COL).Interior.Color = vbYellow
         
        End If
     
        '条件3の比較
        If Cells(i, JOKEN3_KOKYAKU_COL) = Cells(i, JOKEN3_MONO_COL) Then
             
            Cells(i, HIKAKU3_COL) = "OK"
         
        Else
         
            Cells(i, HIKAKU3_COL) = "NG"
            Cells(i, HIKAKU3_COL).Interior.Color = vbRed
             
            Cells(i, JOKEN3_MONO_COL).Interior.Color = vbYellow
         
        End If
         
    Next i
 
End Sub
 
Sub Clear_data()
 
    ThisWorkbook.Worksheets("Sheet1").Activate
     
    Range(Cells(4, 5), Cells(1000, 8)).Clear
    Range(Cells(3, 10), Cells(1000, 18)).Clear
 
    MsgBox "データを削除しました(`・ω・´)ゞ"
 
End Sub

2つのファイル比較とOK / NG判定 図解

今回の目的は同じフォーマットの2つのファイル

・顧客要求のファイル 「【顧客要求】製品名管理ファイル.xlsx」

・ものづくり条件のファイル「【ものづくり条件】製品名管理ファイル.xlsx」

をそれぞれ選択し、同じ製品名の条件3種類をそれぞれ比較し結果を判定する内容になります。

要は、顧客要求の条件とものづくり条件が一致しているかどうかのチェックになります。

図解すると下記になります。

定数宣言

サンプル3行目~32行目で各ファイル、各データのスタート位置、エンド位置を定数で宣言しています。

実務ではどうしてもファイルの情報量が変更されるケースがでてきます。

変化に強いコーディングをするために、できるだけ定数を使用して簡単にコードの修正が出来るようにしておきましょう。

データ消去

サンプル40行目で、データの消去を実施しています。

先にデータが入っていると結果が正しく出力されません。

処理前にClear_dataプロシージャをCallして100%残っているデータを消去するようにしています。


   Call Clear_data

2つのファイルを開く

サンプルの44行目から76行目で、GetOpenFilenameで2つのExcelファイルを指定し開き、表のデータをマクロファイルの”Sheet1″にコピーしています。

2つのファイルのデータを比較

サンプルの78行目から123行目で1製品名ずつ条件1、条件2、条件3のデータが一致しているか比較しています。

For Nextステートメントについては下記記事を参照してください。

比較した結果、一致すれば”OK”、一致しなければ”NG”としセル背景色を赤にして間違いがわかるように強調しています。

【ものづくり条件】製品名管理ファイル.xlsxのどのデータが一致していないのか?一目でわかるようにこちらもセル背景色を黄色にして強調しています。

ボタンひとつで、比較処理があっという間に終わったね!

そうだね!今回のようにファイルを選択することで、ファイル場所を直接指定するより柔軟に対応できるようになっているよ!

まとめ

今回のExcel VBA自動化を行った結果、

【ものづくり条件】製品名管理ファイル.xlsxの製品名maru-aaaeという製品の条件1が顧客要求と比較し間違っていることがわかりました。

次回の実践記事では表のフォーマットが異なるケースにも対応したコードを説明していきたいと思います。

VBA初級から抜け出すための知恵と、実務で活用できるスキルが学べる1冊です!激しくオススメ!

bookfan 2号店 楽天市場店
¥1,980 (2025/04/02 09:42時点 | 楽天市場調べ)
\楽天ポイント5倍セール!/
楽天市場
\ポイント5%還元!/
Yahooショッピング

Excel VBA 技術書も豊富

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!

この記事を書いた人

ものおと申します。

10年以上の大手メーカー勤務経験のあるエンジニアです。

これまでのものづくりの経験から小学生にも伝わるExcel VBAお役立ち記事を発信していきたいと思います。

よろしくお願いします。

コメント

コメントする

CAPTCHA