2つのワークシートの数式の比較(Microsoft Excel)
リックには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に適用されます。