Excel 从字符串中间提取不同长度的字符串
我试图从下面工作表的中间提取DocType(VARG、NOR、RMRN、CHNG、ADCN)。正如您所看到的,在不同的字符串中没有一致性。我试图提取嵌入字符串中的doctype,并将其放置在图纸单元格左侧相应的doctype单元格中。唉,我无法确定这样做的公式。任何帮助都将不胜感激Excel 从字符串中间提取不同长度的字符串,excel,formulas,Excel,Formulas,我试图从下面工作表的中间提取DocType(VARG、NOR、RMRN、CHNG、ADCN)。正如您所看到的,在不同的字符串中没有一致性。我试图提取嵌入字符串中的doctype,并将其放置在图纸单元格左侧相应的doctype单元格中。唉,我无法确定这样做的公式。任何帮助都将不胜感激 DocType Drawing Sheet 100188-NOR03046 10190635-VARG003-V-013R1 10190
DocType Drawing Sheet
100188-NOR03046
10190635-VARG003-V-013R1
10190635-VARG003-V-018
1086-CHNG121701
10908077-RMRNR0190
11613002-NOR1-1
11627748-NOR07146
11639519-ADCN30352
116-NOR6458
11664680-NOR75941R1
12292527-NORGEO-5343
12292400-NORWIP09335
12292527-NORGEO-5343
我使用了这个公式:
=MID(I679,搜索(“-”,I679)+1,如果(iError(值(MID(I679,搜索(“-”,I679)+4,1)),4,3))
但是对于下面列出的值,我得到了以下结果:
DocType Drawing Sheet Correct Result Should Be
NORG 12292527-NORGEO-5343 NOR
NORW 12292400-NORWIP09335 NOR
VARG 10190635-VARG003-V-013R1 VAR
VARG 12292-VARG003-V-016 VAR
R-AD 12295729-R-ADCN167238 ADCN
31-A 12359705-31-ADCN71449 ADCN
R2-A RM12293172-R2-ADCN183214 ADCN
129 RM-12976612-RM2-ADCN183868 ADCN
19- B5-19-1676-NORFSV00098R1 NOR
NORW 12517164-NORWIP10095 NOR
如果你需要更多的例子,请告诉我
我还尝试了以下公式,但它只产生了0(零):
“…不同字符串中没有一致的内容”-不正确。据我所见,第一个“-”后面的前3-4个字符包含数据类型。如果第4个字符是数字,则为3个字符。使用任何存在的数据一致性来创建测试,以便根据需要调整数据
这可以像这样工作[假设您的数据从B2开始,这个公式进入C2,并向下拖动]:
=SEARCH("-",B2)
这将为您提供单元格中第一个“-”的字符位置。然后将其放入D2并向下拖动:
=ISERROR(VALUE(MID(B2,C2+4,1)))
=MID(B2,C2+1,IF(D2,4,3))
这将尝试将“-”后面的字符4空格转换为值。如果它是一个字母,它将创建一个错误,结果为TRUE。否则它将显示错误
然后将其放入E2并向下拖动:
=ISERROR(VALUE(MID(B2,C2+4,1)))
=MID(B2,C2+1,IF(D2,4,3))
这表示-取单元格B2,从“-”后的字符开始,返回3-4个字符的文本。如果D2为真[上述公式中存在错误,意味着第4个字符不是数字],则表示4个空格。否则,如果D2为FALSE,则为3个空格
也可以将其全部放在C2中的单个公式中,如下所示:
=MID(B2,SEARCH("-",B2)+1,IF(ISERROR(VALUE(MID(B2,SEARCH("-",B2)+4,1))),4,3))
所需子字符串前面是字符串中的第一个连字符,后面是下一个连字符或数字的解决方案:-
=LEFT(RIGHT(B2,LEN(B2)-FIND("-",B2)),
MIN(IF(ISNUMBER(FIND({0,1,2,3,4,5,6,7,8,9,"-"},RIGHT(B2,LEN(B2)-FIND("-",B2)))),
FIND({0,1,2,3,4,5,6,7,8,9,"-"},RIGHT(B2,LEN(B2)-FIND("-",B2)))))-1)
如果您有可能的文档类型列表,您可以按如下方式搜索它们:-
=IFERROR(
INDEX({"ADCN","CHNG","DEVN","EER","NOR","PPEP","RMRN","SCN","VAR","WAIV"},
MATCH("ZZZ",IF(ISNUMBER(FIND( {"ADCN","CHNG","DEVN","EER","NOR","PPEP","RMRN","SCN","VAR","WAIV"},B2)),
{"ADCN","CHNG","DEVN","EER","NOR","PPEP","RMRN","SCN","VAR","WAIV"}))),
"")
是否只有所述的五种博士类型?或者doctype可以是NORGEO等吗?在每种情况下,doctype具体是哪个部分?例如,在第2行中,是VARG003-V-018还是VARG003?也许您应该将预期结果添加到表中。上面的问题中已经列出了一些doctype,但是doctype的完整列表是:ADCN、CHNG、DEVN、EER、NOR、PPEP、RMRN、SCN、VAR、WAIV。所以在NORGEO的例子中,doctype是NOR。我也尝试过这个荒谬的公式,但每次都得到零。有人能告诉我为什么,因为它看起来很好=如果(I9=“VAR”、“VAR”、“I9=“ADCN”、“ADCN”、“I9=“CHNG”、“CHNG”、“I9=“DEVN”、“DEVN”、“I9=“EER”、“EER”、“I9=“NOR”、“NOR”、“I9=”PPEP”、“PPEP”、“I9=“RMRN”、“RMRN”、“I9=“SCN”、“SCN”、“I9=“WAIV”、“WAIV”、“0‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘),您的公式不正确,因为I9不包含“VAR”。5=50吗?不,50包含5。您能更具体一点吗?doctype应该是ADCN、CHNG、DEVN、EER、NOR、PPEP、RMRN、SCN、VAR、WAIV。因此,在您的示例中,第5-6行应该是VAR,第8行应该是RMRN,第14-16行应该是NOR。我已经将此添加到我的回答中了。这是最接近的答案,但我仍然得到一些不正确的答案。我列出了一些示例的代码、值和结果。10190635-VARG003-V-013R1,代码=MID(I20,搜索(“-”,I20)+1,如果(iError(VALUE(MID(I20,搜索(“-”,I20)+4,1)),4,3)给我VARG的结果,它应该是12292527-NORGEO-5343,代码=MID(I679,搜索(“-”,I679)+1,如果(VALUE(MID(I679,搜索(“-”,I679)+4,1)),4,3))给我NORG的结果,它应该是NOR。@Todd我已经确认,对于您在示例中列出的数据,这是有效的。还存在哪些其他“角落案例”(即:异常数据输入)?编辑您的问题以包含此信息,而不是将其放在评论中。