Table of contents
在最近的几篇文章中,我们研究了在Excel中从字符串中删除字符的不同方法。 今天,我们将研究另一个用例--如何删除一个特定字符之前或之后的一切。
用 "查找&替换 "删除2个字符之前、之后或之间的文本
对于多个单元格中的数据操作,查找和替换是正确的工具。 要删除一个字符串中特定字符之前或之后的部分,需要执行这些步骤。
- 选择所有你想删除文本的单元格。
- 按Ctrl + H打开 查找和替换 对话。
- 在 发现什么 框中,输入以下组合之一。
- 为了消除文本 在一个特定的字符之前 ,输入前面有星号的字符(*char)。
- 要删除文本 某一人物之后 ,输入字符后的星号(char*)。
- 要删除一个子串 两字之间 ,输入一个由2个字符包围的星号(char*char)。
- 离开 替换 与 箱子是空的。
- 点击 替换所有 .
例如,要删除 逗号后的一切 包括逗号本身,把逗号和星号(,*)放在 发现什么 框,你会得到以下结果。
要删除一个子串 在逗号之前 ,输入星号、逗号和空格(*, )。 发现什么 箱子。
请注意,我们要替换的不仅仅是一个逗号,而是 逗号和空格 如果你的数据是由逗号分隔的,没有空格,那么就使用星号,后面是逗号(*,)。
要删除文本 在两个逗号之间 ,使用星号,周围有逗号(,*,)。
提示:如果你希望名字和电话号码用逗号隔开,那么就在 "姓名 "一栏输入逗号(,)。 替换为 领域。
使用Flash填充删除部分文本
在现代版本的Excel中(2013年及以后的版本),还有一个简单的方法来消除特定字符之前或之后的文字--闪光填充功能。 下面是它的工作原理。
- 在有数据的第一个单元格旁边的单元格中,输入预期结果,然后按回车键。
- 在下一个单元格开始键入一个适当的值。 一旦Excel感觉到你所输入的值的模式,它将显示其余单元格的预览,遵循相同的模式。
- 点击回车键,接受建议。
完成了!
使用公式删除文本
在Microsoft Excel中,许多通过使用内置功能进行的数据操作也可以通过公式来完成。 与之前的方法不同,公式不会对原始数据进行任何改变,并让你对结果有更多的控制。
如何删除一个特定字符后的所有内容
要删除某个特定字符之后的文本,通用公式是:。
LEFT( 电池 , SEARCH(" 炭 ", 电池 ) -1)在这里,我们使用SEARCH函数来获得字符的位置,并将其传递给LEFT函数,因此它从字符串的开头提取相应数量的字符。 从SEARCH返回的数字中减去一个字符,以从结果中排除分隔符。
例如,要删除逗号后的部分字符串,你可以在B2输入以下公式,然后向下拖动到B7。
=left(a2, search(",", a2) -1)
如何删除一个特定字符之前的所有内容
要删除一个文本字符串中某一字符之前的部分内容,通用公式为:。
右图( 电池 , LEN( 电池 ) - SEARCH(" 炭 ", 电池 ))在这里,我们再次在SEARCH的帮助下计算出目标字符的位置,从LEN返回的字符串总长度中减去它,并将差值传递给RIGHT函数,因此它从字符串的末端拉出那么多字符。
例如,要删除逗号前的文本,公式为:。
=right(a2, len(a2) - search(",", a2))
在我们的例子中,逗号后面是一个空格字符。 为了避免结果中出现前导空格,我们用TRIM函数包住核心公式。
=trim(right(a2, len(a2) - search(",", a2))
注意事项。
- 上述两个例子都假设只有 一例 如果有多个分界符出现,文本将在分界符之前/之后被删除。 初审 .
- 搜索功能是 不区分大小写 也就是说,它对小写和大写的字符没有区别。 如果你的特定字符是一个字母,你想区分字母的大小写,那么就使用 区分大小写 用FIND功能代替SEARCH。
如何删除第N次出现的字符后的文本
在一个源字符串包含多个分隔符实例的情况下,你可能需要删除特定实例之后的文本。 为此,使用以下公式。
LEFT( 电池 , find("#", substitute( 电池 , " 炭 ", "#", n )) -1)在哪里? n 是字符的出现时间,在这之后要删除文本。
这个公式的内部逻辑要求使用一些在源数据中不存在的字符,在我们的例子中是一个哈希符号(#)。 如果这个字符在你的数据集中出现,那么用其他东西代替 "#"。
例如,要删除A2中第2个逗号后的所有内容(以及逗号本身),其公式为:。
=left(a2, find("#", substitute(a2, ",", "#", 2)) -1)
这个公式如何运作。
该公式的关键部分是FIND函数,它计算第n个分隔符(在我们的例子中是逗号)的位置。 具体方法如下。
在SUBSTITUTE的帮助下,我们将A2中的第2个逗号替换为哈希符号(或其他任何在你的数据中不存在的字符)。
substitute(a2, ", ", "#", 2)
产生的字符串进入FIND的第2个参数,所以它找到了 "#"在该字符串中的位置。
FIND("#", "Emma, Design# (102) 123-4568")
FIND告诉我们,"#"是字符串中的第13个字符。 要知道它前面的字符数,只要减去1,就可以得到12的结果。
find("#", substitute(a2, ",", "#", 2)) - 1
这个数字直接转到 num_chars LEFT的参数,要求它从A2中提取前12个字符。
=LEFT(A2, 12)
就这样吧!
如何删除第N次出现的字符前的文本
删除某个字符之前的子串的通用公式是。
右(替代( 电池 , " 炭 ", "#", n ), LEN( 电池 ) - find("#", substitute( 电池 , " 炭 ", "#", n )) -1)例如,要剥离A2中第2个逗号之前的文本,公式为:。
=right(substitute(a2, ",", "#", 2), len(a2) - find("#", substitute(a2, ",", "#", 2) -1)
为了消除前导空格,我们再次使用TRIM函数作为包装。
=trim(right(substitute(a2,",", "#", 2), len(a2) - find("#", substitute(a2, ",", "#", 2)))))
这个公式如何运作。
总之,我们找出第n个分隔符之后有多少个字符,然后从右边提取一个相应长度的子串。 下面是公式的分解。
首先,我们将A2中的第2个逗号替换为哈希符号。
substitute(a2, ", ", "#", 2)
产生的字符串会被送到 文本 争论的权利。
RIGHT("Emma, Design# (102) 123-4568", ...。
接下来,我们需要定义从字符串的末端提取多少个字符。 为此,我们找到上述字符串中哈希符号的位置(即13)。
find("#", substitute(a2, ",", "#", 2))
并从总的字符串长度(等于28)中减去它。
len(a2) - find("#", substitute(a2, ",", "#", 2))
差值(15)进入RIGHT的第二个参数,指示它从第一个参数的字符串中提取最后15个字符。
RIGHT("Emma, Design# (102) 123-4568", 15)
输出的是一个子串"(102) 123-4568",它非常接近于期望的结果,除了一个前导空格。 因此,我们使用TRIM函数来摆脱它。
如何删除最后出现的字符后的文本
如果你的值是用数量不等的分隔符分隔的,你可能想删除该分隔符最后一个实例之后的所有内容。 这可以通过以下公式完成。
LEFT( 电池 , find("#", substitute( 电池 , " 炭 ", "#", LEN( 电池 ) - len(substitutional( 电池 , " 炭 ", "")))) -1)假设A列包含员工的各种信息,但最后一个逗号后的值总是一个电话号码。 你的目标是删除电话号码,保留所有其他细节。
为了达到目的,你可以用这个公式删除A2中最后一个逗号后的文本。
=left(a2, find("#", substitute(a2, ",", "#", len(a2) - len( substitute(a2, ",",")))) -1)
将公式复制到该列,你会得到这样的结果。
这个公式如何运作。
这个公式的要点是,我们确定字符串中最后一个分隔符(逗号)的位置,然后从左边拉出一个子串,直到分隔符。 获得分隔符的位置是最棘手的部分,下面是我们如何处理的。
首先,我们找出原始字符串中有多少个逗号,为此,我们将每个逗号替换为空(""),并将得到的字符串提供给LEN函数。
len(substitute(a2,",","))
对于A2,结果是35,这是A2中不含逗号的字符数。
用上述数字减去字符串总长度(38个字符)。
len(a2) - len(substitute(a2,",","))
...你会得到3,这是A2中逗号的总数(也是最后一个逗号的序号)。
接下来,你使用已经熟悉的FIND和SUBSTITUTE函数的组合来获得字符串中最后一个逗号的位置。 实例编号(在我们的例子中是第三个逗号)由上述LEN SUBSTITUTE公式提供。
find("#", substitute(a2, ",", "#", 3))
看起来第3个逗号是A2中的第23个字符,这意味着我们需要提取它前面的22个字符。 因此,我们将上述公式减去1后放入 num_chars 左右的参数。
LEFT(A2, 23-1)
如何删除最后出现的字符前的文本
要删除一个特定字符的最后一个实例之前的所有内容,通用公式是:。
右图( 电池 , LEN( 电池 ) - find("#", substitute( 电池 , " 炭 ", "#", LEN( 电池 ) - len(substitutional( 电池 , " 炭 ", "")))))在我们的示例表中,为了消除最后一个逗号之前的文本,公式采用了这种形式。
=right(a2, len(a2) - find("#", substitute(a2, ",", "#", len(a2) - len( substitute(a2, ",", ")))))
作为点睛之笔,我们将其嵌套到TRIM功能中,以消除前导空间。
=trim(right(a2, len(a2) - find("#", substitute(a2, ",", "#", len(a2) - len( substitute(a2, ",", ")))))))
这个公式如何运作。
综上所述,我们按照上一个例子的解释得到最后一个逗号的位置,然后从字符串的总长度中减去它。
len(a2) - find("#", substitute(a2, ",", "#", len(a2) - len( substitute(a2, ",", ")))))
作为结果,我们得到最后一个逗号后的字符数,并将其传递给RIGHT函数,因此它从字符串的末端带来了这么多字符。
删除字符两侧文字的自定义函数
正如你在上面的例子中所看到的,你可以通过不同的组合使用Excel的本地函数来解决几乎所有的使用情况。 问题是你需要记住一些棘手的公式。 嗯,如果我们自己写一个函数来覆盖所有的情况呢? 听起来是个好主意。 所以,在你的工作簿中添加以下VBA代码(在Excel中插入VBA的详细步骤是这里)。
Function RemoveText(str As String , delimiter As String , occurrence As Integer , is_after As Boolean ) Dim delimiter_num, start_num, delimiter_len As Integer Dim str_result As String delimiter_num = 0 start_num = 1 str_result = " " delimiter_len = Len(delimiter) For i = 1 To occurrence delimiter_num = InStr(start_num, str, delimiter, vbTextCompare) If 0 <delimiter_num Then start_num =delimiter_num + delimiter_len End If Next i If 0 <delimiter_num Then If True = is_after Then str_result = Mid(str, 1, start_num - delimiter_len - 1) Else str_result = Mid(str, start_num) End If End If RemoveText = str_result End Function我们的函数被命名为 移除文本 而它的语法如下。
RemoveText(string, delimiter, occurrence, is_after)在哪里?
字符串 - 是原始文本字符串。 可以用单元格引用来表示。
分隔符 - 要删除的文字之前/之后的字符。
发生情况 - 分隔符的实例。
是_后 - 一个布尔值,表示在分隔符的哪一边删除文本。 可以是一个单独的字符或一个字符序列。
- TRUE - 删除定界符之后的所有内容(包括定界符本身)。
- FALSE - 删除定界符之前的所有内容(包括定界符本身)。
一旦函数的代码被插入到你的工作簿中,你可以使用紧凑而优雅的公式从单元格中删除子串。
例如,要擦除A2中第一个逗号后的所有内容,B2中的公式是:。
=RemoveText(A3, ", ", 1, TRUE)
要删除A2中第一个逗号之前的所有内容,C2中的公式是:。
=RemoveText(A3, ", ", 1, FALSE)
由于我们的自定义函数接受一个 分隔符的字符串 ,我们在第二个参数中加入一个逗号和一个空格(","),以避免事后修剪前导空格的麻烦。
我们的自定义函数工作得很好,不是吗? 但如果你认为这是全面的解决方案,你还没有看到下一个例子呢 :)
删除字符之前、之后或之间的所有内容
为了获得更多的选项,从多个单元格中删除单个字符或文本,通过匹配或位置,将我们的终极套件添加到你的Excel工具箱。
在这里,我们将仔细研究一下 按职位删除 位于的功能。 阿博比特数据 标签> 文本 组>。 移除 .
下面,我们将介绍两种最常见的情况。
删除某些文本前后的所有内容
假设你的所有源字符串包含一些共同的单词或文本,你希望删除该文本之前或之后的所有内容。 要做到这一点,选择你的源数据,运行 按职位删除 工具,并按下图所示进行配置。
- 选择 文本前的所有字符 或 文本后的所有字符 选项,并在旁边的方框中输入关键文本(或字符)。
- 根据大写字母和小写字母是否应被视为不同或相同的字符,选中或不选中 区分大小写 箱子。
- 撞击 移除 .
在这个例子中,我们要删除A2:A8单元格中 "错误 "一词前面的所有字符。
并准确地得到我们所寻找的结果。
删除两个字符之间的文字
当不相关的信息在两个特定的字符之间时,这里是你如何快速删除它。
- 选择 删除所有子字符串 并在下面的方框中输入两个字符。
- 如果 "之间 "的字符也应该被删除,请检查 包括定界符 箱子。
- 点击 移除 .
作为一个例子,我们删除了两个斜体字符(~)之间的所有内容,得到的结果是完美清理的字符串。
要想尝试这个多功能工具所包含的其他有用功能,我鼓励你在本文末尾下载一个评估版。 谢谢你的阅读,希望下周在我们的博客上见到你!
可用的下载
删除第一个或最后一个字符 - 示例(.xlsm文件)
终极套房 - 试用版 (.exe文件)