Excel 提取 2 个特定字符之间的字符串的公式
Excel formula to extract string between 2 specific character
我有一个数据 table 如下所示:
我正在使用以下论坛:
=MID(LEFT(F2,FIND("D",F2)-1),FIND(" ",F2)+1,LEN(F2))
目标是在我的“访问”列中提取“D”字符后的数值。有些访问在“D”后有 1 位数字,有些是 2 位,最多为 3 位数字。但是,我在上面尝试使用的公式返回空白和#VALUE!只要。我认为 D 和 space 之间的数字字符可以工作,但后来我意识到并非所有人都会有 space(请参阅 C2D16)。谁能解释一下我做错了什么?
TIA
编辑
这里解释了下面公式的工作原理,
=MAX(IFERROR(MID(SUBSTITUTE($F2,"PREDOSE",""),ROW(:),3)/1,""))
首先,我们从字符串中删除或替换 PREDOSE
这个词,即使我们没有这个词,函数也会忽略它并保持原样
=SUBSTITUTE($F2," PREDOSE","")
接下来我们用 MID
函数包装公式,对于起始数字,我们使用 ROW
函数将字符串分成 10 段
=MID(SUBSTITUTE($F2," PREDOSE",""),ROW(:),3)
选择公式并按 F9 或者如果您转到“公式”选项卡并求值 您将看到它给我们一个数组
{"C2D";"2D1";"D1";"1";"";"";"";"";"";""}
因此我们需要忽略数组中的文本部分,因此我们可以乘以 1、除以 1、添加 0 或者我们可以使用 double minus(--)
,它 否定 文本值作为 #VALUE! 错误while 留下 数字部分
因此,为了排除错误值,我们将其包装在 IFERROR 函数
中
=IFERROR(--MID(SUBSTITUTE($F2," PREDOSE",""),ROW(:),3),"")
再次选择并按下 F9 将给我们一个数组 数字和空格
{"";"";"";1;"";"";"";"";"";""}
最后但并非最不重要,我们需要数字作为输出,因此MAX来拯救我们
=MAX(IFERROR(--MID(SUBSTITUTE($F2," PREDOSE",""),ROW(:),3),""))
并给出我们想要的输出!
只要您处理了错误,您原来的方法也能奏效。为了调查错误,例如#value,最好将公式分解成多个部分来定位问题。
=MID(F2,FIND("D",F2)+1,IFERROR(FIND(" ",F2)-FIND("D",F2)-1,LEN(F2)-FIND(" D",F2)))
这是一个我认为更简洁的公式
=MID(F1,FIND("D",F1)+1,IFERROR(FIND(" ",F1),LEN(F1)+1)-(FIND("D",F1)+1))
我认为这实际上代表了你正在尝试做的事情的思考过程。
分解:
=MID(F1,X,Y)
您想要 F1 的中间部分,从 X 开始,长度为 Y
X=FIND("D",F1)+1
起点(X)在第一个D
之后space
Y=IFERROR(FIND(" ",F1),LEN(F1)+1)-(FIND("D",F1)+1)
长度 (Y) 是从 space 字符的位置减去 X 或比整个字符串的长度多 1
另一个:
=-LOOKUP(0,-(MID(F2,FIND("D",F2)+1,{1;2;3})&"**0"))
我有一个数据 table 如下所示:
我正在使用以下论坛:
=MID(LEFT(F2,FIND("D",F2)-1),FIND(" ",F2)+1,LEN(F2))
目标是在我的“访问”列中提取“D”字符后的数值。有些访问在“D”后有 1 位数字,有些是 2 位,最多为 3 位数字。但是,我在上面尝试使用的公式返回空白和#VALUE!只要。我认为 D 和 space 之间的数字字符可以工作,但后来我意识到并非所有人都会有 space(请参阅 C2D16)。谁能解释一下我做错了什么?
TIA
编辑
这里解释了下面公式的工作原理,
=MAX(IFERROR(MID(SUBSTITUTE($F2,"PREDOSE",""),ROW(:),3)/1,""))
首先,我们从字符串中删除或替换 PREDOSE
这个词,即使我们没有这个词,函数也会忽略它并保持原样
=SUBSTITUTE($F2," PREDOSE","")
接下来我们用 MID
函数包装公式,对于起始数字,我们使用 ROW
函数将字符串分成 10 段
=MID(SUBSTITUTE($F2," PREDOSE",""),ROW(:),3)
选择公式并按 F9 或者如果您转到“公式”选项卡并求值 您将看到它给我们一个数组
{"C2D";"2D1";"D1";"1";"";"";"";"";"";""}
因此我们需要忽略数组中的文本部分,因此我们可以乘以 1、除以 1、添加 0 或者我们可以使用 double minus(--)
,它 否定 文本值作为 #VALUE! 错误while 留下 数字部分
因此,为了排除错误值,我们将其包装在 IFERROR 函数
中=IFERROR(--MID(SUBSTITUTE($F2," PREDOSE",""),ROW(:),3),"")
再次选择并按下 F9 将给我们一个数组 数字和空格
{"";"";"";1;"";"";"";"";"";""}
最后但并非最不重要,我们需要数字作为输出,因此MAX来拯救我们
=MAX(IFERROR(--MID(SUBSTITUTE($F2," PREDOSE",""),ROW(:),3),""))
并给出我们想要的输出!
只要您处理了错误,您原来的方法也能奏效。为了调查错误,例如#value,最好将公式分解成多个部分来定位问题。
=MID(F2,FIND("D",F2)+1,IFERROR(FIND(" ",F2)-FIND("D",F2)-1,LEN(F2)-FIND(" D",F2)))
这是一个我认为更简洁的公式
=MID(F1,FIND("D",F1)+1,IFERROR(FIND(" ",F1),LEN(F1)+1)-(FIND("D",F1)+1))
我认为这实际上代表了你正在尝试做的事情的思考过程。
分解:
=MID(F1,X,Y)
您想要 F1 的中间部分,从 X 开始,长度为 Y
X=FIND("D",F1)+1
起点(X)在第一个D
之后spaceY=IFERROR(FIND(" ",F1),LEN(F1)+1)-(FIND("D",F1)+1)
长度 (Y) 是从 space 字符的位置减去 X 或比整个字符串的长度多 1
另一个:
=-LOOKUP(0,-(MID(F2,FIND("D",F2)+1,{1;2;3})&"**0"))