关键问题是:我是否可以完全避免使用VBA,并使用一系列Excel专用的内置函数来验证给定单元格是否包含常量(即用户输入的值)、公式(即某种计算、逻辑操作等——几乎以=开头)或链接(即对另一个工作表或另一个工作簿中的单元格的引用)?我知道Excel可以轻松确定这一点;看看GoTo/Special的用途和速度。但我怎么才能得到它呢?
提前感谢您的帮助。
E2:F2 中的标准公式为,
=ISFORMULA(D2)
=AND(NOT(ISFORMULA(D2)), LEN(D2))
如果需要进一步了解单元格值的性质,可以使用TYPE函数来确定单元格内容是数字、文本、布尔值、错误还是数组。¹ ISFORMULA 函数是在 Excel 2013 中引入的,早期版本不可用。
我认为你无法完全避免使用VBA,但是你可以创建一个简单的UDF并在Excel中使用它。
例如:
Function IsFormula(Check_Cell As Range)
IsFormula = Check_Cell.HasFormula
End Function
并且
Function IsLink(Check_Cell As Range)
If InStr(1, Check_Cell.Formula, "!", vbTextCompare) Then
IsLink = Check_Cell.HasFormula
End If
End Function
=IsFormula(A1)会在A1中存在公式时返回TRUE,否则返回FALSE =IsLink(A1)会在A1中存在包含“!”的公式时返回TRUE,否则返回FALSE
您可以将它们结合起来创建一个字符串输出“Formula”、“Link”、“Value”
不确定这是否是您想要的,但它似乎可以做到您所要求的一些功能。
http://www.ozgrid.com/VBA/special-cells.htm
这是 range.specialcells
方法。
它返回一个仅包含常量或公式等的范围。
下面展示了如何使用此代码的示例:
Sub CheckForConstants()
Dim x As Range
Set x = Selection.SpecialCells(xlCellTypeConstants, xlNumbers)
MsgBox "address of cells that contain numbers only is " & x.Address
Set x = Selection.SpecialCells(xlCellTypeConstants)
MsgBox "address of cells that contain constant of any type is " & x.Address
End Sub
你选择一个范围,然后执行这个宏,它会返回那些符合要求的单元格的地址。
第一个 x 查找只包含数字的单元格。 第二个 x 查找包含任何常量的单元格
在这种情况下,范围是选择的,但你可以设置为你想要的,例如 range("a1:b5") 等。
我回到工作表并使用了“转到特殊”方法。
显然它也使用了 range.special 方法。
我使用了记录宏选项,这就是我得到的结果。
Selection.SpecialCells(xlCellTypeConstants, 23).Select
Range("M7").Select
Selection.SpecialCells(xlCellTypeFormulas, 23).Select
Range("I6:J16").Select
Selection.SpecialCells(xlCellTypeConstants, 1).Select
Range("L9").Select
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Sheets("CP").Select
Application.CutCopyMode = False
Range("I21").Select
ActiveSheet.DrawingObjects.Select
Application.Goto Reference:="GoToSpecialRoutine"
工作表上的goto特殊功能使用了一些特殊单元格方法。
它还使用其他一些方法。在最后5行代码中,我更改了工作表并要求它转到对象。
它实际上并没有去到它们。它只是选择它们。
工作表CP包含对象,并且它使用最后3行中的代码来选择工作表上的所有对象。
查看goto特殊功能背后的代码最好的方法是记录一个宏,然后在工作表中使用goto / special功能。
完成后,停止录制并查看您记录的宏。
我不知道任何其他按单元格类型选择的功能,但我只是一个新手,所以很容易有这个功能而我不知道。