Sto*_*ant 5 excel excel-formula
该问题基于我回答的其他人的问题。如果需要,可以在这里找到原始问题。(而且,也许提供比我更好的答案。)但是,回答这个问题所需的一切都在这里。
背景
给定A1:C5中的以下数据
+-------------+--------+----------+
| Invoice Nbr | Type | Status |
+-------------+--------+----------+
| A0001 | Credit | Paid |
| A0002 | Credit | Not Paid |
| B0001 | Debit | Paid |
| B0002 | Debit | Not Paid |
+-------------+--------+----------+
Run Code Online (Sandbox Code Playgroud)
目的是使用评估两列的数组公式在表中查找特定值。也就是说,给我第一张发票(A列),其中类型为借方,状态为未付。
我的第一个答案是尝试解决我认为是OP条件的问题。我围绕两个条件放置了一个AND包装器,如下所示:
{=INDEX($A$2:$A$5,
SMALL(IF(AND($B$2:$B$5 = "Debit",
$C$2:$C$5 = "Not Paid"),
ROW($A$2:$A$5)-ROW($A$2)+1),
1)
)}
Run Code Online (Sandbox Code Playgroud)
但是,那没有用。
我最终提出了这个答案,因为它确实有效:
{=INDEX($A$2:$A$5,
SMALL(IF($B$2:$B$5 & $C$2:$C$5 = "DebitNot Paid",
ROW($A$2:$A$5)-ROW($A$2)+1),
1)
)}
Run Code Online (Sandbox Code Playgroud)
我的问题
在Excel中,数组公式有时对我来说是很大的麻烦。它看起来像任何一个应该提供的结果B0002。实际上,只有第二个公式给出了期望的结果。Excel(2013)遵循的原则或评估过程是这样的?或者,换句话说,我对Excel如何管理数组公式不了解?
@StoneGiant 是对的。有些函数不能在数组公式中使用,因为它们唯一的“存在原因”是将数组转换为标量值。有时您实际上希望这些函数返回数组公式内的单个值,那么公式执行算法如何知道您想要哪种方式。
AND()都是OR()很好的例子。=AND(array of values)返回单个值。MIN()另一个例子。取数组公式
=SUM((A1:A10="鲍勃")*(最小值(B1:B10))
MIN()应该采用一堆值并返回最低的值。如何编程MIN()返回一个数组?您在什么情况下决定什么是最低的?你不能。这就是为什么它在数组公式中不起作用的原因。
采取SMALL()下一步。它可以返回一个数组公式,因为它不仅应该返回最小值,而且应该返回第 n 个最低值。由于第 n 个参数,您现在可以返回一个数组
=SMALL(A1:A10,{2,3})
Run Code Online (Sandbox Code Playgroud)
这将返回一个包含两个元素的数组。MS 可以进行小型编程,使其不能用作数组公式,但总的来说,我发现它们在任何实用的地方都包含了数组功能。
我说的AND()和OR()都是很好的例子。MS 可以对它们进行编程以返回一个像@StoneGiant 的评论那样的数组。这对我来说是一个奇怪的设计决定,但他们本来可以做到的。但他们在数组公式中已经有了 AND 和 OR。AND 相乘,OR 相加。
=MAX((B2:B5="Debit)*(C2:C5="Not Paid")*(ROW(B2:B5))
Run Code Online (Sandbox Code Playgroud)
这将返回借方但未支付的最后一行的行号。(您的示例问题想要第一个,但 MIN 引入了使该示例复杂化的问题)。等式之间的乘法与 AND 相同。如果您希望最后一行是借方,并且 C 列显示“未付款”或“不确定”,您可以通过加法来实现。
=MAX((B2:B5="Debit)*((C2:C5="Not Paid")+(C2:C5="Not Sure"))*(ROW(B2:B5))
Run Code Online (Sandbox Code Playgroud)
加号是这两组括号之间的 OR。该 OR 的结果作为 AND(相乘)包含在其他括号中。
您可以将它们放入索引中
=INDEX(A2:A5, MAX((B2:B5="Debit)*(C2:C5="Not Paid")*(ROW(B2:B5)))
Run Code Online (Sandbox Code Playgroud)
因此,为了回答您的问题,我认为:一般来说,旨在将一堆值转换为一个值的函数在数组公式中不起作用。AND()并且OR()有些特殊,因为加法和减法已经在数组公式中执行了。
在此处查看有关数组的更多信息http://dailydoseofexcel.com/archives/2004/04/05/anatomy-of-an-array-formula/
| 归档时间: |
|
| 查看次数: |
287 次 |
| 最近记录: |