我有这样的事情:
A1: ABC-DE442
B1: 0069-1234-12
我试图制作一个看A1的公式,得到442号码,然后检查B1的格式是4个数字,破折号,4个数字,破折号,然后最后2个数字。我想确保这可以适用于442以外的任何数字。所以,如果我喜欢123而不是442,则需要1个数字,短划线,2个数字,短划线和3个数字。
如果我有这样的话,还需要给我一个错误:
A1: ABC-DE442
B1: 004-2345-34
因为在破折号之前的第一部分只有三个数字。
希望我能够清楚地知道自己要做的事情。任何帮助将不胜感激。
答案 0 :(得分:3)
所以最后,这是我必须创造的巨大公式:
= IF(LEN(LEFT(J4,FIND( “ - ”,J4)-1))= VALUE(MID(I4,9,1)),IF(LEN(LEFT(MID(J4,FIND(” - ”,J4)1999),FIND( “ - ”,MID(J4,FIND( “ - ”,J4)1999)) - 1))= VALUE(MID(I4,10,1)),IF( LEN(MID(MID(J4,FIND( “ - ”,J4)1999),FIND( “ - ”,MID(J4,FIND( “ - ”,J4)1999))+ 1999))= VALUE(MID (I4,11,1)),“True”,“不匹配代码第3部分”),“不匹配代码第2部分”),“不匹配代码第1部分”)
J15: 0069=LEFT(J5,FIND("-",J5)-1)
J16: 4=VALUE(MID(I5,7,1))
J17: 4=LEN(J15)
J18: 0469-56=MID(J5,FIND("-",J5)+1,999)
J19: 0469=LEFT(J18,FIND("-",J18)-1)
J20: 4=VALUE(MID(I5,8,1))
J21: 4=LEN(J19)
J22: 56=MID(J18,FIND("-",J18)+1,999)
J23: 2=VALUE(MID(I5,9,1))
J24: 2=LEN(J22)
希望所有这些公式都能让我更容易理解我如何将所有内容组合在一起。
我基本上把每个公式都放在一个巨大的公式中,使用我说的答案中使用的信息是正确的。对于第一部分,我拿了LEN(D1),但是把它全部写出来,然后把它设置为= VALUE(MID(A1,7,1))。
然后,对于if语句的真实部分,我必须首先得到没有D1的A1,然后使用LEFT公式得到它只是中间部分,然后最终得到它的LEN。检查它是否等于= VALUE(MID(I4,10,1)),这是B1中的下一个数字。
如果这是真的,我去了最后的IF声明,它再次必须通过相同的过程来获取它自己的A1的最后一部分,取其长度,并查看它是否等于= VALUE (MID(I4,11,1))。
最后,我刚刚为IF语句的最后一个true和每个false部分创建了不同的print语句。
故事的道德,我能够制作一个适用于每一个数字组合的公式,因为事实证明B1只能以AB - CDE ###的形式出现,所以我总能在B1中找到这个数字并进行比较。
答案 1 :(得分:0)
这应该可以使用Excel公式,但它会有点复杂。您可能希望使用的功能包括FIND
,LEFT
,LEN
,MID
和VALUE
。
例如,
C1: =FIND("-",B1)
将返回要测试的字符串中第一个短划线的位置,对于您的示例为5.然后
D1: =LEFT(B1,C1-1)
会返回破折号之前的字符,即'0069'。同时,您需要从第一个字符串(A1中的一个)中获取三个数字运行的长度。该字符串的长度是否一样?如果是这样,你可以使用例如。
=VALUE(MID(A1,7,1))
返回A1中字符串的第7个字符并将其转换为数字(4)。现在,您可以测试该值是否等于第一批字符的长度,即LEN(D1)
。
但这些字符都是数字吗?好吧,你可以尝试将它们转换为VALUE(D1)
的数字,如果参数不能成为数字,它将返回#VALUE
。
好的,检查了第一批角色,其余的角色怎么样?好吧,
=MID(B1,FIND("-",B1)+1,999)
将在第一个短划线后提供原始字符串的其余部分,您可以用同样的方式进行分析,依此类推。
最简单的方法是通过使用大量单元来保存中间值来开发这些公式,但是一旦你确信它们正常工作就可以将它们合并到更少的单元格中。无论您想出什么,请确保使用大量不同的输入进行测试,以检查您的公式是否以您期望的方式响应它们。 (特别是,检查短划线后有一个或多个空格会发生什么,因为VALUE
会忽略前导空格 - 您可能希望在初始文本上使用SUBSTITUTE
函数来删除任何空格。 )