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