Texto a valor numerico

29/07/2007 - 04:19 por Gerardo Roda | Informe spam
Hola a todos, tengo una pregunta que tratare de hacerla lo mas simple
posible.
Tengo una planilla excel importada de un Txt, producto de un Ocr.
Resulta que en la columna donde se supone que voy a tener valores numericos
tengo un texoto tipo
" 12.456,87" sin las comillas. Resulta que tiene espacios al principio,
tiene punto en el medio (y es mi separador de decimales) y tambien un coma.
Mi pregunta es: Cual es la manera mas sencilla de convertir ese texto a
numero 12456.87 ?
Un apunte, son tipo mil celdas a convertir.-

Gracias

Preguntas similare

Leer las respuestas

#6 Xavier Budet Graco
29/07/2007 - 16:44 | Informe spam
Hola amigos,
aplicando lo sugerido en la nota de KL tengo una nueva fórmula:
=--(SUSTITUIR(SUSTITUIR(A1;CARACTER(32);"");CARACTER(160);""))

que funciona para el caso que detallo en mi primer mensaje (mismos separadores numéricos) y con fórmula más corta y eficiente.

Saludos,

Xavier

Quitar MAC para contestar. Gracias.

"Xavier Budet Graco" escribió en el mensaje news:
Hola KL,
=ESPACIOS(A1) a mi no me funciona con este tipo de datos (?)

Si elimino (SUSTITUIR) el caracter (32) sólo me elimina el carácter próximo al primer número pero el resto no porque son caracter (160), de ahí que haya preferido la función EXTRAE.

Por supuesto que seguro que hay mejores posibilidades pero ésta funciona.

Saludos,

Xavier

Quitar MAC para contestar. Gracias.

"KL" escribió en el mensaje news:ejXn%
Hola Xavier,

"Xavier Budet Graco" wrote
Hola Gerardo, si prefieres fórmula antes que VBA (yo no soy nada bueno en
VBA) lo
puedes solucionar con la siguiente:
=--(EXTRAE(A1;HALLAR(CARACTER(32);A1)+1;LARGO(A1)-HALLAR(CARACTER(32);A1)))



Con una objeción: Funciona si tus separadores numéricos son los mismos del
texto importado
(en este caso "." para los miles y "," para los decimales). de no ser >
así la cosa se complica y
he de recurrir, previamente, a la función =SUSTITUIR. Además he tomado de
tu ejemplo
que no hay "espacios" depués de la última cifra.



(¿?) Y por que no directamente:

=--ESPACIOS(A1)

o bien

=--SUSTITUIR(A1;CARACTER(32);"")

para el supuesto que hemos usado HM y yo:

=--SUSTITUIR(SUSTITUIR(ESPACIOS(A1);".";"");",";".")

o bien

=--SUSTITUIR(SUSTITUIR(SUSTITUIR(A1;CARACTER(32);"");".";"");",";".")

Saludos,
KL


Respuesta Responder a este mensaje
#7 KL
29/07/2007 - 16:56 | Informe spam
Hola Xavier,

"Xavier Budet Graco" wrote
=ESPACIOS(A1) a mi no me funciona con este tipo de datos (?)

Si elimino (SUSTITUIR) el caracter (32) sólo me elimina el carácter
próximo
al primer número pero el resto no porque son caracter (160), de ahí que
haya
preferido la función EXTRAE.



1) Sera que tu copias los valores de ejemplo de un mensaje en formato
*.html, y yo de uno en formato texto :-) A ver cual va a ser el caso del
"OP"

2) Que tal esta (sigue siendo bastante mas corta)?

=--SUSTITUIR(ESPACIOS(A1);CARACTER(160);"")

3) Y para hacerla aun mas universal:

=--SUSTITUIR(SUSTITUIR(LIMPIAR(ESPACIOS(A1));CARACTER(160);"");CARACTER(127);"")

4) para el supuesto de HM y mio:

=--SUSTITUIR(SUSTITUIR(SUSTITUIR(ESPACIOS(A1);CARACTER(160);"");"");".";"");",";".")

=--SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(LIMPIAR(ESPACIOS(A1));CARACTER(160);"");CARACTER(127);"");".";"");",";".")

Saludos,
KL
Respuesta Responder a este mensaje
#8 Xavier Budet Graco
29/07/2007 - 19:18 | Informe spam
Hola KL,

las fórmulas 2 y 3 perfectas, ya están archivadas.

Las del apartado 4 siguen sin funcionar en los datos que utilizo, datos tomados tanto desde el OE como de la web, y en algún caso creados en el propio Excel.

Saludos,

Xavier

Quitar MAC para contestar. Gracias.

"KL" escribió en el mensaje news:

Hola Xavier,

"Xavier Budet Graco" wrote
=ESPACIOS(A1) a mi no me funciona con este tipo de datos (?)



Si elimino (SUSTITUIR) el caracter (32) sólo me elimina el carácter
próximo
al primer número pero el resto no porque son caracter (160), de ahí que
haya
preferido la función EXTRAE.



1) Sera que tu copias los valores de ejemplo de un mensaje en formato
*.html, y yo de uno en formato texto :-) A ver cual va a ser el caso del
"OP"

2) Que tal esta (sigue siendo bastante mas corta)?

=--SUSTITUIR(ESPACIOS(A1);CARACTER(160);"")

3) Y para hacerla aun mas universal:

=--SUSTITUIR(SUSTITUIR(LIMPIAR(ESPACIOS(A1));CARACTER(160);"");CARACTER(127);"")

4) para el supuesto de HM y mio:

=--SUSTITUIR(SUSTITUIR(SUSTITUIR(ESPACIOS(A1);CARACTER(160);"");"");".";"");",";".")

=--SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(LIMPIAR(ESPACIOS(A1));CARACTER(160);"");CARACTER(127);"");".";"");",";".")

Saludos,
KL

Respuesta Responder a este mensaje
#9 KL
29/07/2007 - 20:42 | Informe spam
Hola Xavier,

"Xavier Budet Graco" wrote
Las del apartado 4 siguen sin funcionar en los datos que utilizo, datos
tomados
tanto desde el OE como de la web, y en algún caso creados en el propio
Excel.



Las del apartado 4 deberian funcionar si se dan las siguientes premisas:

1) se usan las cadenas de texto donde el separador de miles es punto y el
separador de decimales es coma, o sea tal como lo describe Gerardo (p.ej.:
" 12.456,87")

2) el sistema utiliza la coma como el separador de miles y el punto como el
separador de decimales, o sea justo al reves que tambien, entiendo, es la
situacion de Gerardo.

Si esto es lo que tienes y te sigue dando errores, comentas que error te da
exactamente?

Saludos,
KL
Respuesta Responder a este mensaje
#10 Héctor Miguel
29/07/2007 - 22:43 | Informe spam
hola, chicos !

1) mi sistema usa como separadores: miles=coma, decimales=punto [asumo que]... similar a OP -?-

2) el metodo *manual* me presento las siguientes *inconsistencias*
a) "No importar la primera columna"... me devolvio solamente la parte final [las 2 decimales de cada cifra]
b) omitiendo el paso anterior... me devuelve correctamente la parte *entera* [pero] las decimales en la siguiente columna
[o sea]... necesitare posteriormente *volver una sola* ambas columnas [etc. etc. etc.] :-((

3) el metodo anterior aplicado por macros [xl2000 en adelante]...

a) con los siguientes *valores* [obviamente SIN las comillas dobles]
" 12.456,87"
" 123.456,78"
" 23.456,89"
" 231.543,76"
"1.234.567,89"
" 123.456,78"
" 23.456,89"
" 231.543,76"
" 12.456,87"

b) me devolvio lo siguiente:
12,456.87
123,456.78
23.456.89 <= <texto>
231,543.76
<= <vacio>
123,456.78
23.456.89 <= <texto>
231,543.76
12,456.87

sera cuestion de que OP corra sus pruebas y nos regale con alguna retro-alimentacion :))

saludos,
hector.

__ las consultas/propuestas anteriores __
KL escribio en el mensaje ...
"Héctor Miguel" wrote
Sub Texto_a_numero()
With Range([c2], [c65536].End(xlUp))
.Cells(1).Offset(, 1).EntireColumn.Insert
.Offset(, 1).FormulaArray = _
"=trim(substitute(substitute(" & .Address & ",""."",""""),"","","".""))"
.Value = .Offset(, 1).Value
.Cells(1).Offset(, 1).EntireColumn.Delete
End With: ActiveSheet.UsedRange
End Sub



Yo haria una de dos:

1) Manualmente

- seleccionamos el rango con los datos (una columna a la vez)
- ir al menu Datos>Texto a columnas...
- en la primera pantalla elegir la opcion 'Delimitado' y pulsar el boton 'Siguiente'
- en la segunda pantalla elegir la opcion 'Coma' y 'Tratar los delimitadores consecutivos como uno' y pulsar el boton 'Siguiente'
- en la tercera pantalla:
a. marcar la 1ra columna (vacia) en la tabla de abajo y elegir la opcion 'No importar columna'
b. marcar la 2da columna en la tabla de abajo y elegir la opcion 'General'
- pulsar el boton 'Avanzado'
- para el separador de decimales elegir "," y para el separador de miles elegir "."
(lo que tienen los datos originales, no lo que buscas) <<-(esta opcion parece estar estropeada en mi Excel2007)
- pulsar el boton 'Aceptar'
- pulsar el boton 'Finalizar'

2) Por macro

Sub Test()
Selection.TextToColumns _
Destination:=Selection.Cells(1), _
DataType:=xlDelimited, _
ConsecutiveDelimiter:=True, _
Space:=True, _
FieldInfo:=Array(Array(1, 9), Array(2, 1)), _
DecimalSeparator:=",", _
ThousandsSeparator:="."
End Sub
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida