2017-08-11 1 views
0

J'ai une grande quantité de données avec diverses mesures à la fin des descriptions que je veux mettre à l'avant. Le texte des colonnes ne fonctionnera pas en raison de la longueur variable, et je n'ai pas réussi à trouver une combinaison de recherche mid/len/left/right/pour obtenir les résultats dont j'ai besoin.Extraire différentes longueurs de texte avant des guillemets dans la chaîne de texte, avec plusieurs instances dans la chaîne parfois nécessaire (Excel)

Mes données de ce type (chaque ligne dans une cellule):

TEE CUIVRE 2"
T CUIVRE 2" X 1"
T CUIVRE 3" X 2"
TEE CUIVRE DWV 2"
T COPPER 1"
T COPPER 1" X 1-1/2"
T CUIVRE 1-1/2" X 3/4"

Mon objectif final est d'avoir toutes les mesures dans le avant (sti ll chaque ligne dans une cellule):

2" T CUIVRE
2" X 1" T CUIVRE
3" X 2" T CUIVRE
2" T CUIVRE DWV
1" T-CUIVRE
1 "X 1-1/2" T CUIVRE
1-1/2" X 3/4" T CUIVRE

Une fois séparé, je peux concaténer/string tous ensemble sans aucun problème. J'ai juste besoin d'un moyen de tout prendre en face de "et de le mettre dans une colonne séparée, et s'il y a 2 ou 3 instances de", j'ai besoin de chacun d'entre eux dans leurs propres colonnes, ou dans la même colonne que autres mesures

Je cours Excel 2007 (je vais demander au boss une version mise à jour très bientôt ...).

Merci!

Répondre

1

Cette formule analysera les données que vous voulez:

=MID(A1,FIND("""",A1)-AGGREGATE(15,6,FIND("""",A1)-FIND("}}}",SUBSTITUTE(A1," ","}}}",ROW(INDIRECT("1:" & LEN(A1) - LEN(SUBSTITUTE(A1," ",""))))))/(FIND("""",A1)-FIND("}}}",SUBSTITUTE(A1," ","}}}",ROW(INDIRECT("1:" & LEN(A1) - LEN(SUBSTITUTE(A1," ",""))))))>0),1)+1,999) & " " & LEFT(A1,FIND("""",A1)-AGGREGATE(15,6,FIND("""",A1)-FIND("}}}",SUBSTITUTE(A1," ","}}}",ROW(INDIRECT("1:" & LEN(A1) - LEN(SUBSTITUTE(A1," ",""))))))/(FIND("""",A1)-FIND("}}}",SUBSTITUTE(A1," ","}}}",ROW(INDIRECT("1:" & LEN(A1) - LEN(SUBSTITUTE(A1," ",""))))))>0),1)) 

Il trouvera le premier « mot » qui a " en elle, en utilisant le,

AGGREGATE(15,6,FIND("""",A1)-FIND("}}}",SUBSTITUTE(A1," ","}}}",ROW(INDIRECT("1:" & LEN(A1) - LEN(SUBSTITUTE(A1," ",""))))))/(FIND("""",A1)-FIND("}}}",SUBSTITUTE(A1," ","}}}",ROW(INDIRECT("1:" & LEN(A1) - LEN(SUBSTITUTE(A1," ",""))))))>0),1) 

Il divise alors la chaîne à l'espace avant ce "mot".

Il concatène ensuite en utilisant & les deux retours.


NOTES:

Cela suppose que les "mesures" ont tous " en eux.

Il suppose également que la division doit être effectuée au premier espace avant que le " ne soit trouvé.Alors 1 - 1/4" se partageront à l'espace entre 1 - et 1/4"

enter image description here


Pour 2007, vous devez utiliser cette formule de tableau:

=MID(A1,FIND("""",A1)-SMALL(IF(FIND("""",A1)-FIND("}}}",SUBSTITUTE(A1," ","}}}",ROW(INDIRECT("1:" & LEN(A1) - LEN(SUBSTITUTE(A1," ",""))))))>0,FIND("""",A1)-FIND("}}}",SUBSTITUTE(A1," ","}}}",ROW(INDIRECT("1:" & LEN(A1) - LEN(SUBSTITUTE(A1," ",""))))))),1)+1,999) & " " & LEFT(A1,FIND("""",A1)-SMALL(IF(FIND("""",A1)-FIND("}}}",SUBSTITUTE(A1," ","}}}",ROW(INDIRECT("1:" & LEN(A1) - LEN(SUBSTITUTE(A1," ",""))))))>0,FIND("""",A1)-FIND("}}}",SUBSTITUTE(A1," ","}}}",ROW(INDIRECT("1:" & LEN(A1) - LEN(SUBSTITUTE(A1," ",""))))))),1)) 

Être une formule de tableau, il doit être confirmé avec Ctrl-Shift-Enter au lieu de Enter lorsque vous quittez le mode d'édition. Si c'est fait correctement, Excel mettra {} autour de la formule.

+0

Merci Scott. La fonction d'agrégat est-elle uniquement disponible dans les versions ultérieures d'Excel? J'ai essayé ceci dehors mais l'agrégat ne demande pas dans excel 2007. J'ai placé un appel dans pour passer à une version plus moderne, ainsi j'espère que cela arrive et je peux employer votre solution. – MTem

+0

@MTem voir modifier. –