J'essaie de diviser une chaîne dans une formule Excel, quelque chose comme je peux le faire dans de nombreux langages de programmation, par exemple.
string words = "some text".split(' ');
Le problème est que je ne peux pas être sûr qu'il y ait plus d'un mot dans la cellule. Si j'essaie d'utiliser les fonctions FIND()
ou SEARCH()
, elles renvoient #VALUE
S'il n'y a pas d'espace. Existe-t-il un moyen simple de diviser la chaîne afin qu'elle renvoie les mots individuels (ou encore mieux, afin qu'elle renvoie soit les premiers mots ou tous les autres mots)?
Une formule pour renvoyer le premier mot ou tous les autres mots .
=IF(ISERROR(FIND(" ",TRIM(A2),1)),TRIM(A2),MID(TRIM(A2),FIND(" ",TRIM(A2),1),LEN(A2)))
Exemples et résultats
Text Description Results
Blank
Space
some Text no space some
some text Text with space text
some Text with leading space some
some Text with trailing space some
some text some text Text with multiple spaces text some text
Commentaires sur la formule:
Ce qui suit renvoie le premier mot dans la cellule A1 lorsqu'il est séparé par un espace (fonctionne dans Excel 2003):
=LEFT(A1, SEARCH(" ",A1,1))
=IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)
Cela vérifiera d'abord si la cellule contient un espace, s'il le fait, il retournera la première valeur de l'espace, sinon il retournera la valeur de la cellule.
Éditer
Juste pour ajouter à la formule ci-dessus, en l'état, s'il n'y a pas de valeur dans la cellule, elle retournerait 0. Si vous cherchez à afficher un message ou quelque chose pour dire à l'utilisateur qu'il est vide, vous pouvez utiliser ce qui suit:
=IF(IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)=0, "Empty", IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3))
Ces choses ont tendance à être plus simples si vous les écrivez une cellule à la fois, en décomposant les formules longues en plus petites, où vous pouvez les vérifier en cours de route. Vous pouvez ensuite masquer les calculs intermédiaires ou les regrouper dans une seule formule.
Par exemple, en prenant la formule de James:
=IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)
Ce qui n'est valable que dans Excel 2007 ou version ultérieure.
Décomposez-le comme suit:
B3: =FIND(" ", A3)
C3: =IF(ISERROR(B3),A3,LEFT(A3,B3-1))
C'est juste un peu plus facile à travailler, un morceau à la fois. Une fois cela fait, vous pouvez le transformer en
=IF(ISERROR(FIND(" ", A3)),A3,LEFT(A3,FIND(" ", A3)-1))
si vous le désirez.
Si vous avez besoin de l'allocation aux colonnes seulement une fois que la réponse est la fonctionnalité "Texte en colonnes" dans MS Excel.
Voir l'article d'aide MS ici: http://support.Microsoft.com/kb/214261
HTH
Une grande feuille de calcul-fu dans les autres réponses, mais je pense qu'ils ont oublié que vous pouvez définir une fonction définie par l'utilisateur (udf) et l'appeler à partir de la feuille ou d'une formule.
Le problème suivant que vous avez est de décider de travailler avec un tableau entier ou avec un élément.
Par exemple, ce code de fonction UDF
Public Function UdfSplit(ByVal sText As String, Optional ByVal sDelimiter As String = " ", Optional ByVal lIndex As Long = -1) As Variant
Dim vSplit As Variant
vSplit = VBA.Split(sText, sDelimiter)
If lIndex > -1 Then
UdfSplit = vSplit(lIndex)
Else
UdfSplit = vSplit
End If
End Function
permet des éléments uniques avec les éléments suivants dans une cellule
=UdfSplit("EUR/USD","/",0)
ou on peut utiliser un bloc de cellules avec
=UdfSplit("EUR/USD","/")
Mettez en surbrillance la cellule, utilisez Dat => Text to Columns et le DELIMITER est un espace. Le résultat apparaîtra dans autant de colonnes que le fractionnement trouvera l'espace.