2010-11-10 25 views
0

J'ai une erreur dans cette formule Excel et je ne peux pas comprendre simplement sur:formule Excel contient une erreur

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

Il peut sembler une grande formule, mais tout ce qu'il a l'intention de faire est si aucune esperluette est dans une cellule, retourner une cellule vide, si aucune virgule mais qu'on trouve esperluette, puis retourner ce, par exemple:

KNUD J & MARIA L dans ce HOSTRUP

:

HOSTRUP, MARIA L

Sinon, il n'y a pas d'esperluette mais il y a une virgule donc nous revenons juste: GAUCHE (A1, FIND ("&", A1,1) -1).

Semble basique, mais la formule m'a donné un message d'erreur et ne pointe pas sur le problème.

+0

Il serait probablement utile si vous avez rompu vos très longues formules en cellules séparées (cachées?) – McKay

Répondre

4

Votre erreur est ici:

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

À ce stade, la virgule ne concerne pas anthing, car l'opérateur a droit parens correspondant à

En ce qui concerne ce que vous voulez? Brisons que vous dans ce que vous avez réellement demandé:

si aucune esperluette dans une cellule, retour cellule vide,

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

si aucune existe virgule mais esperluette

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

puis tournez ceci, par exemple:

KNUD J & MARIA L HOSTRUP dans ce: HOSTRUP, MARIA L

Je vous présumant dire de mettre le dernier mot entier? Marquons le dernier mot entier:

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

Et les choses entre l'esperluette et le dernier mot

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

Ensuite, le calcul est facile

B7=B10&","&B11 

Sinon, il n'y a esperluette mais il y a une virgule donc nous revenons juste: GAUCHE (A1, FIND ("&", A1,1) -1).

Eh bien, si vous voulez que nous allons mettre juste que dans B8

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

(Mais je pense que vous voulez dire en fait B3 au lieu de A1)

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

Et là, vous avez (B5 contient les informations que vous cherchez) Il a fallu quelques cellules, mais il est plus facile de déboguer de cette façon. Si vous voulez le réduire, vous pouvez le faire (mais en faisant cela, c'est plus de code, car nous pouvons réduire la duplication en référençant une cellule précédemment calculée à plus d'une occasion).

Résumé:

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

Quand je mets en "J KNUD & MARIA L HOSTRUP", je reçois "HOSTRUP, MARIA" dans B5.

+0

@JohnMerlino Je l'ai mis à jour pour obtenir la réponse que vous dites que vous voulez. – McKay

+0

Je dois appliquer cela à 800 000 enregistrements tous dans une seule colonne – JohnMerlino

+0

@JohnMerlino Oh, alors d'abord déplacer les cellules de calcul à la droite des données, et copier tous les enregistrements de calcul à tous les 800 000 – McKay