textjoin函数也来实现筛选的功能
关于怎么用函数实现筛选的功能这个问题,今天是最后一次解析。用的是textjoin这个函数,它是新版本的函数,功能是文本连接。如果你对这个函数不熟悉,可以看《史上最强文本连接函数textjoin的用法》这篇文章。
-01-
具体应用
1.根据姓名查询出所有出现的记录
如下图所示,选中一个姓名,就把所有出现的记录全部查询出来。今天用textjoin这个函数来完成。
在G4单元格中输入公式=TRIM(MID(TEXTJOIN(REPT(" ",99),,IF($A$2:$A$11=$H$1,A$2:A$11,"")),ROW(1:1)*99-98,99)),按ctrl+shift+enter三键结束,右拉下拉完成。这里有个问题,就是日期会变成文本型的数字,最后再说处理方法。
第一步在G4单元格输入公式=IF($A$2:$A$11=$H$1,A$2:A$11,""),这是个if函数的数组公式,也就是用A列的姓名和H1的姓名进行比较,如果相等就返回A列的值,不相等的返回空文本。最后的结果如E列的黄色区域。由于if函数的第2参数没有锁定列号,右拉就会相对变化,返回日期那一列,如F列黄色区域所示。
第二步,要用textjoin这个函数将黄色区域的姓名连接起来,而且要在姓名之间添加分隔符,这个分隔符用的是99个空格。在G4单元格输入公式=TEXTJOIN(REPT(" ",99),,IF($A$2:$A$11=$H$1,A$2:A$11,"")),按三键结束。最后的结果为如下2图。
textjoin的第1参数是99个空格,用REPT(" ",99)表示,第2参数忽略不写,相当于忽略空值,第3参数是要连接的数组。
姓名和姓名之间隔了99个空格,是方便下一步将它们一一提取出来。提取的 公式为=MID(TEXTJOIN(REPT(" ",99),,IF($A$2:$A$11=$H$1,A$2:A$11,"")),ROW(1:1)*99-98,99),按三键结束。
textjoin的结果作为mid的第一参数,提取的方式是从第1位开始,提取99位,将第1个姓名提取出来;下拉,就是从第100位开始,提取99位,将第2个姓名提取出来,以此类推。mid的第2参数构成了一个以1开始,99为步长的等差数列。提取的结果如下。
由于提取的结果中包含空格,所以用trim函数修剪掉空格,最后的公式为=TRIM(MID(TEXTJOIN(REPT(" ",99),,IF($A$2:$A$11=$H$1,A$2:A$11,"")),ROW(1:1)*99-98,99)),按ctrl+shift+enter三键结束,右拉下拉完成。
由于用的是mid函数,所以最后的结果肯定是文本,数字都是文本型的数字,所以日期那一列的数据需要进一步处理。在H4单元格输入公式=TEXT(TRIM(MID(TEXTJOIN(REPT(" ",99),,IF($A$2:$A$11=$H$1,B$2:B$11,"")),ROW(1:1)*99-98,99)),"e/m/d"),按三键结束,下拉完成。用text函数将文本型数字转为文本型日期。
链接:
https://pan.baidu.com/s/1J0nSdNBuDH32x1ExRmF-Ww
提取码:2b7m