リックには2つのワークシートがあり、違いを強調するために互いに比較する必要があります。比較では、表示されているものを比較する必要はありませんが、各セルの数式を比較する必要があります。このようにして、リックは各ワークシートのどこで数式が異なるかを発見したいと考えています。

数式を比較する方法はいくつかあります。 Excelの特定のバージョンでは、タスクを処理できる比較アドインにアクセスできます。 Office Professional Plus2013またはOffice365 ProPlusを使用している場合は、SpreadsheetCompareアドインを使用できます。

このアドインに関する情報はここにあります:

https://support.office.com/en-us/article/Overview-of-Spreadsheet-Compare-13fafa61-62aa-451b-8674-242ce5f2c986

Office Professional Plus2013またはOffice365を使用している場合は、SpreadsheetInquireアドインを使用することもできます。このアドインに関する情報はここにあります:

https://support.office.com/en-nz/article/What-you-can-do-with-Spreadsheet-Inquire-ebaf3d62-2af5-4cb1-af7d-e958cc5fad42

すべての人がこれらのExcelバージョンのいずれかを使用しているわけではない、またはアドインを使用したくない場合があることを認識して、他にできることがあります。 Excel 2013以降のバージョンには、FORMULATEXTと呼ばれる便利なワークシート関数があります。この関数を使用して、次の方法でセルに格納されている数式を取得できます。

=FORMULATEXT(A7)

これにより、セルA7(この場合)に含まれる数式が返されます。セルに数式が含まれていない場合は、#N / Aエラーが返されます。この動作を使用して、「比較ワークシート」に数式が等しいかどうかに関するインジケーターを作成できます。新しいワークシートを作成し、これをセルA1に配置するだけです。

=IF(FORMULATEXT(Sheet1!A1)=FORMULATEXT(Sheet2!A1),"","Different")

数式を必要なだけ下と右にコピーします。 Sheet1とSheet2の対応するセル間の違いを示します。

FORMULATEXTはExcel2013で導入されたため、このアプローチは古いバージョンのExcelでは機能しないことに注意してください。別のバージョンを使用している場合(または、Excel 2013を使用している場合でも)、マクロを使用してワークシート間の違いをマークできます。使用できるマクロアプローチはたくさんあります。以下は、比較を行うための簡単な方法です。

Sub ComparaFormulas1()

Dim Check As Worksheet     Dim Master As Worksheet     Dim c As Range

Set Check = ActiveSheet     Set Master = Worksheets("Master")



For Each c In Check.UsedRange         If c.HasFormula Then             If c.Formula <> Master.Range(c.Address).Formula Then                 c.Interior.Color = RGB(255, 0, 0)

End If         End If     Next c End Sub

このマクロを使用するには、比較するブックを表示します。 「マスター」と呼ばれるワークシートの同じセルと比較することを前提としています。

(「標準」ワークシートの名前が異なる場合は、マクロで明らかに変更できます。)現在のワークシートのすべてのセルが「マスター」ワークシートの対応するセルと比較されます。セルに数式が含まれていて、それらの数式が異なる場合、現在のワークシートではセルの背景色が赤に変更されます。

このようなアプローチは、比較されるワークシートのフォーマットを明らかに変更します。書式を変更せずに、単に差異のあるセルのリストが必要な場合は、マクロで次のバリエーションを使用できます。

Sub ComparaFormulas2()

Dim Check As Worksheet     Dim Master As Worksheet     Dim c As Range     Dim sTemp As String     Dim lDif As Long

Set Check = ActiveSheet     Set Master = Worksheets("Master")

sTemp = ""

lDif = 0

For Each c In Check.UsedRange         If c.HasFormula Then             If c.Formula <> Master.Range(c.Address).Formula Then                 lDif = lDif + 1                 sTemp = sTemp & vbCrLf & lDif & ": " & c.Address             End If         End If     Next c     If lDif > 0 Then         sTemp = "These were the differences" & vbCrLf & sTemp     Else         sTemp = "There were no differences"

End If     MsgBox sTemp End Sub

比較用の範囲を受け入れるユーザー定義関数(UDF)を作成することもできます。そうすれば、さまざまな方法で使用できます。

Function CompareFormulas3(rng1 As Range, rng2 As Range)

Dim x As Long

If rng1.Count <> rng2.Count Then         'Range sizes do not match         CompareFormulas = CVErr(xlValue)

Else         CompareFormulas = True    ' Assume all the same         For x = 1 To rng1.Count             If rng1(x).Formula <> rng2(x).Formula Then                 'Formulas do not match                 CompareFormulas = False                 x = rng1.Count    ' No need to keep comparing             End If         Next x     End If End Function

両方のワークシートのセルの範囲が同じ数式であることを確認したいだけの場合は、次のように使用できます。

=CompareFormulas3(Sheet1!A1:Z1000,Sheet2!A1:Z1000)

この関数は、すべてのセルの数式が同じ場合はTRUEを返し、いずれかのセルの数式が異なる場合はFALSEを返し、2つの範囲が同じサイズでない場合は#Valueエラーを返します。

違いを強調したい場合は、条件付き書式ルール内でUDFを使用できます。 Sheet1のセルに条件付き書式を適用する場合は、ルールで数式を使用するように指定してから、これを数式として使用します。

=NOT(CompareFormulas3(Sheet2!A1,A1))

Sheet1のセルのいずれかがSheet2の対応するセルと一致しない場合、条件付き書式ルールで定義した書式に従って書式設定されます。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(13400)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice365のExcelに適用されます。