评论

从头细聊PHONETIC函数

PHONETIC(音读:方体克)函数,我们抛开他的基本语法不说,来说说在当前论坛上的流行功能。对于众多的Excel函数迷来讲,PHONETIC是具有连接功能的函数,我们来看看方兄的自传小说。

第一回、小试身手

H1单元格书写公式:

=PHONETIC(A1:G1)

我们观察到,结果就是把A1:G1单元格的内容连接在一起。但是,还没完,我们再细细的观察下,C1的#N/A与E1的666都不在合并的结果内呀。

经过多次测试,我们发现方兄(PHONETIC)是很挑食的,他只看到了文本字符,包括中文、英文、标点等。对于错误值和数字视而不见。

第二回、功夫升级

不得已间,我们要质疑下方兄:“你不是不近女色,看不到数字嘛?为什么你又把999纳入到你的房内?

方兄:“999她男扮女装,穿了个文本的外衣,这样我就愿意把她当做男人看,你能把我怎地?

我:“……”

好吧,至此我们掌握了方兄的脾气,纯数字他才假装不看,如果装扮成文本他则照单全收。

第三回、脾气大涨

这个里面A5单元格输入公式:=A3,然后向右拖动到G5单元格。

忍不住抓过来方兄,痛斥:“你给我解释,这是为什么?我这里面的数据与第3行一致,凭什么不给组装到一起?

方兄不紧不慢的推开我的手:“你仔细看看,他们是真正的我要的人吗?都是做过整容手术,用函数公式给变了本真面目的,你以为我看不出来?

我:“……”

方兄的脾气惹不起,只能顺他的意,不用他来连接公式罢了。

第四回、关系缓和

有点抓狂:“方兄,你为什么说话不算话!同样是公式,这里你怎么就给处理了?

方兄:“熬兄(OFFSET)和我关系不错,他自己得到的结果其实并不是常见的数组(方兄的敌人),而只是在表格中画了一片区域给我看,我顺手就帮他处理些事情喽。

我:“……”

原来,方兄并不是不待见函数公式,而是要求公式不要得到“值”,而只是画出来“一片区域”,其他与方兄关系不错的还有INDIRECT,以及有时候和INDEX关系也还过得去。

第五回、迷踪身法

方兄:“聊了这么久,给你展示下我的武功吧,把每个部门的员工连接在一起,然后逗号分割下。

我们来慢慢解读下:首先是

其中MATCH部分是查找到“魏国”在A列的起始位置为2,然后-1就把A1这个起始点便宜到A2格。之后通过COUNTIF来统计出来A列的“魏国”人数4。

于是通过OFFSET,就可以向下扩展4行,得到A2:A5区域。最后的数字2是向右扩展2列,即得到A2:B5数据区域。

PHONETIC(A2:B5):把这片区域全都组装在一起,得到"魏国曹操魏国司马懿魏国荀彧魏国许褚"。

SUBSTITUTE("魏国曹操魏国司马懿魏国荀彧魏国许褚",D2,","):把这个字符串中的所有“魏国”全部都替换为逗号,于是得到结果:",曹操,司马懿,荀彧,许褚",基本上得到最终结果。

MID(",曹操,司马懿,荀彧,许褚",2,99):最后的MID从第2位开始取值,屏蔽掉了开头的逗号,便得到了最终的结果。

第六回、独门暗器

方兄:“这些年,我被大家误解,现在说来算是堵门暗器,其实这才是我当初生出来的原由:提取文本字符串中的拼音字符。我来给你展示下。在Word中可以方便的标注拼音,不用手动输入。然后把这些东西粘贴到Excel中。

“在B1格写下:=PHONETIC(A1),来看看结果吧。

“这些年,我伪装了自己,其实,我的心里一直不能忘记她,我的拼音。”方兄眼圈湿润着。

第七回、整理运动

作者言:在Excel里面,文本的连接一直是一个难点。

2009年前后,某位大神发现了PHONETIC的连接作用,至此算是解决了一部分难点。

然而PHONETIC限制条件苛刻,并不能作为很好的一个桥梁。我们可以在有限的条件下运用他的有点即可。

第八回、昆仑山上

VBA大侠在闭目养神。

使用Office 365、Excel 2019、Excel2021以及WPS表格2021的小伙伴,不慌不忙,因为他们有TEXTJOIN函数。

这个函数是专门来合并字符的,基本用法为:

TEXTJOIN(间隔符号,是否忽略空白单元格,要合并的内容)

如下所示,有两个工作表,其中的“订单”工作表里是不同订单对应的产品代码明细记录:

在汇总表中,需要根据A列的产品代码,把包含该产品代码的所有订单号都合并到左侧单元格里,中间使用顿号隔开。

在汇总表的C2单元格输入以下数组公式,按住SHift+ctrl不放,按回车,然后复制到C4单元格,OK了。

=TEXTJOIN("、",TRUE,IF(订单!B$2:B$12=A2,订单!A$2:A$12,""))

TEXTJOIN第一参数使用顿号作为字符间隔,第二参数使用TRUE,表示忽略空白单元格或是空文本。

第三参数敲黑板,划重点:

IF(订单!B$2:B$12=A2,订单!A$2:A$12,"")

这里用到了IF函数,并且第一参数使用了一个多项的条件对比。

“订单!B$2:B$12=A2”部分,判断订单工作表B列的产品代码是不是等于A2单元格中指定的产品代码,如果符合,则返回订单工作表A列对应的订单号,否则返回空文本,得到结果是这样的:

{"CX-1903-021";"";"CX-1908-027";"";"";"";"CX-2103-036";"";"";"CX-2107-048";""}

最后再使用TEXTJOIN函数,忽略里面的空文本合并字符,就得到咱们需要的结果了。

作者:翟振福返回搜狐,查看更多

责任编辑:

平台声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
阅读 ()
大家都在看
推荐阅读