Table of contents
本教程通过使用实例解释了Excel的REPLACE和SUBSTITUTE函数。 看看如何对文本字符串、数字和日期使用REPLACE函数,以及如何在一个公式中嵌套几个REPLACE或SUBSTITUTE函数。
上周我们讨论了在Excel工作表中使用FIND和SEARCH函数的各种方法。 今天,我们将深入研究另外两个函数,根据单元格中的位置替换文本,或根据内容用一个文本字符串替换另一个。 你可能已经猜到了,我说的是Excel的REPLACE和SUBSTITUTE函数。
Excel的REPLACE函数
Excel中的REPLACE函数允许你将文本串中的一个或几个字符与另一个字符或一组字符交换。
REPLACE(old_text, start_num, num_chars, new_text)如你所见,Excel的REPLACE函数有4个参数,都是必须的。
- 旧文本 - 原始文本(或对有原始文本的单元格的引用),你想在其中替换一些字符。
- 开始_num - 你想替换的old_text中的第一个字符的位置。
- Num_chars - 你想替换的字符数。
- 新文本 - 替换文本。
例如,要改变""一词 太阳 "改为" 儿子 ",你可以使用以下公式。
=REPLACE("太阳", 2, 1, "o")
如果你把原词放在某个单元格中,例如A2,你可以在old_text参数中提供相应的单元格参考。
=REPLACE(A2, 2, 1, "o")
注意:如果start_num或num_chars参数为负数或非数字,Excel替换公式会返回#VALUE!错误。
使用Excel的REPLACE函数处理数值
Excel中的REPLACE函数是用来处理文本字符串的。 当然,你可以用它来替换属于文本字符串的数字字符,例如。
=replace(a2, 7, 4, "2016")
注意,我们将 "2016 "用双引号括起来,就像你通常对文本值所做的那样。
以类似的方式,你可以在一个数字中替换一个或多个数字。 例如。
=replace(a4, 4, 4, "6")
同样,你必须用双引号括住替换值("6")。
注意:Excel的REPLACE公式总是返回一个 文字串 在上面的截图中,注意B2中返回的文本值的左对齐,并与A2中右对齐的原始数字进行比较。 由于它是一个文本值,你将不能在其他计算中使用它,除非你将它转换为数字,例如乘以1或使用如何将文本转换为数字中描述的任何其他方法。
使用Excel的REPLACE函数处理日期
正如你刚才所看到的,REPLACE函数对数字工作得很好,只是它返回的是一个文本字符串:) 记住在Excel内部系统中,日期是作为数字存储的,你可以尝试在日期上使用一些替换公式。 结果将是相当尴尬的。
例如,你在A2中有一个日期,例如14年10月1日,你想改变" 10月 "改为" 11月 "所以,你写下公式REPLACE(A2, 4, 3, "Nov"),告诉Excel从第4个字符开始替换A2单元格中的3个字符...得到的结果如下。
因为 "01-10-14 "只是代表日期的底层序列号(41913)的视觉表现。 因此,我们的替换公式将上述序列号的最后3位数字改为" 11月 "并返回文本字符串 "419Nov"。
为了使Excel的REPLACE函数能够正确地处理日期,你可以通过使用TEXT函数或《如何在Excel中把日期转换成文本》中演示的任何其他技术,把日期转换成文本字符串。 或者,你可以在REPLACE函数的old_text参数中直接嵌入TEXT函数。
=REPLACE(TEXT(A2, "dd-mmm-yy"), 4, 3, "11月")
请记住,上述公式的结果是一个 文字串 如果你确实需要日期而不是文本字符串,使用DATEVALUE函数将Excel REPLACE函数返回的值变成日期。
=DATEVALUE(REPLACE(TEXT(A2, "dd-mmm-yy"), 4, 3, "Nov")
嵌套的REPLACE函数可以在一个单元格中进行多次替换
很多时候,你可能需要在同一个单元格中做多个替换。 当然,你可以做一个替换,将中间结果输出到另外一列,然后再次使用REPLACE函数。 然而,一个更好、更专业的方法是使用 嵌套的REPLACE函数 在这种情况下,"嵌套 "意味着将一个函数放在另一个函数中。
考虑下面的例子,假设你在A列有一个电话号码列表,格式为 "123456789",你想通过添加连字符使它们看起来更像电话号码。 换句话说,你的目标是把 "123456789 "变成 "123-456-789"。
插入第一个连字符很容易。 你写一个通常的Excel替换公式,替换掉 零字符 带连字符,即在单元格的第4个位置添加一个连字符。
=replace(a2,4,0,"-")
上述替换公式的结果如下。
好了,现在我们需要在第8个位置再插入一个连字符。 要做到这一点,你要把上述公式放在另一个Excel REPLACE函数中。 更准确地说,你把它嵌入到 旧文本 另一个函数的参数,因此第二个REPLACE函数将处理第一个REPLACE返回的值,而不是A2单元格中的值。
=REPLACE(REPLACE(A2,4,0,"-"),8,0,"-")
结果是,你得到了所需格式的电话号码。
以类似的方式,你可以使用嵌套的REPLACE函数,通过在适当的地方添加一个正斜杠(/),使文本字符串看起来像日期。
=(replace(replace(a2,3,0,"/"),6,0,"/"))
此外,你可以通过用DATEVALUE函数包装上述REPLACE公式,将文本字符串转换为实际日期。
=datevalue(replace(replace(a2,3,0,"/") ,6,0,"/"))
而且,你在一个公式中可以嵌套的函数数量自然不受限制(现代版本的Excel 2010、2013和2016允许在一个公式中最多8192个字符和最多64个嵌套函数)。
例如,你可以使用3个嵌套的REPLACE函数,让A2中的一个数字像日期和时间一样出现。
=replace(replace(replace(a2,3,0,"/") ,6,0,"/"), 9,0, " "), 12,0, ":")
替换出现在每个单元格中不同位置的字符串
到目前为止,在所有的例子中,我们一直在处理性质相似的数值,并在每个单元格的相同位置进行替换。 但现实生活中的任务往往比这更复杂。 在你的工作表中,要替换的字符不一定出现在每个单元格的相同位置,因此,你将不得不 找到第一个字符的位置 下面的例子将证明我在说什么。
假设你在A列有一个电子邮件地址列表,而一家公司的名字从 "ABC "变成了 "BCA"。 因此,你必须相应地更新所有客户的电子邮件地址。
但问题是,客户名称的长度不同,这就是为什么你不能准确地指定公司名称的开始位置。 换句话说,你不知道在Excel REPLACE函数的start_num参数中应该提供什么值。 要找出它,使用Excel FIND函数来确定字符串"@abc "中第一个字符的位置。
=FIND("@abc",A2)
然后,在你的REPLACE公式的start_num参数中提供上述FIND函数。
=REPLACE(A2, FIND("@abc",A2), 4, "@bca" )
提示:我们在Excel查找和替换公式中加入了"@",以避免意外替换电子邮件地址中的姓名部分。 当然,这种匹配发生的几率非常小,但你仍然可能想在安全方面有所作为。
正如你在下面的截图中所看到的,该公式在寻找和用新文本替换旧文本方面没有问题。 但是,如果没有找到要替换的文本字符串,该公式会返回#VALUE!错误。
因此,让我们把我们的FIND & REPLACE公式包围在IFERROR函数中。
=IFERROR(REPLACE(A2, FIND("@abc",A2), 4, "@bca") ,A2)
而这种改进后的配方效果非常好,不是吗?
REPLACE函数的另一个实际应用是将单元格中的第一个字母大写。 每当你处理一个名字、产品等的列表时,你可以使用上述链接的公式将第一个字母改为大写。
提示:如果你想在原始数据中进行替换,一个更简单的方法是使用Excel的FIND和REPLACE对话框。
Excel的SUBSTITUTE函数
Excel中的SUBSTITUTE函数用指定的字符替换一个或多个给定的字符或文本字符串的实例。
Excel SUBSTITUTE函数的语法如下。
SUBSTITUTE(text, old_text, new_text, [instance_num])前三个参数是必须的,最后一个参数是可选的。
- 文本 - 可以作为测试字符串、单元格引用或其他公式的结果提供。
- 旧文本 - 你想要替换的字符。
- 新文本 - 用来替换old_text的新字符。
- Instance_num - 你想替换的old_text的出现。 如果省略,每一次出现的旧文本都将被替换成新文本。
例如,下面所有的公式都是用A2单元格中的 "2 "替换 "1",但根据你在最后一个参数中提供的数字,返回不同的结果。
=substitute(a2, "1", "2", 1)
- 用 "2 "代替第一次出现的 "1"。
=substitute(a2, "1", "2", 2)
- 用 "2 "代替第二次出现的 "1"。
=substitute(a2, "1", "2")
- 将所有出现的 "1 "替换为 "2"。
在实践中,SUBSTITUTE函数也被用来删除单元格中不需要的字符。 真实的例子请见。
- 如何从字符串中删除字符或单词
- 如何删除单元格中不需要的字符
注意:Excel中的SUBSTITUTE函数是 区分大小写 例如,以下公式将A2单元格中所有大写字母 "X "替换为 "Y",但不会替换任何小写字母 "x "的实例。
用一个公式替代多个值(嵌套的SUBSTITUTE)。
与Excel的REPLACE函数一样,你可以在一个公式中嵌套几个SUBSTITUTE函数,一次做几个替换,即用一个公式替换几个字符或子串。
假设你有一个文本字符串,如" PR1, ML1, T1 在A2单元格中,"PR "代表 "项目","ML "代表 "里程碑","T "表示 "任务"。 你想要的是用全名替换这三个代码。 为了实现这个目标,你可以写3个不同的SUBSTITUTE公式。
=SUBSTITUTE(A2, "PR", "项目")
=SUBSTITUTE(A2, "ML", "Milestone")
=SUBSTITUTE(A2, "T", "Task")
然后将它们互相嵌套。
=SUBSTITUTE(SUBSTITUTE(A2, "PR", "项目"), "ML", "里程碑"), "T", "任务")
注意,我们在每个new_text参数的末尾加了一个空格,以提高可读性。
要了解一次替换多个数值的其他方法,请看如何在Excel中进行大规模查找和替换。
Excel REPLACE与Excel SUBSTITUTE的比较
Excel的REPLACE和SUBSTITUTE函数非常相似,都是用来交换文本字符串的。 两个函数的区别如下。
- SUBSTITUTE取代了一个或多个 实例 所以,如果你知道要替换的文本,可以使用Excel的SUBSTITUTE函数。
- REPLACE改变指定的 位置 因此,如果你知道要替换的字符的位置,可以使用Excel的REPLACE函数。
- Excel中的SUBSTITUTE函数允许添加一个可选的参数(instance_num),指定哪个 发生的情况 of old_text应该被改成new_text。
这就是你如何在Excel中使用SUBSTITUTE和REPLACE函数。 希望这些例子能证明对解决你的任务很有帮助。 感谢你的阅读,希望下周能在我们的博客上看到你。
下载实践工作手册
REPLACE和SUBSTITUTE公式示例(.xlsx文件)。