将列数据转换为行数据
使用公式将工作表内一列中的重复项依次移到一行中。具体如下图所示,要将工作表:
转换成工作表:
可以看出,在“数据”工作表中,列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函数用来在没有找到数据时给单元格填充空值,而不是显示错误值。
小结
个人觉得这个例子对于理解数组公式特别有用,值得反复练习与琢磨。
举一反三,本示例也可以用作查找重复值的参考方法。
最新推荐
-
AIDA64怎么设置游戏帧数显示
AIDA64怎么设置游戏帧数显示?AIDA64是一款能够测试软硬件系统信息的工具,详细的显示出电脑的每一个 […]
-
中望cad捕捉点怎么设置 中望cad捕捉点设置
中望cad捕捉点怎么设置?中望cad是一款图纸制作软件,能够进行二维制图和三维制图的图形设计软件,在日常的 […]
-
夜神模拟器设置扬声器怎么设置 电脑夜神模拟器没有声音
夜神模拟器设置扬声器怎么设置?夜神模拟器采用类手机界面视觉设计的PC端桌面软件,采用多内核技术,具有同类模 […]
-
wps如何设置超链接到另一页 wps超链接到另一个表格sheet
wps如何设置超链接到另一页?wps是一款强大的办公软件,支持用户对表格或者文档进行自定义的编辑,同时也可 […]
-
mac os显示器怎么快速黑屏
mac os系统想要快速关闭显示器使其黑屏,也就是进入睡眠状态,该怎么进入呢?有两种方法,详细请看下文介绍。
-
excel如何制作文件夹侧标签 excel做文件夹侧面标签
excel如何制作文件夹侧标签?excel表格不止方便用户对数据进行编辑操作,同样支持用户进行一些文字图形 […]