Excel 从字符串中间提取不同长度的字符串

Excel 从字符串中间提取不同长度的字符串,excel,formulas,Excel,Formulas,我试图从下面工作表的中间提取DocType(VARG、NOR、RMRN、CHNG、ADCN)。正如您所看到的,在不同的字符串中没有一致性。我试图提取嵌入字符串中的doctype,并将其放置在图纸单元格左侧相应的doctype单元格中。唉,我无法确定这样做的公式。任何帮助都将不胜感激 DocType Drawing Sheet 100188-NOR03046 10190635-VARG003-V-013R1 10190

我试图从下面工作表的中间提取DocType(VARG、NOR、RMRN、CHNG、ADCN)。正如您所看到的,在不同的字符串中没有一致性。我试图提取嵌入字符串中的doctype,并将其放置在图纸单元格左侧相应的doctype单元格中。唉,我无法确定这样做的公式。任何帮助都将不胜感激

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我已经确认,对于您在示例中列出的数据,这是有效的。还存在哪些其他“角落案例”(即:异常数据输入)?编辑您的问题以包含此信息,而不是将其放在评论中。