Melhor maneira de remover zeros à esquerda de um valor não numérico no Excel

13

Eu tenho muitas células em uma planilha do Excel, usando 9 caracteres de 0 a 9 e AZ, que possuem algum número de zeros prefixados:

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

Gostaria de remover os zeros à esquerda para que os valores se tornem:

123 
1DA2 
9T5
L210A
14A0
A5500
K002200

Como eu faria isso em uma fórmula do Excel? Eu preferiria evitar o uso de uma macro VBA.

Chris Farmer
fonte
Se você tiver mais algumas restrições nos dados, talvez eu consiga encontrar uma solução mais específica.
Lance Roberts
Obrigado. Os valores têm zeros à esquerda, totalizando 9 caracteres. Fora isso, os valores são cadeias de dígitos de 0 a 9 combinadas com a letra maiúscula AZ. É possível que exista um zero à direita e faça parte do valor real e não deva ser aparado.
31510 Chris Farmer
Para ser explícito, nunca há espaços incorporados. Apenas 0-9 e AZ.
31711 Chris Farmer
Editado para incluir aqueles que não seguem nenhum exemplo #
Chris Farmer
@ Chris, eu posso fazer isso se soubermos o número máximo de zeros que aparecerão incorporados na string ou depois (depois de ser uma fórmula longa).
Lance Roberts

Respostas:

14

Aqui está uma solução que exige muitas células, mas está correta.

Coloque seus dados na coluna A.

Em B1, coloque a fórmula:

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

Isso verifica um único zero inicial e retira-o.

Copie esta fórmula para a direita o maior número possível de colunas em seus dados (9, nesse caso, você estará na coluna J). Copie-o para cada linha de dados.

A última coluna contém seus dados, sem os zeros à esquerda.

Isaac Moses
fonte
Depois de muitas tentativas, esta é a única versão que funcionará sem recorrer ao VBA.
Skamradt 17/09/09
Comentário de @Richard: Gosto da solução de Isaac. Se houver mais de um zero inicial, continue copiando das células que contêm sua fórmula e colando os valores apenas para as células originais: cada vez que extrair outro zero inicial (se houver).
Ivo Flipse 13/01
8

A fórmula a seguir não precisa de células adicionais nem precisa ser inserida como uma fórmula de matriz:

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

Se um único zero for retornado para seqüências de caracteres como 0ou 00, a seguinte fórmula poderá ser usada:

=IF(A1="","",RIGHT(A1,LEN(A1)-FIND(LEFT(SUBSTITUTE(LEFT(A1,LEN(A1)-1)&" ","0",""),1),LEFT(A1,LEN(A1)-1)&" ")+1))
Andreas Flueckiger
fonte
Essa resposta funciona com vários zeros à esquerda e parece ser a mais completa e simples das respostas mencionadas aqui.
Peter
5

Esse é um problema difícil de se fazer com uma função da planilha. A seguir, o truque será executado, mas apenas se os zeros que não estão à frente aparecerem apenas um de cada vez, e não houver zeros à direita e espaços incorporados.

Ele substitui todos os zeros por espaços, os apara (todos, exceto os espaços únicos incorporados) e, em seguida, substitui os zeros.

=SUBSTITUTE(TRIM(SUBSTITUTE(A1,"0"," "))," ","0")
Lance Roberts
fonte
Por que apenas se os zeros que não estão à frente vêm apenas um de cada vez ? E o que dizer =CLEAN(SUBSTITUTE(TRIM(SUBSTITUTE(A1 & CHAR(9),"0"," "))," ","0"))(esperando CLEANirá remover Tabs; se não, use algum outro valor em CHAR)
Arjan
@ Arjan, testei o TRIM e ele substituiu vários espaços incorporados por um único espaço, mas vou pesquisar suas informações agora e ver o que posso encontrar. (Eu estou usando 2003).
Lance Roberts
A função CLEAN salva os espaços incorporados, mas também salva todos, exceto o primeiro espaço à esquerda.
Lance Roberts
Adicionei CLEAN para remover o CHAR (9) que adicionei; usar CLEAN no valor TRIMmed não deve ter espaços à esquerda ...?
Arjan
Sim, mas quando o CHAR (9) foi adicionado (a cada zero), ele também se acrescentou aos zeros iniciais. Vejo que você apenas o usou para salvar os zeros à direita e vou incorporá-lo à resposta.
Lance Roberts
5

Esta solução funciona para valores de entrada com exatamente nove caracteres.

Primeiro, configure uma tabela fixa de dez linhas que contenha os seguintes números formatados como texto.

000000000

000000001

000000010

000000100

000001000

000010000

000100000

001000000

010000000

100000000

Digamos que a tabela esteja nas células A1 até A10

digamos que seu valor de entrada esteja na célula B1 e sua célula resultante seja C1

Use a seguinte fórmula na célula C1

= DIREITA (B1, CORRESPONDÊNCIA (B1, $ A $ 1: $ A $ 10,1) -1)

Kije
fonte
Inteligente! Quanto ao terceiro parâmetro na MATCHfunção: 1 = encontrar o maior valor menor ou igual a valor_procurado
Arjan
4

Para dados em A1, use a seguinte fórmula:

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

digitando com Ctrl + Shift + Enter. Ele funciona para strings de até 100 caracteres.

Toc
fonte
Uau! Algumas notas secundárias: Ctrl-Shift-Enter (Cmd-Shift-Return em um Mac) cria uma fórmula de matriz. Cole a fórmula como de costume, mas em vez de Enter, pressione Ctrl-Shift-Enter para salvá-la. Em seguida, ele será exibido entre chaves. No OpenOffice.org em um Mac, eu não conseguia arrastar a fórmula para as próximas linhas (pois isso produziria alguma fórmula de super array). Mas copiar e colar funciona, então tenho certeza de que também há algum atalho. E o OpenOffice.org não conhece o FINDB; O uso do FIND também parece funcionar.
Arjan
Solução elegante!
21411 wilson