将列数据转换为行数据

网友投稿 862 2022-10-14

将列数据转换为行数据

使用公式将工作表内一列中的重复项依次移到一行中。具体如下图所示,要将工作表:

转换成工作表:

可以看出,在“数据”工作表中,列A中有些姓名出现1次,有些出现2次,有些出现3次,但在列B中有不同的数据。

现在,需要将“数据”工作表中的数据转换成基于姓名的一行数据,即将与每个姓名相关的列B中的数据放置到单独的一行中。

使用数组公式来解决。在单元格B2中输入公式:

=IFERROR(INDEX(数据!$B$2:$B$7,SMALL(IF(数据!$A$2:$A$7=$A2,ROW(数据!$A$2:$A$7)-ROW(数据!$A$2)+1),COLUMNS($B2:B2))),””)

按Ctrl+Shift+Enter组合键完成输入。结果如下图所示:

将单元格B2向右向下拖动,将公式复制到B2:E4区域后获得所需结果,如下图所示:

公式思路

将列A中的值与“数据”工作表列A中的值相比较,如果相等则获取“数据”工作表中该值所在行的行号,然后根据获取的行号在“数据”工作表列B中找到相应的值并放置在本单元格中,如果没找到则为空。

公式解析

数据!$A$2:$A$7=$A2将单元格A2的值与“数据”工作表列A的值比较,因为前3行都相等,因此结果为:{TRUE;TRUE;TRUE;FALSE;FALSE;FALSE}。

ROW(数据!$A$2:$A$7)-ROW(数据!$A$2)+1获取一个值为1至6的数组:{1;2;3;4;5;6}。

IF(数据!$A$2:$A$7=$A2,ROW(数据!$A$2:$A$7)-ROW(数据!$A$2)+1)的结果为数组{1;2;3;FALSE;FALSE;FALSE}。

COLUMNS($B2:B2)返回当前单元格与B2单元格相间隔的列数,因为当前单元格就在B2,因此返回1。该数值用来作为SMALL函数的参数,获取第k个最小值,即需要第几人数据,从而获取列A值在“数据”工作表中对应的行号。本例中为SMALL({1;2;3;FALSE;FALSE;FALSE},1)。返回第1个最小值,即1。

然后,该值用作INDEX函数的参数:INDEX(数据!$B$2:$B$7,1),获取“数据”工作表列B中相应行的数据,即“数据”工作表单元格B2中的数据。

IFERROR函数用来在没有找到数据时给单元格填充空值,而不是显示错误值。

小结

个人觉得这个例子对于理解数组公式特别有用,值得反复练习与琢磨。

举一反三,本示例也可以用作查找重复值的参考方法。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Excel2016数据按笔画排序的设置方法
下一篇:Excel 2016中快速合并单元格的三种方法
相关文章