Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带条件逻辑的嵌套excel函数_Excel_Excel Formula - Fatal编程技术网

带条件逻辑的嵌套excel函数

带条件逻辑的嵌套excel函数,excel,excel-formula,Excel,Excel Formula,刚刚开始使用Excel,我正在使用一个数据库提取,在这里,我只需要在另一列中的项是唯一的情况下计算值 以下是我的出发点: =SUMPRODUCT(COUNTIF(C3:C94735,{“共享内容对象参考模型1.2”,“编写的SCORM/AICC内容”,“编写的外部Web内容”})) 我想弄清楚的是这样做的语法- =sumproduct(Countif range1标准…,其中range2标准=“为唯一值”) 我说得对吗?语法有点混乱,我不确定我是否为任务选择了正确的函数 如果源数据按键值[A]排

刚刚开始使用Excel,我正在使用一个数据库提取,在这里,我只需要在另一列中的项是唯一的情况下计算值

以下是我的出发点:

=SUMPRODUCT(COUNTIF(C3:C94735,{“共享内容对象参考模型1.2”,“编写的SCORM/AICC内容”,“编写的外部Web内容”}))

我想弄清楚的是这样做的语法-

=sumproduct(Countif range1标准…,其中range2标准=“为唯一值”)

我说得对吗?语法有点混乱,我不确定我是否为任务选择了正确的函数


如果源数据按键值[A]排序,则从确定键列的出现开始

B2: =IF(A2=A1;B1+1;1)
下一步确定组和

C2: =SUMIF($A$2:$A$9;A2;$B$2:$B$9)
如果键的组和正好为1,则键是唯一的

D2: =(C2=1)
要对符合特定标准且唯一的记录进行计数,请在a
=IF(AND(D2,[yourconment];1;0)
中包含D列,并对该列求和

另一种选择是,如果排序列表中的键不等于其前一个键和后一个键,则在排序列表中指定一个唯一的键,这样您就可以找到唯一的记录,如

E2: =AND(A2<>A1;A2<>A3)
G2: =IF(AND(E2;F2="this");1;0)
E2:=和(A2A1;A2A3)
G2:=IF(和(E2;F2=“this”);1;0)
当然,E和G可以组合成一个单一的公式(不确定是否有帮助…)

G2(2):=IF(和(和(A2A1;A2A3);F2=“this”);1;0)
解析不必要的嵌套AND:

G2(3): =IF(AND(A2<>A1;A2<>A3;F2="this");1;0)
G2(3):=IF(和(A2A1;A2A3;F2=“this”);1;0)


第2行中的所有公式都应该复制到列表的末尾

我一周前刚刚解决了同样的问题

即使您不能总是对分组列(在您的例子中是J)进行排序,这种方法也能工作。如果您能保持数据排序,@MikeD的解决方案将更好地扩展

首先,你知道计算唯一数字的频率技巧吗?频率是用来创建柱状图的。它需要两个数组,“数据”和“箱子”。它对“箱子”进行排序,然后创建一个比“箱子”长一个的输出数组。然后它取下“数据”中的每个值,并确定它属于哪个箱子,并按顺序递增输出数组gly。它返回数组。重要的一点是:如果一个值多次出现在“bin”中,则表示该bin的任何“data”值都会在第一次出现时出现。诀窍是对“data”和“bin”使用相同的数组。仔细想想,输入中的每个唯一数字的输出中都有一个非零值。不是吗它只计算数字

简言之,我使用以下方法:

=SUM(SIGN(FREQUENCY(<array>,<array>)))
请注意,这需要将
ctrl-shift-enter
用作数组公式

由于我分组唯一性所依据的值是文本(与您的一样),因此我需要将其转换为数字。我使用:

MATCH($C$2:$C$10,$C$2:$C$10,0)
请注意,这也需要
ctrl-shift-enter

这是一个数值数组,我在其中寻找唯一性:

IF(($A$2:$A$10="red")*ISNUMBER(MATCH($B$2:$B$10,{"orange","grapefruit","lemon","lime"},0)),MATCH($C$2:$C$10,$C$2:$C$10,0),"")
现在我将其插入我的唯一性计数器:

=SUM(SIGN(FREQUENCY(<array>,<array>)))
同样,必须使用
ctrl-shift-enter
将其作为数组公式输入。用SUMPRODUCT替换SUM不会减少它

在您的示例中,您将使用以下内容:

=SUM(SIGN(FREQUENCY(
    IF(ISNUMBER(MATCH($C$3:$C$94735,{"Sharable Content Object Reference Model 1.2","Authored SCORM/AICC content","Authored External Web Content"},0)),MATCH($J$3:$J$94735,$J$3:$J$94735,0),""),
    IF(ISNUMBER(MATCH($C$3:$C$94735,{"Sharable Content Object Reference Model 1.2","Authored SCORM/AICC content","Authored External Web Content"},0)),MATCH($J$3:$J$94735,$J$3:$J$94735,0),"")
)))
不过,我会注意到,在像您这样大的数据集上,缩放可能是一个问题。我在更大的数据集上测试了它,它在10k行的数量级上相当快,但在100k行的数量级上却非常慢,比如您的。内部阵列非常快,但频率函数变慢了。我不确定,但我猜它介于(n log n)和O(n^2),具体取决于排序的实现方式


也许这无关紧要——所有这些都不是易变的,所以在刷新数据时只需要计算一次。但是,如果列数据正在更改,这可能会很痛苦。

您可以发布一些示例数据,说明它在工作表中的布局方式吗?这样会更容易理解。当然,我已经用一张图片更新了帖子。屏幕上shot不是实际的表(用于保护敏感数据),但是yes countif在本例中使用B3…,它确实有效。我正在测试每列中的重复项,以找到真正的记录计数。因此,您在第J列中查找,以确保该值是唯一的。然后在第B列中查看它是否是公式中的值之一。然后呢?
=SUM(SIGN(FREQUENCY(<array>,<array>)))
=SUM(SIGN(FREQUENCY(
    IF(($A$2:$A$10="red")*ISNUMBER(MATCH($B$2:$B$10,{"orange","grapefruit","lemon","lime"},0)),MATCH($C$2:$C$10,$C$2:$C$10,0),""),
    IF(($A$2:$A$10="red")*ISNUMBER(MATCH($B$2:$B$10,{"orange","grapefruit","lemon","lime"},0)),MATCH($C$2:$C$10,$C$2:$C$10,0),"")
)))
=SUM(SIGN(FREQUENCY(
    IF(ISNUMBER(MATCH($C$3:$C$94735,{"Sharable Content Object Reference Model 1.2","Authored SCORM/AICC content","Authored External Web Content"},0)),MATCH($J$3:$J$94735,$J$3:$J$94735,0),""),
    IF(ISNUMBER(MATCH($C$3:$C$94735,{"Sharable Content Object Reference Model 1.2","Authored SCORM/AICC content","Authored External Web Content"},0)),MATCH($J$3:$J$94735,$J$3:$J$94735,0),"")
)))