宝哥软件园

将列数据转换为行数据

编辑:宝哥软件园 来源:互联网 时间:2021-09-17

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

转换为工作表:

可以看到,在Data工作表中,A列有些名称出现一次,有些出现两次,有些出现三次,但是B列有不同的数据.

现在,我们需要根据名称将data工作表中的数据转换为一行数据,即把与每个名称相关的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+回车完成输入。结果如下图所示:

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

公式思维

将数据工作表的列A中的值与列A中的值进行比较。如果它们相等,则获取数据工作表中值所在行的行号。然后根据得到的行号在Data工作表的B列找到对应的值,放在这个单元格中。如果没有找到,则为空。

公式分析

数据!$A$2:$A$7=$A2将单元格A2的值与Data工作表的A列的值进行比较,因为前3行都相等,所以结果为:{ TRUE真;真;假;假;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} .

COLUMNS($B2:B2)返回当前单元格和B2单元格之间的列数,因为当前单元格在B2,所以它返回1。该值作为SMALL函数的参数,得到第kth个最小值,即需要的数据个数,从而得到data工作表中A列值对应的行号。在本例中,SMAll({ 1;2;3;假;假;FALSE},1).返回第一个最小值,即1。

然后,这个值被用作INDEX函数的参数:INDEX (data!$B$2:$B$7,1),获取数据工作表B列对应行的数据,即数据工作表B2单元格中的数据。

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

总结

个人认为这个例子对于理解数组公式特别有用,值得反复练习和思考。

通过类比,这个例子也可以作为查找重复值的参考方法。

更多资讯
游戏推荐
更多+