Excel extrait la sous-chaîne de la chaîne

22

Je cherche un moyen d'extraire une sous-chaîne de longueur variable d'une chaîne.

Mes cellules ressembleront à quelque chose comme:

ABC - DEF
ABCDE - DEF
ABCD - ABC

Je veux diviser la chaîne au niveau du -caractère, donc les cellules deviendront:

ABC
ABCDE
ABCD

Cela doit être fait avec une formule et non VBScript.

J'utilise Excel 2010

MODIFIER

J'ai trouvé que l'ensemble de données ne contient pas toujours le -caractère, ce qui signifie qu'il ne devrait y avoir aucun changement.

Pieter van Niekerk
la source

Réponses:

26

Ce problème peut être décomposé en deux étapes:

  1. Recherchez l'index dans la chaîne du caractère de fractionnement souhaité (dans ce cas, "-"ou " - ").
  2. Récupère la sous-chaîne de préfixe du début du texte d'origine à l'index fractionné.

La FINDet les SEARCHcommandes de chaque allait revenir l'index d'une donnée needledans un haystack( FINDest sensible à la casse, SEARCHest insensible à la casse et permet jokers). Cela étant, nous avons:

FIND(search_text, source_cell, start_index)

ou dans ce cas:

FIND(" - ", A1, 1)

Une fois que nous avons l'index, nous avons besoin du préfixe de source_cellpour faire le "split". MIDfait juste cela:

MID(source_cell, start_index, num_characters)

En les réunissant, nous avons:

=MID(A1,1,FIND(" - ",A1,1))

avec A1 ayant le texte de ABC - DEFdonne ABC.

Andrew Coleson
la source
7

Développant la réponse d'Andrew en fonction de votre modification: pour trouver la chaîne de caractères à diviser, nous utilisons la FINDfonction. Si le FINDne parvient pas à localiser la chaîne donnée, il renvoie une #VALUE?erreur. Nous devrons donc vérifier cette valeur et utiliser une valeur de remplacement à la place.

Pour vérifier toute valeur d'erreur, y compris #VALUE, nous utilisons la ISERRORfonction, donc:

=ISERROR(FIND(" - ", A1, 1))

cela sera vrai si la FINDfonction ne trouve pas la chaîne "-" dans la cellule A1. Nous utilisons donc cela pour décider quelle valeur utiliser:

=IF(ISERROR(FIND(" - ", A1, 1)), A1, MID(A1, 1, FIND(" - ", A1, 1)))

Cela signifie que si la commande find renvoie une erreur, utilisez la cellule A1 non modifiée. Sinon, effectuez la MIDfonction déjà fournie par Andrew.

Hellion
la source
2

Merci @AndrewColeson pour votre réponse.

Donc, juste pour ajouter à cela, si vous voulez tout sur le côté droit de la -, utilisez ce code:

= MID (A1, LEN (B1) + 3, LEN (A1))

Lequel est:

A1 = ABC - DEF
B1 = =MID(A1,1,FIND(" - ",A1,1))
    B1 = ABC
Therefore A1 = DEF

Ce code est idéal si vous avez un nombre indéfini de caractères après le -.

Par exemple:

Si tu as:

ABC - DEFG
AB - CDEFGH
...
Kevdog777
la source
cela fait l'affaire aussi =MID(a1,FIND("-",a1)+1,LEN(a1))sans aucune référence "extracellulaire")
Mikey
1

Voici un moyen très simple d'extraire le 5ème caractère de la gauche d'une chaîne de texte dans Excel:

Supposons que la chaîne de caractères ABCDEFGHIJsoit stockée dans la cellule A1 dans une feuille de calcul Excel, puis la formule suivante

=RIGHT(LEFT(A1,5),1)

produit le 5ème caractère de gauche dans la chaîne, à savoir E.

Ken Brown
la source
(Y a-t-il aucune MIDfonction dans Excel? Je suis sûr qu'elle existe dans Visual Basic hérité, et ce serait quelque chose comme =MID(A1, 5, 1))
Valmiky Arquissandas
0

La formule suivante supprimera une sous-chaîne de [TEXTCOLUMN_1]

par exemple: si vous souhaitez convertir -./thumb/hello.jpgen thumb/hello.jpgpuis utilisez la formule suivante

=SUBSTITUTE([TEXTCOLUMN_1],LEFT([TEXTCOLUMN_1],[NUM_OF_CHARACTERS]),)

[TEXTCOLUMN_1]= le nom de la colonne que vous souhaitez modifier [NUM_OF_CHARACTERS]= le nombre de caractères du côté gauche que vous souhaitez supprimer

Si vous souhaitez supprimer du côté droit, utilisez la commande suivante

=SUBSTITUTE([TEXTCOLUMN_1],RIGHT([TEXTCOLUMN_1],[NUM_OF_CHARACTERS]),)
Alam Zaib
la source