Meilleur moyen de supprimer les zéros non significatifs d'une valeur non numérique dans Excel


12

J'ai beaucoup de cellules dans une feuille Excel, utilisant 9 caractères de 0 à 9 et AZ, qui ont un certain nombre de zéros préfixés:

000000123 
000001DA2 
0000009Q5
0000L210A
0000014A0
0000A5500
00K002200

J'aimerais supprimer les zéros de gauche pour que les valeurs deviennent:

123 
1DA2 
9Q5
L210A
14A0
A5500
K002200

Comment ferais-je cela dans une formule Excel? Je préférerais éviter l'utilisation d'une macro VBA.


Si vous avez un peu plus de contraintes sur les données, je pourrai peut-être proposer une solution plus spécifique.
Lance Roberts

Merci. Les valeurs ont des zéros non significatifs, ce qui fait 9 caractères au total. En dehors de cela, les valeurs sont des chaînes de chiffres 0 à 9 mélangées avec la lettre majuscule AZ. Il est possible qu'il existe un zéro final qui fait partie de la valeur réelle et ne doit pas être ajusté.
Chris Farmer

Pour être explicite, il n'y a jamais d'espaces incorporés. Juste 0-9 et AZ.
Chris Farmer

Édité pour inclure ces derniers zéro exemples
Chris Farmer

@Chris, je peux le faire si nous connaissons le nombre maximal de zéros qui apparaîtra jamais dans la chaîne, ou suivra après (bien que ce soit une formule longue).
Lance Roberts

Réponses:


14

Voici une solution qui nécessite beaucoup de cellules mais qui convient.

Mettez vos données dans la colonne A.

Dans B1, mettez la formule:

=IF(
    LEFT(A1) = "0" ,
    RIGHT(A1, LEN(A1)-1),
    A1)

Cela vérifie la présence d’un zéro non significatif et l’élimine.

Copiez cette formule à droite autant de colonnes qu'il peut y avoir de caractères dans vos données (9, dans ce cas, vous passerez donc à la colonne J). Copiez-le pour chaque ligne de données.

La dernière colonne contient vos données, débarrassées des zéros non significatifs.


Après de nombreuses tentatives, c’est la seule version qui fonctionnera sans recourir à VBA.
Skamradt

Commentaire de @Richard: J'aime la solution d'Isaac. Si vous avez plus d'un zéro en tête, continuez à copier depuis les cellules contenant sa formule et à coller les valeurs uniquement dans les cellules d'origine: chaque fois qu'un autre zéro sera éliminé (le cas échéant).
Ivo Flipse

7

La formule suivante n'a pas besoin de cellules supplémentaires ni ne doit être entrée en tant que formule matricielle:

=RIGHT(A1,LEN(A1)-FIND(LEFT(SUBSTITUTE(A1&" ","0",""),1),A1&" ")+1)

Si un seul zéro doit être renvoyé pour des chaînes telles que 0ou 00, la formule suivante peut être utilisée:

=IF(A1="","",RIGHT(A1,LEN(A1)-FIND(LEFT(SUBSTITUTE(LEFT(A1,LEN(A1)-1)&" ","0",""),1),LEFT(A1,LEN(A1)-1)&" ")+1))

Cette réponse fonctionne avec plusieurs zéros en tête et semble être la plus complète et la plus simple des réponses mentionnées ici.
Peter

5

C'est un problème difficile à résoudre avec une fonction de feuille de calcul. Ce qui suit fera l'affaire, mais seulement si les zéros qui ne sont pas en tête ne viennent que l'un après l'autre et s'il n'y a pas de zéros à la fin ni d'espaces imbriqués.

Il substitue tous les zéros à des espaces, les coupe (tous sauf des espaces simples intégrés), puis substitue les zéros.

=SUBSTITUTE(TRIM(SUBSTITUTE(A1,"0"," "))," ","0")

Pourquoi seulement si les zéros qui ne mènent pas ne viennent que l'un après l'autre ? Et qu'en est-il =CLEAN(SUBSTITUTE(TRIM(SUBSTITUTE(A1 & CHAR(9),"0"," "))," ","0"))(espérant CLEANsupprimer les onglets; sinon utiliser une autre valeur CHAR)
Arjan

@Arjan, j'ai testé TRIM et il a remplacé plusieurs espaces incorporés par un seul espace, mais je vais maintenant rechercher vos informations et voir ce que je peux trouver. (J'utilise 2003).
Lance Roberts

La fonction CLEAN enregistre les espaces incorporés, mais enregistre également tous les espaces sauf le premier.
Lance Roberts

J'ai ajouté CLEAN pour supprimer le CHAR (9), j'ai ajouté; l'utilisation de CLEAN sur la valeur TRIMmed ne devrait pas avoir d'espaces de début ...?
Arjan

Oui, mais lorsque CHAR (9) a été ajouté (à chaque zéro), il s'est ajouté aux zéros du début. Je vois que vous ne l’avez utilisé que pour sauvegarder les zéros à la fin et je l’incorporerai dans la réponse.
Lance Roberts

5

Cette solution fonctionne pour les valeurs d'entrée qui contiennent toutes exactement neuf caractères.

Commencez par configurer un tableau fixe de dix lignes contenant les nombres suivants, au format texte.

000000000

000000001

000000010

000000100

000001000

000010000

000100000

001000000

010000000

100000000

Disons que la table est dans les cellules A1 à 'A10

disons que votre valeur d'entrée est dans la cellule B1 et que votre cellule de résultat est C1

Utilisez la formule suivante dans la cellule C1

= DROIT (B1, MATCH (B1, $ A $ 1: $ A $ 10,1) -1)


Intelligent! En ce qui concerne le troisième paramètre de la MATCHfonction: 1 = trouver la plus grande valeur inférieure ou égale à lookup_value
Arjan le

4

Pour les données en A1, utilisez la formule suivante:

= RIGHT (A1, LEN (A1) -MAX ((FINDB (REPT ("0", R "0", ROW (1 ": 100") ")," 1 ": 100 A)), A1 &" - ​​"& REPT (" 0 ", 100)) = 1) ROW (1 $: 100 $)))

saisie par Ctrl + Maj + Entrée. Cela fonctionne pour des chaînes allant jusqu'à 100 caractères.


Hou la la! Quelques notes mineures: Ctrl-Maj-Entrée (Cmd-Maj-Retour sur Mac) crée une formule matricielle. Collez la formule comme d'habitude, mais plutôt que d'entrer, appuyez sur Ctrl-Maj-Entrée pour la sauvegarder. Il montrera ensuite entre accolades. Dans OpenOffice.org sur un Mac, je ne pouvais pas faire glisser la formule pour les lignes suivantes (car cela produirait alors une formule de super tableau). Mais copier-coller fonctionne, alors je suis sûr qu'il existe aussi un raccourci. Et OpenOffice.org ne connaît pas FINDB; utiliser FIND semble également fonctionner.
Arjan

Solution élégante!
Wilson
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.