Excel中取单元格内特定非第一个重复字符后内容的函数表达式

之前在工作中使用Excel时遇到一个需要解决的问题:

有一个单元格,其内容表示为“A/B/C",即当中有两个斜杠字符,分割了在单元格内A、B、C这三块内容。现在我需要在另一个单元格中,将这个单元格的”A/B/C"内容中的“C”提取出来,这该如何解决?例如“234/BD/P1X”,得到“P1X"的方法是怎么样的?

这个问题实际上是提取字符串的问题。最初可能想到的是用LEFT()\MID()\RIGHT()函数实现相关字符串的提取。然而很快我们就会意识到,用RIGHT()函数得到字符是不合适的,因为谁都不能说要提取的字符串长度就一定多少长。没有确切的字符串长度,函数是无法使用的。

在这样的背景之下,我们试图通过其他方法实现该效果。如果我们能定位到第二个“/”,那么理论上其之后的剩余字符就能通过某种方式实现完整的抓取。

为了定位到“/”,我们首先想到的是用FIND函数。FIND函数的具体格式为

    FIND(find_text, within_text, [start_num])

其中find_text是指需要找的字符或文本,通常是带引号的字符或字符串内容;

       within_text则表示在哪个范围内找上述的字符或文本,可以是具体的带引号的字符(串),也可以是具有指向性的具体单元格;

       [start_num]指从第几位开始查找,基于第几位开始查找,则之后FIND函数得到的结果是在这个位置的基础上进行的计数。带中括号表示这个参数是可选择的,不是必须有的。

然而这里有一个问题。在不确定具体的[start_num]时,FIND函数只能抽取目标字符在字符串中的第一个。对于本案例中字符串第二个“/”的定位,单纯依靠FIND函数显然是不够的,因为在这种情况下它只会识别第一个“/”。由于单元格内的字符串结构为“A/B/C”,则考虑是否可以让第一个“/”转化为其他与“/”不相干的字符,这样再在外部嵌套FIND函数,就能直接定位到我们想要的第二个“/”。

这里内部转换第一个“/”的方法是使用EXCEL的SUBSTITUTE函数。SUBSTITUTE函数的具体格式为

SUBSTITUTE(文本, 旧字符, 新字符, [替换第几个])

其中“文本”参数可用带引号的内容或所指向的具体单元格表示;旧字符则为所要替换的字符,如这里的“/”;新字符则为将旧字符替换成哪个字符;最后的"[替换第几个]",表达的是字符串中有多个想要替换的该字符时,具体替换第几个,这是个可选的参数,当没有写这个参数时,默认就是换第一个。

这里之所以使用FIND+SUBSTITUTE的两层函数的原因是考虑到这里内容的结构。它有两个“/”,而我们要找的是第二个“/”所在的位置。这意味着我们只需将想要找的那个位置的字符替换成其他特有的字符,就可以用FIND函数实现对该字符所在位置的定位。

以上是在上述条件背景下的单元格提取问题中使用FIND+SUBSTITUTE的一种逻辑构想。还有一种方法是将第一个“/”转化为其他特定字符,从而直接在原字符串中找到第一个“/”(实际原字符串中的第二个“/”)。这种逻辑的原理是和第一种构想是一样的,都是构造出一种转换后的字符串形式,从而能使用FIND函数找到该字符串中的第一个目标字符。

那么有了这种逻辑构想后,我们就能写出一种定位目标字符的EXCEL函数形式:

=FIND("@",SUBSTITUTE(A1,"/","@",2))+1

其中A1是字符串所在的单元格,在该函数中我们是将第二个(SUBSTITUTE函数中的数字“2”)“/”转换成了“@”,从而使用FIND函数寻找这个“@”(整个字符串中唯一一个“@”)。找到这个字符所在的位置之后,再在该基础上+1,这表示是在该位置之后的一位开始进一步提取字符的。这样做的好处就是通过更换字符实现了FIND函数对相关“唯一”字符位置的正确获知。

之所以需要在FIND得到的位置后+1,是为了再在外面嵌套一个MID函数。

=MID(文本, 起始位置, 截取字符数量)

其中第一个参数“文本”可以是字符串所在的单元格,也可以是具体字符串;“起始位置”表示开始抓取字符的位置;“截取字符数量”则表示在起始位置后向右连续要提取几个字符(起始位置字符本身则数量为1,总共多少个字符则数量就对应为X)。

可以看出,在本案例中起始位置就是上面FIND函数加1后的结果,而文本则是对应的单元格A1。现在的核心问题是截取字符数量究竟应该如何确定?

从表面来看,假如“A/B/C”代表的是“年/月/日”或“日/月/年”,“截取字符数量”似乎是可以确认的,但如果字符串C的这部分长度不定,看起来会比较复杂。

实际上,MID函数对于其最后一个参数有一个特性。对于不确定提取多少数量字符时,如果取一个足够大的数(比如超过单元格字符长度的数),其代表的含义就是从所提取字符开始往右连续一直提到字符结尾。

我们可以通过一个实例来验证,假设A1单元格内容为“C2D3E4"。使用MID函数如写出

=MID(A1,3,4)

则得到的输出结果为“D3E4”。但如果写出如下函数

=MID(A1,3,10000)

或者

=MID(A1,3,LEN(A1))

输出结果同样是“D3E4”。这说明对于最后一个参数,其长度只要不低于实际到字符串末尾的字符串长度,那么这就可以实现从定位目标字符到末尾字符的字符段提取。

于是,结合上述的所有内容,我们可以得到上述条件下最终实现单元格特定字符后提取的函数

=MID(A1,FIND("@",SUBSTITUTE(A1,"/","@",2))+1,LEN(A1))

其中LEN(A1)表示的是字符串实际长度,通过不小于完整字符长度的方式,这确保了能提取到最后一个字符。这样就能得到拥有重复目标字符下提取非第一个该字符的后一个字符开始直至末尾的字符串的结果。

给读者留一个思考题:在“A/B/C"这个案例中,如果我想提取"A”或“B”,函数表达式又该如何去写呢?(提示:方法类似,表达式略有不同)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值