c语言中concat函数,新增函数concat和老函数concatenate的用法

很多时候我们都会用文本连接符&进行连接运算,今天就说2个关于文本连接的函数,一个是concatenate,一个是concat。虽然它们写法上有点相似,但是差别还是挺大的。concatenate和&的作用一样,concat是新增函数。

-01-

concatenate函数

1.函数说明

这个函数是将两个或多个文本字符串连接为一个字符串,相当于&。函数结构如下,可以有255个参数。

CONCATENATE(text1, [text2], ...)

text1 必需,是要合并的文本字符串,可以是字符串、数字或单元格引用。其实也可以是数组。

text2,...可选是其他要合并的文本字符串。

2.示例解释

在D1单元中输入如下图所示公式,结果为"我1爱2你3"。就把它们连起来放在一个单元格中。请注意,这里有6个参数,每个参数都是1个单元格,是一个一个输入的,比较烦琐,我能不能直接选一个区域呢?

219178055_1_20210402114714722_wm

在D1单元格输入如下公式,结果显示为错误值。此时只有一个参数,并且是一个区域。在单元格中选中公式按F9,发现是一个数组,就是选定区域对应的数组。如下第2图所示。说明直接选择一个区域,它是不会给连接起来的。可以说这一点就是它的劣势,因为有时,我们需要将一个区域或者数组的内容连接起来。

219178055_2_20210402114714956_wm

219178055_3_20210402114715144_wm

在D1单元格输入如下公式,结果显示为错误值。此时有2个参数,第1个参数是一个区域,第2个参数是0。在单元格中选中公式按F9,发现是一个数组,如下第2图所示,相当于A1:B3&0,就是第1个参数的每一个单元格和第2个参数的0连接,形成一个新的数组。也就是说,如果它的参数是数组,那么它会按数组的对应关系运算,形成新的数组。

219178055_4_20210402114715410_wm

219178055_5_20210402114715706_wm

3.具体应用

a.制作九九乘法表

在A7单元格中输入公式=IF(ROW(1:1)

219178055_6_202104021147163_wm

concatenate有5个参数代表乘法口诀表达式的5个部分,if判断是为了让右上角的部分显示为空。判断条件是在九九乘法表这个区域中,行号小于列号的就为空。比如B7单元格,它在九九乘法表这个区域中是第1行第2列,行号小于列号,所以为空。

-02-

concat函数

1.函数说明

concat函数是将多个区域和/或字符串的文本组合起来,但不提供分隔符或 IgnoreEmpty 参数。分隔符和IgnoreEmpty是另一个强大的文本连接函数textjoin的参数,这个函数改天讲。它的语法结构如下,

CONCAT(text1, [text2],…)

text1必需要连接的文本项。可以是字符串或字符串数组,如单元格区域。

text2,...可选   要联接的其他文本项。文本项最多可以有 253 个文本参数。每个参数可以是一个字符串或字符串数组,如单元格区域。

如果结果字符串超过 32767 个字符(单元格限制),则 CONCAT 返回 #VALUE! 错误。

2.示例解释

在D1单元格中输入如下公式,结果为"我1爱2你3"。此时只有1个参数,而且是一个区域。当我把公式改为下面第2图的时候,结果还是一样的。此时也是只有1个参数,只是参数是一个数组,而不是一个区域。说明当参数是区域或者数组的时候,它是可以把它们连在一起的。而不像concatenate那样。有了这个功能就能做很多事情了。

219178055_7_20210402114716456_wm

219178055_8_20210402114716628_wm

在D1单元格中输入如下公式,结果为"我1爱2你30"。此时有2个参数,第1个参数是区域,第2个参数为0。它是将所有参数的每个元素一一连接起来,最后只返回1个值,而不是一个数组,有点像sum函数。注意和concatenate的区别。

219178055_9_2021040211471719_wm

它还可以按列的方向连接,如下图公式所示。

219178055_10_20210402114717129_wm

3.具体应用

a.将字符反转

如下图所示,A列是一些字符串,要求将其反转成B列的效果。在B20单元格中输入公式=CONCAT(MID(A20,10-ROW($1:$9),1)),按ctrl+shift+enter三键,向下填充。

219178055_11_20210402114717238_wm

思路是这样的,从右边第1个字符提取1位,第2个字符提取1位,。。。直到提到左边第1个为止。最后用concat连接起来就好了。

ROW($1:$9)是从1到9的一个数组,10-ROW($1:$9)就是从9到1的一个数组。MID(A20,10-ROW($1:$9),1)就是从第9位提1个,从第8位提1个,。。。从第1位提1个。也就是从大到小的提取。最后用concat连起来就好了。

b.提取数字和汉字

如下图所示,A列是随意写的一些字符串,要求将数字和汉字分别提取出来。在B26单元格中输入公式=CONCAT(TEXT(MID(A26,ROW($1:$20),1),"0;;0;")),按ctrl+shift+enter三键,向下填充,这样就将数字提取出来。

219178055_12_20210402114717488_wm

说下思路,先用mid将字符串的每个字符提取出来,形成一个数组。然后用text函数将数组中的数字显示为原来的值,文本显示为空。最后用concat将数组中的元素连接起来。

MID(A26,ROW($1:$20),1)这部分就不说了,相信你已经很明白了。说下text的第2参数"0;;0;",3个分号分成4部分。第1部分0,将正数显示为本身;第2部分什么也不写,将负数显示为空;第3部分0,将0显示为0;第4部分什么也不写,将文本显示为空。这样就把数字显示为本身,文本显示为空。

在C26单元格中输入公式=CONCAT(IFERROR(IF(CODE(MID(A26,ROW($1:$20),1))>256,MID(A26,ROW($1:$20),1),""),"")),按ctrl+shift+enter三键,向下填充。这样就将汉字提取出来,公式有点长,就不详细说明了。

如果只需提取文本,在D26单元格中输入公式=CONCAT(TEXT(MID(A26,ROW($1:$20),1),";;;@")),按ctrl+shift+enter三键,向下填充。

c.按次数重复记录

有个朋友的问题是怎么将左表变成右表,比如在左表中销售部次数是2,那么在右表中销售部的记录就得有2条。这个题用累计数加lookup可以解决,但今天用concat来解决一下。

219178055_13_20210402114717785_wm

在D31单元格中输入公式=CONCAT(REPT(A32:A34&CHAR(10),B32:B34)),按ctrl+shift+enter三键。如下图所示的结果。这里用的rept函数,将A列的部门重复B列的次数,但是重复之前要连接个换行符CHAR(10)。

219178055_14_20210402114718131_wm

我点下自动换行看下它的效果,此时所有记录是出来了,但是还在一个单元格中。

219178055_15_20210402114718519_wm

先将公式复制到另一个单元格粘贴为值,如D33单元格。然后双击D33,选中全部内容,剪切,粘贴到其他单元格就ok了。

219178055_16_202104021147193_wm

219178055_17_20210402114719367_wm

思考题:

如何将数字提取出来,并且在数字中间加个分隔符,像下图一样。

219178055_18_20210402114719894_wm

如果对你有所帮助或启发,请打赏或分享一下,你的支持就是我最大的动力!219178055_19_20210402114720332.png此公众号没有留言功能,如果有问题可以发到邮箱715704566@qq.com,有时间会回复的。

219178055_20_20210402114720347_wm

关注解锁更多函数的用法

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值