删除Excel中两个字符之前、之后或之间的文本

  • Share This
Michael Brown

在最近的几篇文章中,我们研究了在Excel中从字符串中删除字符的不同方法。 今天,我们将研究另一个用例--如何删除一个特定字符之前或之后的一切。

    用 "查找&替换 "删除2个字符之前、之后或之间的文本

    对于多个单元格中的数据操作,查找和替换是正确的工具。 要删除一个字符串中特定字符之前或之后的部分,需要执行这些步骤。

    1. 选择所有你想删除文本的单元格。
    2. 按Ctrl + H打开 查找和替换 对话。
    3. 发现什么 框中,输入以下组合之一。
      • 为了消除文本 在一个特定的字符之前 ,输入前面有星号的字符(*char)。
      • 要删除文本 某一人物之后 ,输入字符后的星号(char*)。
      • 要删除一个子串 两字之间 ,输入一个由2个字符包围的星号(char*char)。
    4. 离开 替换 箱子是空的。
    5. 点击 替换所有 .

    例如,要删除 逗号后的一切 包括逗号本身,把逗号和星号(,*)放在 发现什么 框,你会得到以下结果。

    要删除一个子串 在逗号之前 ,输入星号、逗号和空格(*, )。 发现什么 箱子。

    请注意,我们要替换的不仅仅是一个逗号,而是 逗号和空格 如果你的数据是由逗号分隔的,没有空格,那么就使用星号,后面是逗号(*,)。

    要删除文本 在两个逗号之间 ,使用星号,周围有逗号(,*,)。

    提示:如果你希望名字和电话号码用逗号隔开,那么就在 "姓名 "一栏输入逗号(,)。 替换为 领域。

    使用Flash填充删除部分文本

    在现代版本的Excel中(2013年及以后的版本),还有一个简单的方法来消除特定字符之前或之后的文字--闪光填充功能。 下面是它的工作原理。

    1. 在有数据的第一个单元格旁边的单元格中,输入预期结果,然后按回车键。
    2. 在下一个单元格开始键入一个适当的值。 一旦Excel感觉到你所输入的值的模式,它将显示其余单元格的预览,遵循相同的模式。
    3. 点击回车键,接受建议。

    完成了!

    使用公式删除文本

    在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工具箱。

    在这里,我们将仔细研究一下 按职位删除 位于的功能。 阿博比特数据 标签> 文本 组>。 移除 .

    下面,我们将介绍两种最常见的情况。

    删除某些文本前后的所有内容

    假设你的所有源字符串包含一些共同的单词或文本,你希望删除该文本之前或之后的所有内容。 要做到这一点,选择你的源数据,运行 按职位删除 工具,并按下图所示进行配置。

    1. 选择 文本前的所有字符 文本后的所有字符 选项,并在旁边的方框中输入关键文本(或字符)。
    2. 根据大写字母和小写字母是否应被视为不同或相同的字符,选中或不选中 区分大小写 箱子。
    3. 撞击 移除 .

    在这个例子中,我们要删除A2:A8单元格中 "错误 "一词前面的所有字符。

    并准确地得到我们所寻找的结果。

    删除两个字符之间的文字

    当不相关的信息在两个特定的字符之间时,这里是你如何快速删除它。

    1. 选择 删除所有子字符串 并在下面的方框中输入两个字符。
    2. 如果 "之间 "的字符也应该被删除,请检查 包括定界符 箱子。
    3. 点击 移除 .

    作为一个例子,我们删除了两个斜体字符(~)之间的所有内容,得到的结果是完美清理的字符串。

    要想尝试这个多功能工具所包含的其他有用功能,我鼓励你在本文末尾下载一个评估版。 谢谢你的阅读,希望下周在我们的博客上见到你!

    可用的下载

    删除第一个或最后一个字符 - 示例(.xlsm文件)

    终极套房 - 试用版 (.exe文件)

    Michael Brown is a dedicated technology enthusiast with a passion for simplifying complex processes using software tools. With more than a decade of experience in the tech industry, he has honed his skills in Microsoft Excel and Outlook, as well as Google Sheets and Docs. Michael's blog is dedicated to sharing his knowledge and expertise with others, providing easy-to-follow tips and tutorials for improving productivity and efficiency. Whether you're a seasoned professional or a beginner, Michael's blog offers valuable insights and practical advice for getting the most out of these essential software tools.