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

时间:2015-10-28 13:37:23

标签: excel formulas

我正在尝试从下面的工作表中间提取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,SEARCH( “ - ”,I679)+ 1,IF(ISERROR(VALUE(MID(I679,SEARCH( “ - ”,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(零):

=IF(I9="*VAR*","VAR",IF(I9="*ADCN*","ADCN",IF(I9="*CHNG*","CHNG",IF(I9="*DEVN*",‌​"DEVN",IF(I9="*EER*","EER",IF(I9="*NOR*","NOR",IF(I9="*PPEP*","PPEP",IF(I9="*RMRN‌*​","RMRN",IF(I9="*SCN*","SCN",IF(I9="*WAIV*","WAIV",0))))))))))

2 个答案:

答案 0 :(得分:0)

" ...在不同的字符串中没有任何一致性" - 不正确。从我所看到的,第一个" - "之后的前3-4个字符。包含数据类型。 3如果第4个字符是数字,则为字符。使用存在的任何数据一致性来创建根据需要对齐数据的测试。

这样可以这样工作[假设您的数据在B2中开始,此公式在C2中进行,并被拖下来]:

=SEARCH("-",B2)

这为您提供了第一个" - "在牢房里。然后把它放在D2中并向下拖动:

=ISERROR(VALUE(MID(B2,C2+4,1)))

这会尝试在" - "之后转换字符4空格。成为一个价值。如果它是一个字母,它将创建一个错误,结果为TRUE。否则它将显示FALSE。

然后把它放在E2中并向下拖动:

=MID(B2,C2+1,IF(D2,4,3))

这样说 - 取单元格B2,然后从" - "之后的字符开始,返回3-4个字符的文本。如果D2为TRUE [上述公式中存在错误,意味着第4个字符不是数字],则为4个空格。否则,如果D2为FALSE,则为3个空格。

这可以替代地全部放在C2中的单个公式中,如下所示:

=MID(B2,SEARCH("-",B2)+1,IF(ISERROR(VALUE(MID(B2,SEARCH("-",B2)+4,1))),4,3))

答案 1 :(得分:0)

对于所需子字符串前面有字符串中第一个连字符并后跟下一个连字符或数字的情况的解决方案: -

=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)

enter image description here

如果您有可能的文档类型列表,可以像这样搜索它们: -

=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"}))),
"")

enter image description here