DuKiccoの雑記

My Life Is Myself

【2つのシートの内容を比較】【エクセル2013,VBA】

複数人で同一ファイルに書き込みをするような作業の際に、作業前のシートと作業後のシートを比較し、どこが修正されたかを確認したくなる場合があります。中には適当なひとやエクセルが苦手なひともいたりするため、気がつかずに違うセルの内容を消したり上書きしたり等のミスが生じることがあります。

 

比較の対象は「値と数式」です。数式は見た目にはわからなくとも、セルの削除などでおかしなことになるときがあります。書式も比較できるようにしたかったのですが、長くなるので断念しました。

 

内容

Step0.比較したい2つのシートは同一ブック内にあることが前提。

Step1.比較したい1枚目のシートの比較したい範囲を指定する。

Step2.比較したい2枚目のシートの名前を入力する。

Step3,4.比較作業が行われる。結果は追加されたシートに出力される。(青塗りだと変化なし。赤塗りだと値または数式が異なる。表示されている値は比較シート1の値。)

 

f:id:DuKicco:20150531085136j:plain

以下コード

=========================================================

Sub シート比較()

Dim SN1 As String, SN2 As String, SN As String, buf As Range, TCell As Range

'Step1:比較したいシート(1枚目)の比較したい範囲を選択
Set buf = Application.InputBox(prompt:="比較したいシート(1枚目)の範囲を選択してください)", Type:=8)
SN1 = buf.Parent.Name

 

'Step2:比較したいシート(2枚目)の名前を入力。デフォルト値は2枚目のシート
SN2 = InputBox("比較したいシート(2枚目)の名前を入力", "", Sheets(2).Name)

 

'Step3:比結果の記入用シートの追加
Sheets.Add After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
SN = ActiveSheet.Name


'Step4:指定した各セル内容を比較していき、結果シートに記入する。
For Each TCell In buf
'結果シートの対応するセルに比較シート1の数式なければ値を記入していく(書式は関係なし)
Sheets(SN).Range(TCell.Address).Formula = TCell.Formula
'比較シート1と2の数式なければ値を比較し異なる場合には結果シートの対応するセルを赤塗りにしていく。同一であれば青塗り。
If TCell.Formula <> Sheets(SN2).Range(TCell.Address).Formula Then
Sheets(SN).Range(TCell.Address).Interior.Color = 255
Else
Sheets(SN).Range(TCell.Address).Interior.Color = 15773696
End If

Next

End Sub