Tengo una columna, que tiene valores separados por comas dentro de cada celda que se ve así
0.1, 0.2,0.3, 0.4,0.5, 0.8,1.0
1.5, 1.6,2.0, 10.6,10.9, 15.2,30.75
20, 0.25,280.2, 0.29,300.2, 423,530.76
Como una cadena de texto.
El objetivo es eliminar el cero inicial delante del decimal, pero solo cuando no hay otro dígito (incluido otro 0) delante, utilizo la función de búsqueda de reemplazo vba:
Opción explícita Public Sub Replace0dot (Opcional byDummy como Byte) Columnas ("A"). Reemplazar qué: "0.", _ Reemplazo: = ".", _ LookAt: = xlPart, _ SearchOrder: = xlByRows, _ MatchCase: = False, _ SearchFormat: = False, _ Reemplazar formato: = falso Application.ScreenUpdating = True End Sub
y termino con esto:
.1, .2,.3, .4,.5, .8,1
1.5, 1.6,2, 1.6,1.9, 15.2,3.75
2, .25,28.2, .29,30.2, 423,53.76
Elimina todas las instancias de liderazgo 0.
con .
, por lo que ves se 10.6
convierte 1.6
. Pero debería permanecer. 10.6
¿Cómo puedo obtener una búsqueda que reemplace el equivalente que me da:
.1, .2,.3, .4,.5, .8,1
1.5, 1.6,2, 10.6,10.9, 15.2,30.75
20, .25,280.2, .29,300.2, 423,530.76
??? Parece que tendría que ser sin concatenar y volver a concatenar para lograr el objetivo.
microsoft-excel
vba
notepad++
Jon Grah
fuente
fuente
Split
, también puede usar expresiones regulares para buscar([^0-9])0\.
un reemplazo para$1.
. Puede encontrar muchos tutoriales en la red sobre el uso de expresiones regulares en VBA.split
oregular expressions
estos pueden funcionar. ¿Alguno de ustedes tenía la intención de escribir una respuesta? Supongo que tendría que haber algunos si / entonces para distinguir entre0.
y([^0-9])0\.
. No soy programador, aunque trato de ser lógico cuando escribo la mayor parte del tiempo.Respuestas:
Aquí hay un enfoque muy simple:
Seleccione las celdas y ejecute este código:
antes de:
y después:
Si hay otros tripletes que deben cambiarse, simplemente agregue otro
Replace()
EDITAR # 1:
Para evitar la selección manual de las celdas, podemos hacer que la macro lo haga ......... aquí hay un ejemplo para la columna A :
EDITAR # 2
En esta versión agregamos a ; al final de cada celda justo antes de ingresar texto en esa celda:
EDITAR3 #:
En esta versión el ; se agrega solo si aún no está presente en la celda:
EDITAR # 4:
Esta versión no afectará a las celdas vacías:
EDITAR # 5:
Esto corrige el error en la versión anterior:
fuente
;
al final de cada fila? p. ej. 0.1, 0.2,0.3, 0.4,0.5, 0.8,1.0 se convierte en .1, .2, .3, .4, .5, .8,1.0;
??Use este código VBA, probará cada cadena para ceros a la izquierda
fuente
0
del primero0.
en la primera celda, no toda la cadena y no para todas las celdas en la columna A. 2) ¿Puede agregar algunos comentarios a su respuesta para describir qué partes de su código hacen qué? Digamos que quería comenzar con A2. ¿Hay algo más que deba ajustarse? ¿Estái
definiendo cada carácter para contar después de cada coma,
la cadena?Suponiendo que todavía está trabajando con líneas de notepad ++ , puede usar una matriz en lugar de texto en columnas
Simplemente use la información del hilo anterior para insertar sus espacios.
fuente
notepadthing()
o correr después . Intenté ambos y parece intentar reemplazarnotepadthing()
. Lo que hace es crear una pirámide en la columna E. Tuve que ampliar la columna para que pueda verla en esta captura de pantalla .fixzero()
, trabaja como se anuncia. Entonces, después de corrernotepadthing()
, funciona de maravilla. Eres bienvenido a darle otra puñalada.notepadthing()
y esta solución crea el resultado de la pirámide. ¿Viste la captura de pantalla ?