EXCEL中A列内容重复,B列不重复,提取对应B列内容至C列,按行排序

例如:A列1,在B列中对应很多种值,提取A列唯一,对应B列多种值,在C列开始将对应值按行一一列出如图,将标黄的位置转换成红色位置的形式

    复制A列并去重复,然后根据去重的结果进行数据筛选即可:

    筛选公式为:

    =INDEX($B:$B,SMALL(IF($A$1:$A$99=$D1,ROW($1:$99),99),COLUMN(A$1)))&""

    如图所示:

追问

为什么数据量大了,会有很多在E列显示0

追答

公式根据数据量修正,大于99行,公式中的99改成999,大于999行公式中的99改成9999,以此类推。当然你也可以直接使用很大的数值,但是使用较小数值的目的是提高运算效率。

追问

那F列的命令修正哪个呢?直接右拉不对啊

追答

这里没有命令,只有公式,右拉不对说明你的公式是错误的。
数组公式,公式输完后按ctrl+shift+enter产生花括号。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-09-14

下图可供参考,需要应用match,small等数组函数,要按Ctrl+Shift+Enter完成数组公式的输入。

图中D1单元格填写:=INDEX($A$1:$A$11,SMALL(IF(MATCH(A$1:A$11,A$1:A$11,0)=ROW($1:$11),ROW($1:$11)),ROW(A1)))并下拉

图中E1单元格修改优化一下:=IFERROR(LARGE(($A$1:$A$11=$D1)*$B$1:$B$11,COUNTIF($A:$A,$D1)-COLUMN()+5),""),再右拉,下拉。

第2个回答  2019-07-29

=INDEX($B$1:$B$18,SMALL(IF($A$1:$A$18=$E1,ROW($1:$18)),COLUMN(A1)))

再屏蔽下错误值即可。

当然也可以使用textjoin函数(2019及365版)在一个单元格生成后再分列,或者使用PowerQuery的分组功能再分列。

第3个回答  2019-07-29

E1=IFERROR(INDEX($B:$B,SMALL(IF($D2=$A$2:$A$29,ROW($A$2:$A$29)),COLUMN(A1))),"")

CTRL+SHIFT+回车求值,右拉和下拉

第4个回答  2019-07-29
1、复制A列数据整个列到在D列,然后选择D列,再点:“数据”==>“删除重复项“,确定……
2、在C2单元格输入公式:
=COUNTIFS(A$2:A2,A2,B$2:B2,B2)
复制并下拉,让不重复的A、B列数值显示为1
3、在E2单元格输入数组公式:
=IFERROR(INDEX($B$2:$B$29,SMALL(IF(($C$2:$C$29=1)*($A$2:$A$29=$D2),ROW($1:$28),4^8),COLUMN(A1))),"")
复制并下拉和右拉,即可
注意:上面的公式为数组公式,粘贴或者输入公式后必须同时按CTRL+SHIFT+ENTER这3个键结束,否则公式无效
相似回答