根据产品列表查找包号
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
我需要看到结果
- 套餐 4
它甚至可以列出所有显示产品匹配数量以及匹配程度的包裹
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
。
所以我有一个传播sheet,其中显示了产品包装和产品
Package | Product |
---|---|
Package1 | Product1 |
Package1 | Product2 |
Package1 | Product3 |
Package2 | Product1 |
Package2 | Product3 |
Package3 | Product2 |
Package4 | Product1 |
Package4 | Product2 |
现在我需要回溯哪个包裹发送给了客户,因为我有一个产品列表。 所以如果我在某处放两行:
Product1 |
Product2 |
我需要看到结果
- 套餐 4
它甚至可以列出所有显示产品匹配数量以及匹配程度的包裹
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
。