Estoy buscando una manera de usar el tipo de datos Decimal en una hoja de cálculo de Excel. Estoy almacenando información de enrutamiento como un número. Las rutas podrían consistir en 10 movimientos a 50 ubicaciones diferentes. Esto funciona bien en VBA usando el tipo de datos decimales, pero no puedo hacer que Excel acepte estos números una vez que se pasa de VBA.
Parece que el tipo de datos predeterminado es Doble, que no tiene suficiente precisión para mi aplicación. Además, una representación de cadena de un número no será suficiente ya que me estoy retirando del número en la hoja de trabajo.
Esto es lo que tengo hasta ahora para generar la Ruta #:
'generate route# for each row
For i = intFirstRow To intLastRow
'initiate route#
decRoute = CDec(dblInitialRoute)
For j = 1 To 7
'only assign if labor
If arrLabor(i, j, 1) <> 0 And arrLabor(i, j, 1) <> "" Then
'some stations could lead to multiple machines
If arrLabor(i, j, 2) = 1 Then
sglRandom = Rnd()
If sglRandom < 0.8 Then
intValue = 1
Else
intValue = 3
End If
decRoute = decRoute + intValue * (50 ^ ((decRoute - Int(decRoute)) * 100)) - 0.01
ElseIf arrLabor(i, j, 2) = 10 Then
sglRandom = Rnd()
intValue = Int((sglRandom * 1000) / (1000 / 20)) + 10
Debug.Print intValue
decRoute = decRoute + intValue * (50 ^ ((decRoute - Int(decRoute)) * 100)) - 0.01
Else
intValue = arrLabor(i, j, 2)
decRoute = decRoute + intValue * (50 ^ ((decRoute - Int(decRoute)) * 100)) - 0.01
End If
End If
'exception
If arrLabor(i, j, 1) = "" And j = 2 Then
intValue = 44
decRoute = decRoute + intValue * (50 ^ ((decRoute - Int(decRoute)) * 100)) - 0.01
End If
Next
'write route#
Debug.Print CDec(Int(decRoute) + dblInitialRoute)
wsActive.Cells(i, intRouteCol).Value = CDec(Int(decRoute) + dblInitialRoute)
Next
microsoft-excel
vba
microsoft-excel-2013
Simulador de perspicacia
fuente
fuente
Respuestas:
El tipo numérico de celda es un punto flotante de doble precisión capaz de contener hasta 15 dígitos de precisión.
Redondeo y precisión en Excel - CPearson
Parece que está tratando de mantener una mayor precisión de lo que está diseñado. Puede almacenar más dígitos haciendo que el número sea más grande, digamos un factor de 1x10 ^ 15. Almacenará la información adicional para usted, pero es posible que no funcione con la máquina que tiene.
fuente