mantener decimales

27/09/2007 - 20:44 por LuisVF | Informe spam
Como puedo mantener el número máximo de decimales en VBA?

Hago operaciones del tipo:

dim x, y as Double

x = 41.235689
y = 78.14253678

[a5] = [b5] * x
[b5] = y
[a6] =[a5]*[b5]

y le doy formato con NunberFormat (.NumberFormat = "#,##0.00 $") para que
sólo muestre dos decimales.

Lo que hace es cortar los números y las inexactitudes se arrastran

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
29/09/2007 - 07:53 | Informe spam
hola, Luis !

no es muy claro el *objetivo* de mantener decimales en vba -?-
pero toma en cuenta las siguientes observaciones:

1) en la forma de declaracion de variables que utilizas:
-> dim x, y as Double
a) la variable "x" tiene asignada [por omision] el tipo de datos *Variant*
b) la variable "y" tiene asignada *explicitamente* un tipo de datos *Double*
c) si tu intencion es que ambas variables tomen el tipo de datos double, debes modificar la instruccion a:
-> Dim x As Double, y As Double

2) usar la propiedad *.NumerFormat = ...*
a) NO modifica el numero *real* que guarda la celda
b) es solamente una *mascara* [formato, aspecto visual, etc.] para presentar el numero *real* almacenado

3) comprueba el valor *real* [almacenado] en la celda pe.
a) si es un valor constante [NO formula]: -> lo podras ver en la barra de formulas
b) si es un valor resultado de una formula: -> pulsa las teclas {F2} seguida por {F9}
[una vez que compruebes cuantas decimales tiene el numero *real*, pulsa la tecla {Esc}]

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta original __
Como puedo mantener el numero maximo de decimales en VBA?
Hago operaciones del tipo:

dim x, y as Double

x = 41.235689
y = 78.14253678

[a5] = [b5] * x
[b5] = y
[a6] =[a5]*[b5]

y le doy formato con NunberFormat (.NumberFormat = "#,##0.00 $") para que solo muestre dos decimales.
Lo que hace es cortar los números y las inexactitudes se arrastran
Respuesta Responder a este mensaje
#2 LuisVF
30/09/2007 - 02:47 | Informe spam
Saludos Héctor

Pongo un ejemplo más claro:

Sub formato()
Dim x As Double
Dim y As Double
[a1] = 41.235689
[a2] = 78.14253678
[a3] = [a1] + [a2]
[a1].NumberFormat = "#,##0.00 $"
[a2].NumberFormat = "#,##0.00 $"
[a4] = [a1] + [a2]
End Sub


Esto me da:

[a1] = 41.235689
[a2] = 78.14253678
[a3] = 119,37822578
[a4] = 119,38

Lo he resuelto dando formato al final, ya que eran muchas operaciones y el
redoneo afectaba bastante al resultado

Pero mi duda es ¿si se supone que sólo es formato [a4] no debería dar
119,37822578?


"Héctor Miguel" escribió en el mensaje
news:%
hola, Luis !

no es muy claro el *objetivo* de mantener decimales en vba -?-
pero toma en cuenta las siguientes observaciones:

1) en la forma de declaracion de variables que utilizas:
-> dim x, y as Double
a) la variable "x" tiene asignada [por omision] el tipo de datos
*Variant*
b) la variable "y" tiene asignada *explicitamente* un tipo de datos
*Double*
c) si tu intencion es que ambas variables tomen el tipo de datos
double, debes modificar la instruccion a:
-> Dim x As Double, y As Double

2) usar la propiedad *.NumerFormat = ...*
a) NO modifica el numero *real* que guarda la celda
b) es solamente una *mascara* [formato, aspecto visual, etc.] para
presentar el numero *real* almacenado

3) comprueba el valor *real* [almacenado] en la celda pe.
a) si es un valor constante [NO formula]: -> lo podras ver en la barra
de formulas
b) si es un valor resultado de una formula: -> pulsa las teclas {F2}
seguida por {F9}
[una vez que compruebes cuantas decimales tiene el numero *real*,
pulsa la tecla {Esc}]

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta original __
Como puedo mantener el numero maximo de decimales en VBA?
Hago operaciones del tipo:

dim x, y as Double

x = 41.235689
y = 78.14253678

[a5] = [b5] * x
[b5] = y
[a6] =[a5]*[b5]

y le doy formato con NunberFormat (.NumberFormat = "#,##0.00 $") para que
solo muestre dos decimales.
Lo que hace es cortar los números y las inexactitudes se arrastran




Respuesta Responder a este mensaje
#3 Héctor Miguel
30/09/2007 - 04:59 | Informe spam
hola, Luis !

si estas *aprovechando* VBA para *manejar* [solo] los resultados que *muestran* las celdas en excel...
[probablemente] vas a necesitar una forma de *distinguir* los valores con los que realmente vas a *trabajar*
[me explico]: excel y vba, cada uno tiene *su forma de ver* lo que muestran [como resultado] las celdas...

prueba con otro ejemplo [espero sea claro] agregado unas lineas mas al codigo que expones...
[sigue los msgboxes y comprueba que resultado se va depositando en las celdas A3, A4, A5 y A6

Sub Formato()
Dim x As Double, y As Double
[a1] = 41.235689
[a2] = 78.14253678
MsgBox "SIN aplicar formatos en A1 y A2" & _
vbCr & [a1] + [a2]
[a3] = [a1] + [a2]
[a1].NumberFormat = "#,##0.00 $"
[a2].NumberFormat = "#,##0.00 $"
MsgBox "Como *ve* VBA los formatos de A1 y A2" & _
vbCr & [a1] + [a2] & vbCr & _
"(aunque los deposita *recortados*)..."
[a4] = [a1] + [a2]
MsgBox "Como *ve* VBA-CDbl() los formatos de A1 y A2" & _
vbCr & CDbl([a1] + [a2])
[a5] = CDbl([a1] + [a2])
MsgBox "Como *ve* Excel los formatos de A1 y A2" & _
vbCr & Evaluate("a1+a2")
[a6] = Evaluate("a1+a2")
End Sub

si cualquier duda... comentas ?
saludos,
hector.

__ la consulta original __
Pongo un ejemplo mas claro:
Sub formato()
Dim x As Double
Dim y As Double
[a1] = 41.235689
[a2] = 78.14253678
[a3] = [a1] + [a2]
[a1].NumberFormat = "#,##0.00 $"
[a2].NumberFormat = "#,##0.00 $"
[a4] = [a1] + [a2]
End Sub
Esto me da:
[a1] = 41.235689
[a2] = 78.14253678
[a3] = 119,37822578
[a4] = 119,38
Lo he resuelto dando formato al final, ya que eran muchas operaciones y el redoneo afectaba bastante al resultado
Pero mi duda es si se supone que sólo es formato [a4] no debería dar 119,37822578?
Respuesta Responder a este mensaje
#4 LuisVF
30/09/2007 - 05:53 | Informe spam
Saludos Héctor

Gracias por responder, una vez más

Pues me quedan muchas dudas:

- Pq si no le ponemos formato devulve tal cantidad de decimales? Que tipo de
dato se supone que devuelve/trata ¿Un Variant?

- "Creo" que en [a4] recorta los valores pq "hereda" el formato de [a1] y
[a2]

- "Creo" que al poner explicitamente que se quiere un Double pone 4
decimales (un Dbl tiene como máximo 4 cifras significativas a la drcha de la
coma ¿no?)

- Después de leer la ayuda no me acaba de quedar claro que hace EVALUTE

Bueno, son muchas dudas. No pretendo que las contestes :)))


A la conclusión que llego es que es mejor tratar los datos sin formato y, al
terminar las oparaciones, dar formato a las celdas ¿No es esa la mejor
opción?

PD: Hasta mañana no creo que conteste. Tengo mucho sueño :D

Saludos


"Héctor Miguel" escribió en el mensaje
news:e5jA%
hola, Luis !

si estas *aprovechando* VBA para *manejar* [solo] los resultados que
*muestran* las celdas en excel...
[probablemente] vas a necesitar una forma de *distinguir* los valores con
los que realmente vas a *trabajar*
[me explico]: excel y vba, cada uno tiene *su forma de ver* lo que
muestran [como resultado] las celdas...

prueba con otro ejemplo [espero sea claro] agregado unas lineas mas al
codigo que expones...
[sigue los msgboxes y comprueba que resultado se va depositando en las
celdas A3, A4, A5 y A6

Sub Formato()
Dim x As Double, y As Double
[a1] = 41.235689
[a2] = 78.14253678
MsgBox "SIN aplicar formatos en A1 y A2" & _
vbCr & [a1] + [a2]
[a3] = [a1] + [a2]
[a1].NumberFormat = "#,##0.00 $"
[a2].NumberFormat = "#,##0.00 $"
MsgBox "Como *ve* VBA los formatos de A1 y A2" & _
vbCr & [a1] + [a2] & vbCr & _
"(aunque los deposita *recortados*)..."
[a4] = [a1] + [a2]
MsgBox "Como *ve* VBA-CDbl() los formatos de A1 y A2" & _
vbCr & CDbl([a1] + [a2])
[a5] = CDbl([a1] + [a2])
MsgBox "Como *ve* Excel los formatos de A1 y A2" & _
vbCr & Evaluate("a1+a2")
[a6] = Evaluate("a1+a2")
End Sub

si cualquier duda... comentas ?
saludos,
hector.

__ la consulta original __
Pongo un ejemplo mas claro:
Sub formato()
Dim x As Double
Dim y As Double
[a1] = 41.235689
[a2] = 78.14253678
[a3] = [a1] + [a2]
[a1].NumberFormat = "#,##0.00 $"
[a2].NumberFormat = "#,##0.00 $"
[a4] = [a1] + [a2]
End Sub
Esto me da:
[a1] = 41.235689
[a2] = 78.14253678
[a3] = 119,37822578
[a4] = 119,38
Lo he resuelto dando formato al final, ya que eran muchas operaciones y
el redoneo afectaba bastante al resultado
Pero mi duda es si se supone que sólo es formato [a4] no debería dar
119,37822578?




Respuesta Responder a este mensaje
#5 Héctor Miguel
30/09/2007 - 06:44 | Informe spam
hola, Luis !

Pues me quedan muchas dudas:
- Pq si no le ponemos formato devulve tal cantidad de decimales?
Que tipo de dato se supone que devuelve/trata Un Variant?
- "Creo" que en [a4] recorta los valores pq "hereda" el formato de [a1] y [a2]
- "Creo" que al poner explicitamente que se quiere un Double pone 4 decimales
(un Dbl tiene como máximo 4 cifras significativas a la drcha de la coma no?)
- Despues de leer la ayuda no me acaba de quedar claro que hace EVALUTE
A la conclusión que llego es que es mejor tratar los datos sin formato
y, al terminar las oparaciones, dar formato a las celdas No es esa la mejor opcion? [...]



dejame *insistir* en esta parte del mensaje anterior:
si estas *aprovechando* VBA para *manejar* [solo] los resultados que *muestran* las celdas en excel...
[probablemente] vas a necesitar una forma de *distinguir* los valores con los que realmente vas a *trabajar*
[me explico]: excel y vba, cada uno tiene *su forma de ver* lo que muestran [como resultado] las celdas...





- prueba cambiando la conversion de CDbl() a: -> CSng()
- el metodo *Evaluate()* solamente *usa* a la aplicacion [excel] para que sea ella quien *administra* lo evaluable

- prueba dejando 'A1' en blanco [para modificarla por codigo] y usa en otra celda la funcion =largo(a1)
corre la siguiente macro:

Sub Probando_Formatos()
[a1] = 1.2345678901234
MsgBox Len([a1])
[a1].NumberFormat = "$ #,##0.00000"
MsgBox Len([a1])
[a1].NumberFormat = "$ #,##0"
MsgBox Len([a1])
[a1].NumberFormat = "general"
MsgBox Len([a1])
End Sub

y [nuevamente] dejame insistir en...
si estas *aprovechando* VBA para *manejar* [solo] los resultados que *muestran* las celdas en excel...
[probablemente] vas a necesitar una forma de *distinguir* los valores con los que realmente vas a *trabajar*
[me explico]: excel y vba, cada uno tiene *su forma de ver* lo que muestran [como resultado] las celdas...





si cualquier duda... comentas ?
saludos,
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida