这个看似微不足道的操作在公式中的许多情况下都很有用:
A 即可。否则会引发错误的函数:
N(+A1:C3)
乙即可。将范围转换为数字 - 即任何文本为零:
CELL("contents",IF(1,+INDIRECT({"Sheet1!A1","Sheet2!B2","Sheet3!C3"})))
C 即可。返回来自不同工作表的混合数据数组:
'$lastname'
我对此几乎没有发现 - 也许这是一个新发现。
这个问题部分是出于利益的考虑,部分是为了看看是否有人可以进一步了解或找到其他可能的应用 - excel或vba相关?
答案 0 :(得分:5)
在某些例子中,例如对于WORKDAY
和QUOTIENT
,+
正在将范围转换为数组
Analysis ToolPak
,WORKDAY
,NETWORKDAYS
等许多旧的WEEKNUM
函数都不会接受范围作为参数,但是在Excel 2007
或更高版本的excel版本中,他们会接受数组作为参数 - 使用+0
或--
(或显然为+)会将范围转换为数组,所以在Excel 2007中,如果你使用这样的公式:
=AVERAGE(WEEKNUM(A1:A3))
其中A1:A3包含日期
....它会返回错误
但是此版本(使用 CTRL + SHIFT + ENTER 输入的数组)将为您提供周数的平均值:< / p>
=AVERAGE(WEEKNUM(+A1:A3))
答案 1 :(得分:1)
有趣的问题。这显然是某种幕后类型转换。我还没有在C中测试过您的示例,但有趣的是,在前两种情况下,一元+可以被+ 0或Value()替换:
QUOTIENT(Value(A1:A3),4)
WORKDAY(Value(A1:A3),7)
N(Value(A1:C3))
或
jekyll
至于为什么会发生这种情况 - 我不知道。当您在数组公式中使用它们时,某些函数似乎将它们的参数作为字符串传递给Excel,并且添加0(这是一元加的作用)将它们强制转换为数字。在VBA中,我不认为应该使用这个技巧,因为它会导致代码模糊,但知道数组公式是有用的。
答案 2 :(得分:1)
各种测试证实了Barry Houdini提出的阵列解释的范围。我在VBE观察窗口中包含了一些结果供参考:
监视窗口返回返回的有价值的详细信息,这些详细信息在常规公式评估窗口中不可用。请注意,[+A1:A3]
返回变量数组,而[A1:A3]
返回范围引用。此方法还显示带有数组参数的OFFSET
和INDIRECT
返回范围引用的数组。要强制进行数组评估,可以将公式包装在TRANSPOSE
中。
作为一般技术,将公式复制到即时窗口并用方括号括起来,然后在即时窗口中选择公式并拖动到监视窗口。通常不需要单独的代码,但VBA评估方法(或[]快捷方式)不喜欢CELL
或INDIRECT
。检查此类公式的解决方法是使用下面粘贴到新模块中的代码:
Dim v
Function eval(formula As String)
v = Empty
With Application
.Goto "SetV(" & .ConvertFormula(formula, xlA1, xlR1C1) & ")"
End With
eval = v
End Function
Public Function SetV(Value) As Range
v = Value
Set SetV = Selection
End Function