首页 > 解决方案 > 过滤两个数组以确保如果类别为 x 它是唯一的

问题描述

我有一张如下表

|Claim| |ID CD|

|:---|  |:---|

|757|    |59| 

|757|    |59|

|757|    |60|

|758|    |59|

|758|    |59|

我正在尝试创建一个公式,该公式查看声明列,如果它的 ID 为 59,请确保它是该声明的唯一 ID。如果不显示索赔 ID。

所以对于上面的单元格中的输出将是

757

编辑:已解决

=IFERROR(XLOOKUP(UNIQUE(FILTER(r_trans_clm_id,r_jur_cd="59")),FILTER(r_trans_clm_id,r_jur_cd<>"59"),FILTER(r_trans_clm_id,r_jur_cd<>"59"),"",0),"No Federal Duplicates")

如果由于没有重复而引入错误,则会发生 #calc 错误。

标签: excelexcel-formula

解决方案


好吧,在知道 OP 想要实现什么之后,这个问题实际上是非常有趣的。我的解决方案(使用Excel 365)有点复杂,我很想看看是否有更简单的版本...

假设您的claim列名为List_Claim,并且您的ID CD列名为List_ID

在要返回具有多个的声明的单元格中ID CD,输入以下公式:

=LET(x,--(LEN(UNIQUE(IF(List_Claim=TRANSPOSE(UNIQUE(List_Claim)),List_ID,"")))>0),y,ARRAYTOTEXT(TRANSPOSE(x),1),z,"<t><s>"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(MID(y,2,LEN(y)-2),",",""),0,""),";","</s><s>")&"</s></t>",FILTER(UNIQUE(List_Claim),NOT(FILTERXML(z,"//s[node()]")=1)))

它将以垂直数组的形式返回结果。

以下是我所做工作的一些细分:

  1. 使用LET函数,我声明了以下内容:

名称:x 公式:--(LEN(UNIQUE(IF(List_Claim=TRANSPOSE(UNIQUE(List_Claim)),List_ID,"")))>0)检查每个声明是否有匹配项ID CD,如果有,则返回 1,否则返回 0。因此,如果一个声明有多个匹配项ID CD,则该声明的数组中至少有两个1,例如 {1, 1,0,0,0},否则,您应该在数组中只有一个1,例如 {0,0,1,0,0}

名称:y 公式:=ARRAYTOTEXT(TRANSPOSE(x),1)将数组转换为文本字符串,例如{1,1,0,0,0;0,0,1,0,0}

name: z formula"="<t><s>"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(MID(y,2,LEN(y)-2),",",""),0,""),";","</s><s>")&"</s></t>"来修改文本字符串,以便我可以使用FILTERXML函数将其转换回数组,例如 {11;1}

  1. LET函数的最后一个参数中,输入最终的计算=FILTER(UNIQUE(List_Claim),NOT(FILTERXML(z,"//s[node()]")=1))

这将过滤所有唯一声明并仅显示具有多个 的声明ID CD

示例解决方案


推荐阅读