我想根据供应商代码和分支机构代码对商店代码进行分组。
场景
所以结果应该是这样的:
我怎样才能做到这一点?
答案1
如果将商店代码与其线路的分支代码组合起来,并用一些奇怪的、不太可能使用的字符隔开,那么您将找到并对所有现有组合的列表进行排序。
您稍后会讲到它的明显用途,但它也有一个隐藏的用途:它将为输出表中所需的所有行创建信息,而不必想办法为第一个供应商保留前四行,因为他们有四个分支,但第二个供应商只有两行,第三个供应商只有六行,依此类推。获取已连接的供应商和分支代码列表,使用UNIQUE
配对为每个代码获取一个条目,然后SORT
按供应商和分支的顺序排列它们,这将使您的表格整洁有序,无需外部排序。
然后,该输出中的每一行条目都可以通过公式包装,以提取输出表中供应商代码列的第一部分,并提取输出表中分支列分隔符后的部分。Excel 有一系列新的文本处理功能,其中两个功能将比旧方法更容易实现这一点,尽管“非常”可能有点夸张。
对于第三列,商店代码,FILTER
单独使用商店代码列,并基于上面创建的字符串的第二个参数匹配前两列输出表中两个单元格的类似创建的字符串,将产生商店代码列中与其供应商代码和分支代码配对匹配的所有商店代码的列表。UNIQUE
然后将从每行的列表中删除“额外内容”,SORT
将它们按逻辑顺序排列,TEXTJOIN
并将它们放在连接列表中。
因此,实现此目的的三个公式是:
=TEXTBEFORE( SORT(UNIQUE(Supplier&"|"&Branch)),"|")
=TEXTAFTER( SORT(UNIQUE(Supplier&"|"&Branch)),"|")
=TEXTJOIN(", ",TRUE,SORT(UNIQUE(FILTER(Store, Supplier&"|"&Branch=E2&"|"&F2))))
(如果您的输出表在 E1:G1 中有标题,并且数据从 E2:G2 开始并沿行向下下降。)
前两个是SPILL
公式,但我找不到SPILL
最后一个公式的版本。因此需要将其复制并粘贴下来以匹配其他两列。
您可以通过多种方式将前两列组合成一个公式。以下是其中一个公式:
=CHOOSE( {1,2}, TEXTBEFORE(SORT(UNIQUE(Supplier&"|"&Branch)),"|"), TEXTAFTER(SORT(UNIQUE(Supplier&"|"&Branch)),"|"))
如果可以找到一种方法使第三个SPILL
公式成为公式,则可以将其添加到单个单元格中作为单个公式。