比较两个工作表上的公式(Microsoft Excel)
里克有两个工作表,他需要相互比较以突出差异。比较不需要比较显示的内容,而是比较每个单元格中的公式。通过这种方式,Rick希望发现公式在每个工作表上的不同之处。
有几种比较公式的方法。在某些版本的Excel中,您可以访问可以为您处理任务的比较加载项。如果您使用的是Office Professional Plus 2013或Office 365 ProPlus,则可以使用“电子表格比较”加载项。
有关此外接程序的信息,请参见:
https://support.office.com/en-us/article/Overview-of-Spreadsheet-Compare-13fafa61-62aa-451b-8674-242ce5f2c986
如果您使用的是Office Professional Plus 2013或Office 365,则还可以使用“电子表格查询”加载项。有关此外接程序的信息位于:
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是Excel 2013中引入的,因此这种方法在旧版本的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;如果两个范围的大小不同,则返回#Value错误。
如果要突出显示差异,则可以在条件格式设置规则中使用UDF。假设要对Sheet1中的单元格应用条件格式,只需指定规则应使用公式,然后将其用作公式即可:
=NOT(CompareFormulas3(Sheet2!A1,A1))
如果Sheet1中的任何单元格与Sheet2中的相应单元格都不匹配,则会根据您在条件格式设置规则中定义的任何格式对它们进行格式化。
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(13400)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。