【问题标题】:MID formula using SEARCH formula to extract text from cellMID 公式使用 SEARCH 公式从单元格中提取文本
【发布时间】:2023-01-12 18:11:13
【问题描述】:

下面是非常简单的公式,但我缺少一些理解,而且看起来简单得令人沮丧。

非常简单的文本提取:

MID(A1,Start Num, Num of Chars)

一个简单的公式文本查找公式,

SEARCH(Find_text, within_text, start_num)

结合这两个公式可以从两个文本字符之间的字段中查找和提取文本,例如“下划线”、“括号”、“逗号”

所以例如提取

要提取的文本 >>> Jimbo Jones

从包含括号的单元格中可以得到一个简单的公式;

示例文本 A1 =事件报告编号 1234,用户 (Jimbo Jones) 状态-待定

公式;

=MID(A1, SEARCH("(", A1)+1, SEARCH(")", A1) - SEARCH("(", A1) -1)

提取的文本 =金博琼斯

逻辑很简单

1.识别包含文本的单元格

2.通过指定第一个可搜索字符来查找起始编号

3.通过搜索第二个可搜索字符找到正在提取的文本的结束编号

4.从结束号中减去开始号得到要提取的字符数

在不使用搜索公式的情况下,代码是;

MID=(A1,32,11) = Jimbo Jones

但是,如果我想在逗号或其他相同字符(例如引号、撇号、星号)之间提取文本,我需要使用以下公式(我发现这是建议的)

=MID(A1, SEARCH(",", A1)+1, SEARCH(",", A1, SEARCH(",", A1) +1) - SEARCH(",",A1) -1)

示例文本 A1事件报告编号 1234 用户 Jimbo Jones,状态待定

提取的文本 =金博琼斯

但是我如何指定其他边界,例如第 3 个和第 4 个逗号之间的文本?

示例文本 A1事件报告,No.1234,用户,Jimbo Jones,Status- pending

我感到困惑的原因是在上面的公式中,excel 找到了逗号的第二次迭代,无论它们在文本中的什么位置,但实际使用的公式与找到第一个逗号的公式相同,字符数似乎自动假设不知何故我想要第二个逗号而不是第一个逗号,我如何指示公式查找逗号的后续迭代,例如第 3、4 或第 9?

我不明白为什么公式找到第二个逗号?

干杯!

【问题讨论】:

  • 我从您尝试的公式中假设您无权访问 O365 函数,例如 TEXTAFTER
  • 在此处查看我如何使用 find()、mid() 和额外的 iferror():stackoverflow.com/a/75070705/4961700
  • 回答为什么它找到第二个,:它从找到第一个+1的地方开始查找它的位置
  • 对于@JosWoolley 的新功能,我建议使用TEXTAFTER()TEXTBEFORE(),对于旧版本我会看一下FILTERXML()。如果您的问题只是提取定界符之间的第 n 个“单词/子字符串”,那么它之前已经被问过并且也包含在链接的帖子中(第二个示例“按位置排列的元素”)。
  • 谢谢 P.b,好的,我明白了,[start_num] 找到第一个逗号,然后加上 +1 从那里开始搜索。

标签: excel excel-formula formula data-extraction


【解决方案1】:

解释你的困惑:

乍一看,它似乎使用相同的公式来查找第一个和第二个搜索符号。但是再看一眼你可能会注意到有一个争论起始编号它告诉一个公式从哪里开始寻找。如果您将第一个符号位置 +1 (SEARCH(",", A1) +1)) 作为该参数,公式将开始在该部分中寻找第一个搜索符号:'No.1234,用户,Jimbo Jones,Status- pending' 并将给出答案 42。你第一次使用第一个公式获得第一名,然后第二次使用上面的公式。只需通过减法找到长度即可。

可能的解决方案:

如果你有办公室 365,使用 TEXTAFTER()TEXTBEFORE() 正如其他人所说,您可以在哪里传递实例编号作为参数:

=TEXTAFTER(TEXTBEFORE(A1,",",4),",",3)

结果:

然后你可以使用TRIM() 来去掉开头和结尾不需要的空格。

如果你使用旧版本的 Office您可以使用 SUBSTITUTE() 作为解决方法,因为它可以让您更改文本中特定符号的第 n 次出现。

选择一个没有出现在您的文本中的符号,并将您搜索到的符号的第 3 次和第 4 次更改为它。然后寻找它们(在这个例子中,我们将替换,#

=MID(A1,SEARCH("#",SUBSTITUTE(A1,",","#",3))+1,SEARCH("#",SUBSTITUTE(A1,",","#",4))-(SEARCH("#",SUBSTITUTE(A1,",","#",3))+1))

小解释:

解释栏C中使用的公式:

C
=SUBSTITUTE(A1,",","#",3)
=SUBSTITUTE(A1,",","#",4)
=SEARCH("#",B1)
=SEARCH("#",B2)
=MID(A1,B3+1,B4-(B3+1))
Full formula:
=MID(A1,SEARCH("#",SUBSTITUTE(A1,",","#",3))+1,SEARCH("#",SUBSTITUTE(A1,",","#",4))-(SEARCH("#",SUBSTITUTE(A1,",","#",3))+1))
Trimmed:
=TRIM(MID(A1,SEARCH("#",SUBSTITUTE(A1,",","#",3))+1,SEARCH("#",SUBSTITUTE(A1,",","#",4))-(SEARCH("#",SUBSTITUTE(A1,",","#",3))+1)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    相关资源
    最近更新 更多