如何筛选出B至AA列属性完全一致的付款条款代码(Terms of Payment Codes)
找出属性完全相同的付款条款代码
方法1:辅助列+COUNTIFS(兼容全Excel版本)
如果你的Excel版本不支持动态数组,这个方法最稳妥:
添加辅助列:在AB2单元格输入公式,将B到AA列的所有属性拼接成一个唯一字符串:
=CONCAT(B2:AA2)旧版Excel没有
CONCAT函数的话,直接逐个列拼接:=B2&C2&D2&...&AA2注意:如果属性列包含数值和文本混合的情况,用
TEXT函数统一格式,避免格式差异导致拼接结果错误:=TEXT(B2,"@")&TEXT(C2,"@")&...&TEXT(AA2,"@")下拉填充到所有数据行。
标记重复属性组:在AC2单元格输入公式,判断当前行的属性组是否存在重复:
=COUNTIFS($AB$2:$AB$1000,AB2)>1返回
TRUE表示该付款条款代码有其他代码和它属性完全一致。提取同属性的所有代码:如果需要列出所有匹配的代码,用
TEXTJOIN(Excel 2019及以上):=TEXTJOIN(", ",TRUE,IF($AB$2:$AB$1000=AB2,$A$2:$A$1000,""))旧版Excel按
Ctrl+Shift+Enter作为数组公式输入,或者用LOOKUP返回第一个匹配项:=LOOKUP(2,1/($AB$2:$AB$1000=AB2),$A$2:$A$1000)
方法2:动态数组公式(Excel 365/2021)
利用Excel 365的动态数组功能,无需手动添加辅助列:
2.1 用GROUPBY一键分组(最新版本支持)
直接在空白单元格输入公式,自动按B到AA列的属性分组,聚合对应的付款条款代码:
=GROUPBY(B2:AA2,A2:A1000,TEXTJOIN,", ",0,TRUE)
参数说明:
B2:AA2:分组的依据(所有属性列)A2:A1000:需要聚合的付款条款代码列TEXTJOIN:将同组代码用逗号连接的聚合函数", ":代码之间的分隔符0:忽略空值TRUE:保留属性组的原始值
2.2 用LET封装逻辑(兼容多数365版本)
如果你的Excel还没更新GROUPBY,用LET函数封装步骤,生成每个代码对应的同属性代码列表:
=LET( data_range,A2:AA1000, codes_col,INDEX(data_range,,1), attrs_cols,INDEX(data_range,,2):INDEX(data_range,,27), attr_strings,BYROW(attrs_cols,LAMBDA(row,CONCAT(TEXT(row,"@")))), result,BYROW(codes_col,LAMBDA(code,TEXTJOIN(", ",TRUE,FILTER(codes_col,attr_strings=XLOOKUP(code,codes_col,attr_strings),"")))), result )
这个公式会自动遍历每一行,返回当前代码所有属性完全相同的其他代码。
关键注意点
- 处理混合格式:数值和文本类型的属性,一定要用
TEXT统一格式后再拼接,避免出现"123"和123被判定为不同属性的情况。 - 空白值处理:如果属性列的空白是有效属性,直接保留;如果是缺失值,用
IFNA(row,"")替换后再拼接,确保空白值的一致性。
内容的提问来源于stack exchange,提问作者snowshow
相关产品推荐
相关产品推荐

