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

Extracting the different length strings from the middle of a string

我正在尝试从下面的工作中提取 DocType(VARG、NOR、RMRN、CHNG、ADCN)sheet。如您所见,不同字符串中没有任何一致之处。我正在尝试提取字符串中嵌入的文档类型并将其放置在绘图 sheet 单元格左侧的相应文档类型单元格中。 las,我无法确定这样做的公式。任何帮助将不胜感激!

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

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

这可以像这样工作[假设您的数据从 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 中,从“-”之后的字符开始,return 包含 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))

所需子字符串前面是字符串中的第一个连字符,后面是下一个连字符或数字的解决方案:-

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