根据产品列表查找包号

Find package number based on list of products

所以我有一个传播sheet,其中显示了产品包装和产品

Package Product
Package1 Product1
Package1 Product2
Package1 Product3
Package2 Product1
Package2 Product3
Package3 Product2
Package4 Product1
Package4 Product2

现在我需要回溯哪个包裹发送给了客户,因为我有一个产品列表。 所以如果我在某处放两行:

Product1
Product2

我需要看到结果

它甚至可以列出所有显示产品匹配数量以及匹配程度的包裹

Package # matches Exact?
Package 4 2 EXACT
Package 1 2 NOT EXACT
Package 2 1 NOT EXACT
Package 3 1 NOT EXACT

我尝试使用 VLOOKUP 和 INDEX/MATCH 但无法得出好的结果。 理想情况下,这一切都应该发生在单独的 sheet 上,我可以在其中将我的产品输入到一些指定的单元格中,并在另一个单元格中获得结果。总共有 180 个包裹和 400 个产品

一种方法是使用最新功能:

F1中的公式:

=LET(A,UNIQUE(A2:A9),B,D2:D3,C,BYROW(A,LAMBDA(a,SUM(COUNTIFS(A2:A9,a,B2:B9,B)))),D,BYROW(A,LAMBDA(a,SUM(COUNTIF(A2:A9,a)))),E,IF((C=D)*(D=COUNTA(B)),"","NOT ")&"EXACT",VSTACK({"Package #","Matches","Exact?"},SORTBY(HSTACK(A,C,E),E,,C,-1,A,)))

我还没有访问 VSTACK()HSTACK() 你可以使用:

=LET(A,UNIQUE(A2:A9),B,D2:D3,C,BYROW(A,LAMBDA(a,SUM(COUNTIFS(A2:A9,a,B2:B9,B)))),D,BYROW(A,LAMBDA(a,SUM(COUNTIF(A2:A9,a)))),E,IF((C=D)*(D=COUNTA(B)),"","NOT ")&"EXACT",SORTBY(CHOOSE({1,2,3},A,C,E),E,,C,-1,A,))

缺点是现在没有headers。

希望不大,但这在没有 Beta 公式或 Lambda 的 Office365 中可以解决问题。

=LET(data,A1:B8,
     x,C1:C2,
          a,INDEX(data,,1),
          ua,UNIQUE(a),
     cu,MMULT(--(TRANSPOSE(a)=ua),SEQUENCE(ROWS(a),,1,0)),
          udata,UNIQUE(data),
                uda,INDEX(udata,,1),
                udb,INDEX(udata,,2),
          fuda,FILTER(uda,MMULT(--(TRANSPOSE(x)=udb),SEQUENCE(ROWS(x),,1,0))),
     cp,MMULT(--(TRANSPOSE(fuda)=ua),SEQUENCE(ROWS(fuda),,1,0)),
FILTER(ua,(cp=ROWS(x))*(cu=ROWS(x))))

它从 A 列 (ua) 中获取唯一值,并计算唯一值在 a 列 (cu) 中出现的次数。

然后 - 为了应对给出错误计数结果的重复项 - 我将数据过滤为唯一数据 (udata)。 这用于根据唯一数据列 B (udb) 使用 MMULT() 搜索值 (x) 过滤此唯一数据 (uda) 的第一列. 这会导致 A 列中唯一值的计数,其中(唯一)B 列与搜索值匹配。计数器称为 cp.

最后,对 A 列的唯一值设置过滤器,其中搜索值的计数等于计数器 cu 并等于计数器 cp