2010-11-10 79 views
0

我有一个错误这个Excel公式中,我不能只图出来:Excel公式包含错误

=LEFT(B3,FIND(",",B3&",")-1)&","&RIGHT(B3,LEN(B3)-FIND("&",B3&"&")),RIGHT(B3,LEN(B3)-SEARCH("@",SUBSTITUTE(B3," ","@",LEN(B3)-LEN(SUBSTITUTE(B3," ",""))))&", "&SUBSTITUTE(RIGHT(B3,LEN(B3)-FIND("&",B3&"&")-1),RIGHT(B3,LEN(B3)-SEARCH("@",SUBSTITUTE(B3," ","@",LEN(B3)-LEN(SUBSTITUTE(B3," ",""))))),"")) 

它可能看起来像一个大的公式,但所有它打算做的是,如果没有符号在细胞中,则返回一个空单元格,如果没有逗号但符号存在,则返回此,例如:

KNUDĴ& MARIA大号HOSTRUP

成这样:

HOSTRUP,MARIA L

否则,没有&字符,但有一个逗号,所以我们只返回:LEFT(A1,FIND(“&”,A1,1)-1)。

似乎基本,但公式一直给我错误消息,并没有指出问题。

+0

如果你把你很长的公式分解成单独的(隐藏的)单元格,它可能会有所帮助 – McKay 2010-11-10 22:55:10

回答

4

你的错误是在这里:

=LEFT(B3,FIND(",",B3&",")-1)&","&RIGHT(B3,LEN(B3)-FIND("&",B3&"&")), 

此时,逗号并不适用于参选,因为右操作具有匹配的括号

至于你想要什么?让我们打破了成什么样,你居然问:

如果在一个小区中没有符号,返回空单元格,

B4=Find("&", B3&"&") 
B5=IF(B4>LEN(B3),"",B6) 

如果没有逗号,但符号存在

B6=IF(FIND(",", B3&",")>LEN(B3),B8,B7) 

然后打开它,例如:

KNUDĴ& MARIA大号HOSTRUP 到这一点: HOSTRUP,MARIA大号

我假定你的意思是把最后整个单词?让我们来纪念过去的整个词:

B9=SUBSTITUTE(B3," ","@",LEN(B3)-LEN(SUBSTITUTE(B3," ",""))) 
B10=RIGHT(B7,LEN(B9)-FIND("@",B9)) 

而且连字符和最后一个字之间的东西

B11=TRIM(MID(B9,B4 + 1, LEN(B9)-FIND("@",B9)-1)) 

然后计算很容易

B7=B10&","&B11 

否则,没有&符号,但有逗号,所以我们只返回: LEFT(A1,FIND(“&”,A1,1)-1)。

好吧,如果你想要的,我们只是把在B8

B8=LEFT(A1,FIND("&",A1,1)-1) 

(但我认为你实际上意味着B3代替A1)

B8=LEFT(B3,FIND("&",B3,1)-1) 

有你有它(B5包含您要查找的信息)它花了几个单元,但这样更容易调试。如果你想折叠它,你可以(但是这样做是更多的代码,因为我们可以通过不止一次引用先前计算的单元格来减少重复)。

摘要:

B3=<Some Name with & or ,> 
B4=FIND("&", B3&"&") 
B5=IF(B4>LEN(B3),"",B6) 
B6=IF(FIND(",", B3&",")>LEN(B3),B7,B8) 
B7=B10&","&B11 
B8=LEFT(B3,FIND("&",B3,1)-1) 
B9=SUBSTITUTE(B3," ","@",LEN(B3)-LEN(SUBSTITUTE(B3," ",""))) 
B10=RIGHT(B9,LEN(B9)-FIND("@",B9)) 
B11=TRIM(MID(B9,B4 + 1, LEN(B9)-FIND("@",B9)-1)) 

当我把 “KNUDĴ& MARIA大号HOSTRUP”,我得到 “HOSTRUP,MARIA” 在B5。

+0

@JohnMerlino我已经更新它来获得你说你想要的答案。 – McKay 2010-11-10 23:29:58

+0

我必须将它应用于单列800000条记录 – JohnMerlino 2010-11-10 23:50:40

+0

@JohnMerlino哦,然后首先将计算单元移动到数据右侧,并将所有计算记录复制到所有800,000 – McKay 2010-11-10 23:52:13