IMO Excel对空细胞进行了奇怪的处理。
我正在构建一个复杂的数组公式。其中一个引用范围包含可能或可能不为空的单元格,如果不为空,则它们可以包含数值和字符串。
如果单元格不为空,我可以使用什么函数来获取单元格的值,如果单元格为空,可以使用“”(或其他任何非数字的,例如#N/A
)
我想得到这样的工作:
=MIN(OFFSET(<column vector that contains text, numbers and empty cells>;<row vector of indices>-1;0))
此形式的公式会返回#ARG
错误,如Why this array formula doesn't work?的答案中所述。
但当我在OFFSET
前加N
时,会将任何空单元格转换为0
,因此最终结果为0
(除非在=MIN(L(OFFSET(<column vector>;<row vector of indices>-1;0)))
中有负数列矢量)。
OFFSET
是否有任何公式,只取消引用=MIN(IF(OFFSET(<column vector>;<row vector of indices>-1;0)="",L(OFFSET(<column vector>;<row vector of indices>-1;0)),""))
返回的引用,保留空单元格的“空白”?或者也许有另一种解决问题的方法,比如
#ARG
(此示例也失败了=
,因为据我所知,我还需要取消引用OFFSET
测试的数组引用。
如果可能的话,我更喜欢使用Excel 2007内置函数。而且没有VBA。
我会接受任何解决方案,使用恒定数量的单元格而不管每个输入数组的大小。
编辑:
作为旁注,我想知道OFFSET
返回的数组有什么问题?这个简单的例子非常有效:
...虽然{{1}}返回的数组不知何故想在公式中单独存在。
答案 0 :(得分:3)
可能还有另一种选择,但目前我还没有看到它......
您可以使用像这样的IF
来过滤掉零 =MIN(IF(N(OFFSET(INDIRECT($A$2),$C4:$G4-1,0))<>0,N(OFFSET(INDIRECT($A$2),$C4:$G4-1,0))))
但是这不会区分范围内的任何实际零和N函数遇到空白或文本时产生的零
修改强>
此版本应该可以使用
=MIN(IF(COUNTBLANK(OFFSET(INDIRECT($A$2),$C4:$G4-1,0,1))+LEN(T(OFFSET(INDIRECT($A$2),$C4:$G4-1,0,1))),"",N(OFFSET(INDIRECT($A$2),$C4:$G4-1,0,1))))
这里可能并不完全相关,但问题是找到可以处理OFFSET返回的“引用数组”的函数,这种类型的设置 - N
和T
工作如此处所示COUNTBLANK
。可以在OFFSET输出上使用的其他函数是SUBTOTAL
和COUNTIF
。请注意,COUNTBLANK
(以及SUBTOTAL
和COUNTIF
)可以在范围内工作,而T
和N
仅适用于单个值 - 如果后者的功能是应用于范围,他们只是查看范围中的第一个值 - 因为我能够使用OFFSET
而没有“高度”参数,但你需要使用COUNTBLANK
(这是一个好习惯进入所以OFFSET
应该有最后的1在这里
= OFFSET(INDIRECT($ A $ 2),$ C4:$ G4-1,0,1)
答案 1 :(得分:0)
在B1中考虑:
= IF(ISBLANK(A1),“没有”,A1)
因此,如果A1包含公式:
= “”
然后B1也会显示空值。
答案 2 :(得分:0)
另一种可能性:
=MIN(CELL("contents",OFFSET(INDIRECT($A$2),N(INDEX($C4:$G4-1,)),0)))
注意:N(INDEX(...))
部分是用于强制执行数组评估的技巧。