2010-11-10 4 views
0

У меня есть ошибка в этой формуле первенствовать и я просто не могу понять это:формула 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 J & МАРИЯ L Hostrup

в этом:

HOSTRUP, MARIA L

В противном случае нет амперсанда, но есть запятая, поэтому мы просто возвращаем: LEFT (A1, FIND ("&", A1,1) -1).

Похоже, базовая, но формула дает мне сообщение об ошибке и не указывает на проблему.

+0

Возможно, это поможет, если вы разделите свои очень длинные формулы на отдельные (скрытые?) Ячейки – McKay

ответ

4

Ваша ошибка здесь:

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

На данный момент, запятая не относится к Anthing, потому что правый оператор имеет соответствующие скобки

Насколько то, что вы хотите? Давайте разберем, что до в то, что вы на самом деле спросил:

если нет амперсанд в клетке, не возвращают пустую ячейку,

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

если нет запятой, но амперсанд не существует

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

затем включите это, например:

KNUD J & MARIA L Hostrup в этом: Hostrup, MARIA L

я предполагаю, вы имеете в виду поставить последнее слово целиком? Давайте отметить последнее слово целиком:

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

Когда я ставлю в "Кнуд J & MARIA L Hostrup", я получаю "Hostrup, МАРИЯ" в B5.

+0

@JohnMerlino Я обновил его, чтобы получить ответ, который вы говорите, что хотите. – McKay

+0

Я должен применить это к 800 000 записей всего в одном столбце – JohnMerlino

+0

@JohnMerlino Oh, затем сначала переместите ячейки вычисления справа от данных и скопируйте все записи учета до всех 800 000 – McKay

Смежные вопросы