在将工作表分发给其他人之前,Brian需要对其进行处理。他需要的是消除工作表中的大部分(但不是全部)公式。他想逐步浏览选定单元格区域中的所有单元格,如果该单元格包含公式,请检查该公式。如果公式包含对当前工作簿中其他工作表的引用(任何引用),则该公式将被忽略。如果公式不包含这样的引用,则宏需要用公式的结果替换该公式。

这是一个相对简单的任务。您需要做的就是让宏步骤遍历所有单元格,并找出该单元格是否包含公式。如果是这样,请检查该公式是否包含感叹号。感叹号用于公式参考中,例如:

=Sheet2!A1

因此,如果公式包含感叹号,则可以忽略它。如果它不包含感叹号,则可以将其替换为它的值。

Sub ConvertFormulas1()

Dim c As Variant     Dim frm As String

On Error Resume Next

For Each c In Selection         If c.HasFormula Then             frm = c.Formula             If InStr(1, frm, "!") = 0 Then                 c.Value = c.Value             End If         End If     Next c End Sub

这种方法有一个缺点:感叹号将出现在当前工作表外部的所有公式中,包括其他工作簿中的公式。如果您确实只想将公式替换为当前工作簿中的其他工作表,而忽略引用其他工作簿中的工作表的公式,那么您需要添加一些其他逻辑。当您查看Excel如何引用其他工作簿时,逻辑将变得显而易见:

=[OtherWorksheet.xls]Sheet1'!$C$9

请注意,另一个工作簿的名称包含在方括号中。

因此,在测试了感叹号(通知您引用是指向另一个工作表)之后,您需要检查是否存在左括号。如果有,则该引用不是针对当前工作簿中的单元格。

Sub ConvertFormulas2()

Dim c As Variant     Dim OtherSheet As Boolean     Dim frm As String

On Error Resume Next

For Each c In Selection         If c.HasFormula Then             frm = c.Formula             OtherSheet = False             If InStr(1, frm, "!") Then                 OtherSheet = True                 If InStr(1, frm, "[") Then                     OtherSheet = False                 End If             End If             If Not OtherSheet Then                 c.Value = c.Value             End If         End If     Next c End Sub

||相对容易地修改此宏中使用的公式,以便在离开时摆脱所有外部引用实际上,您需要做的就是摆脱对括号的检查,然后摆脱检查OtherSheet变量的结构中的“ Not”关键字。 |||| 注意:

|如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)上描述的宏,我准备了一个特殊页面,其中包含有用的信息。

`链接:/ excelribbon-ExcelTipsMacros [单击此处可在新的浏览器标签]。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(12158)适用于Microsoft Excel 2007、2010、2013和2016。您可以在此处为Excel的较旧菜单界面找到此技巧的版本:

链接:/ excel-Replacing_Some_Formulas_with_the_Formula_Results [用公式结果替换某些公式]。