Excel,使用公式本身的部分结果

Excel,使用公式本身的部分结果,excel,Excel,我正试图建立一个数据库搜索,它依赖于单元格中是否存在破折号。这是公式 =IF(LEN(A1)-LEN(SUBSTITUTE(UPPER(A1),"-",""))>1,SUBSTITUTE(A1, "-", "", 1),MID(A1,FIND("-",A1)-6,10)) 它确定“-”号的数量是否大于1,如果大于1,则用空格替换第一个破折号(我就是这样忽略它的存在的),如果破折号的数量小于1,则继续提取单元格的一部分,该部分具有以下格式***-*,破折号前6个字符,破折号后3个字符 我面

我正试图建立一个数据库搜索,它依赖于单元格中是否存在破折号。这是公式

=IF(LEN(A1)-LEN(SUBSTITUTE(UPPER(A1),"-",""))>1,SUBSTITUTE(A1, "-", "", 1),MID(A1,FIND("-",A1)-6,10))
它确定“-”号的数量是否大于1,如果大于1,则用空格替换第一个破折号(我就是这样忽略它的存在的),如果破折号的数量小于1,则继续提取单元格的一部分,该部分具有以下格式***-*,破折号前6个字符,破折号后3个字符

我面临两个问题

  • 如果单元格中有两个破折号,我想替换第一个破折号,然后使用以下结果提取我的***-*。我知道这可以通过在下一个专栏中运行这个脚本来实现,但我很好奇是否可以在一个公式字符串中执行这些操作
  • 有时单元格中的多个破折号位于my***-*之后,这意味着公式将删除我需要的破折号。我不想使用Basic和brake-my-head来编写模式脚本,所以我很好奇是否有什么东西可以使用公式来确保它使用我需要的破折号
  • 任何帮助都将不胜感激

    这里有一个例子

    1. Velocity RX23 Altitude P903L1-034 ND Pressure T87P5
    2. Velocity RX23-Altitude P903L1-034 ND Pressure T87P5
    3. Velocity RX23 Altitude P903L1-034 ND Pressure T87P5-
    
    在第一个例子中,通过使用我的原始公式,我得到了P903L1-034,我需要的结果。 第二个字符串返回没有第一个破折号的修改版本,但它也没有提取我需要的P903L1-034

    速度RX23高度P903L1-034 ND压力T87P5

    第三个示例返回破坏P903L1-034格式的字符串的一个残杀版本

    速度RX23高度P903L1034 ND压力T87P5-


    我试图从各种可能性中提取P903L1-034,很明显,实际的数据库每次都有不同的数字和数字。在手动浏览数据库时,我注意到99%的情况下它看起来像示例2,我试图使单个公式忽略第一个破折号,并将其余的转换为P903L1-034。

    我同意示例会更好,但我想我理解。。但不是100%确定

    像这样的

    原始转换

    124568-452183------->124568452

    4531-4268141------->4531-4268

    458-45-3434------->458-45 343

    -4365-6543646----46------>-4365-654

    -4365-6543646----46------>-4365-654

    =左(如果(中间(A2,7,1)=“-”,左(A2,6)和“”,右(A2,LEN(A2)-LEN(LEFT(A2,6))-1,左(A2,6)和“”,右(A2,LEN(A2)-LEN(LEFT(A2,6))),10)


    因此,如果第7个字符是“-”,我们将其替换为“”,否则我们将在第6和第7个字符之间添加“”。然后把整件事缩短到10个字符

    我想我找到了解决办法。它比我想象的要大一点,但它能工作

    =IF(LEN(IF(LEN(A1)-LEN(SUBSTITUTE(UPPER(A1),"-",""))>1,IF(LEN(MID(A1, SEARCH("-",A1), SEARCH(" ",A1, SEARCH("-",A1))- SEARCH("-",A1)))=4,MID(C1,FIND("-",C1)-6,10),SUBSTITUTE(A1, "-", "", 1)),"Error"))-LEN(SUBSTITUTE(UPPER(IF(LEN(A1)-LEN(SUBSTITUTE(UPPER(A1),"-",""))>1,IF(LEN(MID(A1, SEARCH("-",A1), SEARCH(" ",A1, SEARCH("-",A1))- SEARCH("-",A1)))=4,MID(C1,FIND("-",C1)-6,10),SUBSTITUTE(A1, "-", "", 1)),"Error")),"-",""))>1,IF(LEN(MID(IF(LEN(A1)-LEN(SUBSTITUTE(UPPER(A1),"-",""))>1,IF(LEN(MID(A1, SEARCH("-",A1), SEARCH(" ",A1, SEARCH("-",A1))- SEARCH("-",A1)))=4,MID(C1,FIND("-",C1)-6,10),SUBSTITUTE(A1, "-", "", 1)),"Error"), SEARCH("-",IF(LEN(A1)-LEN(SUBSTITUTE(UPPER(A1),"-",""))>1,IF(LEN(MID(A1, SEARCH("-",A1), SEARCH(" ",A1, SEARCH("-",A1))- SEARCH("-",A1)))=4,MID(C1,FIND("-",C1)-6,10),SUBSTITUTE(A1, "-", "", 1)),"Error")), SEARCH(" ",IF(LEN(A1)-LEN(SUBSTITUTE(UPPER(A1),"-",""))>1,IF(LEN(MID(A1, SEARCH("-",A1), SEARCH(" ",A1, SEARCH("-",A1))- SEARCH("-",A1)))=4,MID(C1,FIND("-",C1)-6,10),SUBSTITUTE(A1, "-", "", 1)),"Error"), SEARCH("-",IF(LEN(A1)-LEN(SUBSTITUTE(UPPER(A1),"-",""))>1,IF(LEN(MID(A1, SEARCH("-",A1), SEARCH(" ",A1, SEARCH("-",A1))- SEARCH("-",A1)))=4,MID(C1,FIND("-",C1)-6,10),SUBSTITUTE(A1, "-", "", 1)),"Error")))- SEARCH("-",IF(LEN(A1)-LEN(SUBSTITUTE(UPPER(A1),"-",""))>1,IF(LEN(MID(A1, SEARCH("-",A1), SEARCH(" ",A1, SEARCH("-",A1))- SEARCH("-",A1)))=4,MID(C1,FIND("-",C1)-6,10),SUBSTITUTE(A1, "-", "", 1)),"Error"))))=4,MID(IF(LEN(A1)-LEN(SUBSTITUTE(UPPER(A1),"-",""))>1,IF(LEN(MID(A1, SEARCH("-",A1), SEARCH(" ",A1, SEARCH("-",A1))- SEARCH("-",A1)))=4,MID(C1,FIND("-",C1)-6,10),SUBSTITUTE(A1, "-", "", 1)),"Error"),FIND("-",IF(LEN(A1)-LEN(SUBSTITUTE(UPPER(A1),"-",""))>1,IF(LEN(MID(A1, SEARCH("-",A1), SEARCH(" ",A1, SEARCH("-",A1))- SEARCH("-",A1)))=4,MID(C1,FIND("-",C1)-6,10),SUBSTITUTE(A1, "-", "", 1)),"Error"))-6,10),"Inspect Title"),"Error")  
    
    我让它来计算破折号后面有多少个字符并进行比较,如果数量正确,它会提取我需要的数据,如果没有,它会忽略第一个破折号,找到第二个并使用它。我唯一认为有用的另一件事是,如果我能数一数在破折号之前有多少个字符,直到空格

    我使用下面的公式来计算从破折号到空格在正确方向上的字符数

    =IF(LEN(MID(A1, SEARCH("-",A1), SEARCH(" ",A1, SEARCH("-",A1))- SEARCH("-",A1)))=4,"Awesomesauce","Wrong")
    

    不知道如何将其反转并使其向左计数。

    Hi。在每种情况下,是否有可能出现多个示例字符串以及所需的结果?请用另一个IF()语句将其全部封装起来,该语句根据目标单元格是否使用一个或两个破折号来告诉它应该使用哪种方式。您已经有了IF('one-dash'=TRUE,'your-formula',…)的解决方案。现在只需写下模仿第一部分的第二部分。我只是添加了示例和更多的解释。希望这句话现在说得更清楚(不完全正确,如果我把你弄糊涂了,对不起。我正在努力确保收到6个字符+破折号+3个字符。我已经在我原来的帖子中添加了这个例子。非常感谢。
    =IF(LEN(MID(A1, SEARCH("-",A1), SEARCH(" ",A1, SEARCH("-",A1))- SEARCH("-",A1)))=4,"Awesomesauce","Wrong")