excel

关注公众号 jb51net

关闭
软件教程 > 办公软件 > excel >

表格转换不翻车! excel中filter筛选函数行列互换的技巧

脚本之家

好久不进行答疑了,正好今天一位公众号粉丝后台咨询,如何将表格1的数据布局转换为表格2的数据布局。

如下图所示:

A1:F6区域是一个二维格式表格。行标题为姓名,列标题为星期,姓名与星期的交叉值区域为值班标记“√”。我们想要转换为右侧表2的H1:I6区域,即一列日期,另一列是对应日期值班的姓名。若同一日期对应多个姓名时,不同姓名之间用逗号间隔。

这个问题我们的核心破局函数是FILTER函数,并配合FILTER函数的几个常用的搭档函数共同解决。

首先输入函数:

=TOCOL(B1:F1)

利用TOCOL函数将B1:F1区域的一行星期值转换为一列(行转列)放置到H2:H6区域。

核心函数公式:

=FILTER($B$2:$F$6,$B$1:$F$1=H2)

函数语法:FILTER(数组, 包含条件, [如果无结果返回])

核心原理:

利用FILTER函数,对$B$2:$F$6区域的“√”标记区域进行筛选,当符合$B$1:$F$1区域的星期值与H2单元格的星期值相同时,我们执行对$B$2:$F$6区域对应列的数据筛选命令,很明显是筛选B列“周1”列数据。筛选出来的数据以数组溢出的方式返回。

我们做一个逻辑判断:

=FILTER($B$2:$F$6,$B$1:$F$1=H2)="√"

使FILTER函数的返回结果等于"√",如果逻辑成立,对应的单元格值返回TRUE,如果不成立,则返回FALSE。

通过上面的返回结果不难发现:

通过H2单元格“周一”所筛选出来的B列“周一”列的“√”值(逻辑值TRUE),其左侧对应的姓名即“周一”所对应的值班姓名。

所以我们利用FILTER函数的搭档函数IF函数:

=IF(FILTER($B$2:$F$6,$B$1:$F$1=H2)="√",$A$2:$A$6,"")

如果IF函数的第一参数测试条件为TRUE时,返回$A$2:$A$6对应的姓名,否则返回空值即可。

至此“周一”所对应的值班姓名已显示出来,不过输出值为数组溢出,纵向区域显示。

要想将上一步的返回结果合并到一个单元格中,可以使用FILTER函数的另外一个搭档TEXTJOIN函数:

=TEXTJOIN(",",,IF(FILTER($B$2:$F$6,$B$1:$F$1=H2)="√",$A$2:$A$6,""))

利用TEXTJOIN函数,用分隔符逗号,跳过第2参数,将上一步的返回结果合并。

推荐阅读:传统筛选点到手抽筋? excel中FILTER函数让你告别手动筛选的烦恼