La mejor manera de eliminar los ceros iniciales de un valor no numérico en Excel


13

Tengo muchas celdas en una hoja de Excel, con 9 caracteres de 0-9 y AZ, que tienen algunos ceros prefijados:

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

Me gustaría eliminar los ceros iniciales para que los valores se conviertan en:

123 
1DA2 
9T5
L210A
14A0
A5500
K002200

¿Cómo haría esto en una fórmula de Excel? Prefiero evitar el uso de una macro VBA.


Si tiene algunas restricciones más en los datos, es posible que pueda encontrar una solución más específica.
Lance Roberts

Gracias. Los valores tienen ceros a la izquierda para que tengan un total de 9 caracteres. Aparte de eso, los valores son cadenas de dígitos 0-9 mezcladas con mayúscula AZ. Es posible que exista un cero al final y sea parte del valor real y no deba recortarse.
Chris Farmer

Para ser explícito, nunca hay espacios incrustados. Solo 0-9 y AZ.
Chris Farmer

Editado para incluir esos ejemplos de cero final
Chris Farmer

@ Chris, puedo hacerlo si sabemos el número máximo de ceros que alguna vez aparecerán incrustados en la cadena o después (aunque será una fórmula larga).
Lance Roberts

Respuestas:


14

Aquí hay una solución intensiva en células pero correcta.

Ponga sus datos en la columna A.

En B1, pon la fórmula:

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

Esto busca un solo cero inicial y lo elimina.

Copie esta fórmula a la derecha tantas columnas como pueda haber caracteres en sus datos (9, en este caso, entonces saldrá a la columna J). Cópielo para cada fila de datos.

La última columna contiene sus datos, despojados de los ceros a la izquierda.


Después de muchos intentos en esto, esta es la única versión que funcionará sin recurrir a VBA.
skamradt

Comentario de @Richard: Me gusta la solución de Isaac. Si hay más de un cero inicial, siga copiando desde las celdas que contienen su fórmula y pegando valores solo a las celdas originales: cada vez eliminará otro cero inicial (si corresponde).
Ivo Flipse

8

La siguiente fórmula no necesita celdas adicionales ni debe ingresarse como una fórmula de matriz:

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

Si se devuelve un solo cero para cadenas como 0o 00, puede usarse la siguiente fórmula:

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

Esta respuesta funciona con múltiples ceros a la izquierda y parece ser la más completa y simple de las respuestas mencionadas aquí.
Peter

5

Este es un problema difícil de hacer con una función de hoja de trabajo. Lo siguiente hará el truco, pero solo si los ceros que no están al principio aparecen solo uno a la vez, y no hay ceros finales ni espacios incrustados.

Sustituye todos los ceros con espacios, los recorta (todos menos espacios individuales incrustados), luego sustituye los ceros.

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

¿Por qué solo si los ceros que no están marcando vienen solo uno a la vez ? Y qué pasa =CLEAN(SUBSTITUTE(TRIM(SUBSTITUTE(A1 & CHAR(9),"0"," "))," ","0"))(con la esperanza de CLEANeliminar pestañas; si no; use algún otro valor en CHAR)
Arjan

@Arjan, probé TRIM y reemplazó varios espacios incrustados con un solo espacio, pero voy a investigar su información ahora y ver qué puedo encontrar. (Estoy usando 2003).
Lance Roberts

La función LIMPIAR guarda los espacios incrustados, pero también guarda todos menos el primer espacio inicial.
Lance Roberts

Agregué CLEAN para eliminar el CHAR (9) que agregué; El uso de CLEAN en el valor TRIMmed no debe tener espacios iniciales ...?
Arjan

Sí, pero cuando se agregó el CHAR (9) (a cada cero), también se agregó a los ceros iniciales. Veo que solo lo usó para guardar los ceros finales y lo incorporaré en la respuesta.
Lance Roberts

5

Esta solución funciona para valores de entrada que son exactamente nueve caracteres.

Primero configure una tabla fija de diez filas que contenga los siguientes números formateados como texto.

000000000

000000001

000000010

000000100

000001000

000010000

000100000

001000000

010000000

100000000

Digamos que la tabla está en las celdas A1 a A10

supongamos que su valor de entrada está en la celda B1 y su celda de resultado es C1

Use la siguiente fórmula en la celda C1

= DERECHA (B1, PARTIDO (B1, $ A $ 1: $ A $ 10,1) -1)


¡Inteligente! En cuanto al tercer parámetro en la MATCHfunción: 1 = encontrar el valor más grande menor o igual que lookup_value
Arjan

4

Para los datos en A1, use la siguiente fórmula:

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

ingresando por Ctrl + Shift + Enter. Funciona para cadenas de hasta 100 caracteres.


¡Guauu! Algunas notas menores: Ctrl-Shift-Enter (Cmd-Shift-Return en una Mac) crea una fórmula de matriz. Pegue la fórmula como de costumbre, pero en lugar de Enter presione Ctrl-Shift-Enter para guardarla. Luego se mostrará entre llaves. En OpenOffice.org en una Mac, no pude arrastrar hacia abajo la fórmula para las siguientes filas (ya que produciría alguna fórmula de super matriz entonces). Pero copiar y pegar funciona, así que estoy seguro de que también hay un atajo. Y OpenOffice.org no conoce FINDB; El uso de FIND parece funcionar también.
Arjan

Solución elegante!
Wilson
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.