检查数组公式的正确输入(Microsoft Excel)
Jeffrey的公司有大量使用大量CSE(Ctrl + Shift + Enter)数组公式的报告。当有人忘记按Ctrl键的同时按住Shift键时,结果公式将不等于正确答案。审核每个单元格,寻找\ {}括号既繁琐又耗时。杰弗里(Jeffrey)想知道是否有一种快速的方法来查找“缺失的括号”或在没有按Ctrl + Shift + Enter的情况下引发错误标志?
在Excel中没有执行此操作的内在或公式化方法。这意味着您需要使用基于宏的解决方案。
幸运的是,VBA提供了几种解决此问题的方法。一种方法是简单地使用公式来确保选择中的每个公式实际上都是数组公式。
Sub MakeCSE1() Dim rCell As Range For Each rCell In Selection rCell.FormulaArray = rCell.Formula Next rCell End Sub
该宏假定您在实际运行宏之前将选择要“转换”的单元格。如果愿意,可以定义一个单元格范围(为该范围命名),然后运行一个始终在该范围上工作的类似宏。
Sub MakeCSE2() Dim rng As Range Dim rCell As Range Dim rArea As Range Set rng = Range("CSERange") For Each rArea In rng.Areas For Each rCell In rArea.Cells If rCell.HasArray = False Then rCell.FormulaArray = rCell.Formula End If Next rCell Next rArea End Sub
该宏将查找一个名为CSERange的范围,然后检查该范围中的每个单元格。如果它不包含数组公式,则该公式将转换为数组公式。
请注意,使用HasArray属性检查单元格是否包含数组公式。该属性实际上可以通过其他方式提供帮助。例如,您可以创建一个简单的用户定义函数,例如:
Function NoCellArray1(rng As Range) As Boolean NoCellArray1 = Not rng.HasArray End Function
如果指向的单元格不包含数组公式,则此函数返回True。如果确实包含一个,则返回False。然后,您可以将此函数用作条件格式的基础。您需要做的就是创建一种以这种方式使用它的格式:
=NoCellArray1(A5)
由于如果单元格不包含数组公式,则NoCellArray返回True,因此您的条件格式可以将单元格的颜色设置为红色,或者设置其他可见符号以表示该单元格没有必需的数组公式。您也可以使用以下功能来完成相同的任务:
Function NoCellArray2(rng As Range) As Boolean NoCellArray2 = (Evaluate(rng.FormulaArray) <> rng.Value) End Function
完全不同的方法是在公式中添加一些内容,使它们易于被识别为数组公式。例如,您可以将以下内容添加到任何数组公式的末尾:
+N("{")
这不会以任何方式影响计算,但是可以很容易地检查它是否存在。可以通过事件处理程序进行检查,例如:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Right(Selection.FormulaArray, 5) = "(""{"")" Then ActiveCell.Select Selection.FormulaArray = ActiveCell.Formula End If End Sub
请注意,处理程序将检查公式是否以(“ \ {”)结尾,如果是,则强制将该公式视为数组公式。这种方法的妙处在于,您无需再在工作表上按Ctrl + Shift + Enter,事件处理程序将为您处理它。如果要在某个时刻将公式转换回常规(非数组)版本,只需修改公式,使其不包含+ N(“ \ {”)。
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(473)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本: