Il modo migliore per rimuovere gli zeri iniziali da un valore non numerico in Excel


13

Ho molte celle in un foglio Excel, usando 9 caratteri di 0-9 e AZ, che hanno un certo numero di zeri prefissati:

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

Vorrei rimuovere gli zeri iniziali in modo che i valori diventino:

123 
1DA2 
9Q5
L210A
14A0
A5500
K002200

Come lo farei in una formula di Excel? Preferirei evitare l'uso di una macro VBA.


Se hai qualche altra contraffazione sui dati, potrei essere in grado di trovare una soluzione più specifica.
Lance Roberts,

Grazie. I valori hanno zero iniziali in modo che siano 9 caratteri in totale. Oltre a ciò, i valori sono stringhe di cifre 0-9 mescolate con la lettera maiuscola AZ. È possibile che esista uno zero finale ed è parte del valore effettivo e non deve essere tagliato.
Chris Farmer,

Per essere espliciti, non ci sono mai spazi incorporati. Solo 0-9 e AZ.
Chris Farmer,

Modificato per includere quegli esempi zero finali
Chris Farmer,

@Chris, posso farlo se conosciamo il numero massimo di zeri che appariranno mai incorporati nella stringa o dopo (anche se sarà una formula lunga).
Lance Roberts,

Risposte:


14

Ecco una soluzione ad alta intensità di cellule ma corretta.

Inserisci i tuoi dati nella colonna A.

In B1, inserisci la formula:

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

Questo controlla un singolo zero iniziale e lo elimina.

Copia questa formula a destra quante più colonne ci possono essere caratteri nei tuoi dati (9, in questo caso, quindi uscirai dalla colonna J). Copialo per ogni riga di dati.

L'ultima colonna contiene i tuoi dati, privati ​​degli zeri iniziali.


Dopo molti tentativi, questa è l'unica versione che funzionerà senza ricorrere a VBA.
skamradt,

Commento di @Richard: mi piace la soluzione di Isaac. Se più di uno zero iniziale, continua a copiare dalle celle contenenti la sua formula e incollando i valori solo nelle celle originali: ogni volta rimuoverà un altro zero iniziale (se presente).
Ivo Flipse,

8

La seguente formula non richiede né celle aggiuntive né deve essere immessa come formula di matrice:

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

Se viene restituito un singolo zero per stringhe come 0o 00, è possibile utilizzare la seguente formula:

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

Questa risposta funziona con più zero iniziali e sembra essere la più completa e semplice delle risposte menzionate qui.
Peter,

5

Questo è un problema difficile da fare con una funzione del foglio di lavoro. Ciò che segue farà il trucco, ma solo se gli zeri che non conducono arrivano solo uno alla volta e non ci sono zero finali e spazi incorporati.

Sostituisce tutti gli zeri con spazi, li ritaglia (tutti tranne gli spazi singoli incorporati), quindi sostituisce gli zero.

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

Perché solo se gli zeri che non conducono arrivano solo uno alla volta ? E che dire =CLEAN(SUBSTITUTE(TRIM(SUBSTITUTE(A1 & CHAR(9),"0"," "))," ","0"))(sperando di CLEANrimuovere le schede; in caso contrario; usa qualche altro valore in CHAR)
Arjan,

@Arjan, ho testato TRIM e ha sostituito più spazi incorporati con un unico spazio, ma ora cercherò le tue informazioni e vedrò cosa riesco a trovare. (Sto usando il 2003).
Lance Roberts,

La funzione CLEAN salva gli spazi incorporati, ma salva anche tutto tranne il primo spazio iniziale.
Lance Roberts,

Ho aggiunto CLEAN per rimuovere il CHAR (9) che ho aggiunto; l'utilizzo di CLEAN sul valore TRIMmed non dovrebbe avere spazi iniziali ...?
Arjan,

Sì, ma quando è stato aggiunto il CHAR (9) (a ciascuno zero), si è aggiunto anche agli zeri iniziali. Vedo che l'hai usato solo per salvare gli zero finali e lo incorporerò nella risposta.
Lance Roberts,

5

Questa soluzione funziona con valori di input che sono tutti esattamente nove caratteri.

Innanzitutto imposta una tabella a dieci righe fissa che contenga i seguenti numeri formattati come testo.

000000000

000000001

000000010

000000100

000001000

000010000

000100000

001000000

010000000

100000000

Supponiamo che la tabella sia nelle celle da A1 a 'A10

supponiamo che il valore di input sia nella cella B1 e che la cella del risultato sia C1

Utilizzare la seguente formula nella cella C1

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


Inteligente! Per quanto riguarda il terzo parametro nella MATCHfunzione: 1 = trova il valore più grande minore o uguale a lookup_value
Arjan,

4

Per i dati in A1, utilizzare la seguente formula:

= DESTRA (A1, LEN (A1) -MAX ((FINDB (REPT ("0", ROW (A $ 1: A $ 100)), A1 & "-" & REPT ("0", 100)) = 1) * ROW (A $ 1: A $ 100)))

immissione da Ctrl + Maiusc + Invio. Funziona con stringhe fino a 100 caratteri.


Wow! Alcune note minori: Ctrl-Shift-Enter (Cmd-Shift-Return su un Mac) crea una formula di matrice. Incolla la formula come al solito, ma invece di Invio premi Ctrl-Maiusc-Invio per salvarla. Mostrerà quindi tra parentesi graffe. In OpenOffice.org su un Mac, non sono riuscito a trascinare verso il basso la formula per le righe successive (dato che produrrebbe una formula super array allora). Ma copia e incolla funziona, quindi sono sicuro che ci sono anche dei collegamenti. E OpenOffice.org non conosce FINDB; anche l'uso di FIND sembra funzionare.
Arjan,

Soluzione elegante!
Wilson,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.