UniversoExcelForo

Respuesta a consultas.
Fecha de creación: 09.Abril.2012

Fundadores: Wibly,Tyno,Servando,Sakkar,Rosendo2,RMaximo,Railar,Mcoronel,Ioyama,Igtelo,Hugotron,Drochar,Dedos,Alberto,Adolfo

Por favor antes de hacer su consulta lean "Recomendaciones para hacer preguntas." Den Click aquí

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje [Página 1 de 1.]

Federicov


Buenos días,


Hice una función VBA que hace unos cálculos iterativos. La cantidad de iteraciones la quiero colocar en una celda Excel. He probado con las funciones VBA CELLS y RANGE, y el resultado es un error #¡VALOR!.
Si le pongo comentarios a las instrucciones CELLS o RANGE, la rutina funciona perfectamente, pero no puedo ver la cantidad de iteraciones. La rutina Preciofin la corro desde una celda Excel. Está escrita dentro de un módulo llamado “Módulo1”, junto a otra función que ella usa internamente. Cualesquiera de las siguientes instrucciones da el error #¡VALOR!, sin embargo la rutina funciona bien sin estas funciones presentes.
'Sheets("Metodoit").[H7].Formula = it

'Range("H7").Value = it

Cells(7, Cool.Value = it

Igtelo

avatar
Hola Federico.

El pdf NO nos sirve, lee las normas.

Saludos
Ignacio Téllez

Federicov


Hola, Buenas tardes Ignacio,

Gracias por contestar!!!

Me dice que el pdf NO les sirve, ¿qué parte no les sirve?, ¿porqué el pdf no sigue las normas?, no comprendo.

O quizás se refiere a que el pdf no se lee?, se lo he enviado a otras personas, lo he bajado, y se lee perfectamente. Su contenido es una explicación del problema con el código VBA que se usa y da el error.

Si me da una pista podría re-escribirlo o detallar algo que no se explicó con claridad. También podría colocar el código aquí mismo, mejorando su explicación:

Código de Módulo1:
Los valores iniciales en la celdas de Excel pueden ser los siguientes:
P   = 1175
inc = 0.001
tol = 0.0005
rd  = 10
La respuesta es Preciofin = 1,181.82 (esto cuando no se usan las funciones Sheets, Range, Cells. Usando Msgbox se ve la cantidad de iteraciones: 6,820.

' *********inicio de instrucciones Modulo1
Public it As Integer
Function truncarn(x As Double, n As Integer) As Double
truncarn = Int(x * ((10) ^ n)) / ((10) ^ n)
End Function

Function Preciofin(P As Double, inc As Double, tol As Double, rd As Integer) As Double
Dim pnuevo, Dif, precioi As Double
it = 0
precioi = P

Do
it = it + 1

Preciofin = precioi - truncarn(precioi - truncarn(precioi * 1.1 / rd, 0) * rd / 1.1, 2)

If Preciofin <= P Then
  pnuevo = precioi + inc
Else
  pnuevo = precioi
End If

If pnuevo - precioi <= tol Then
  Dif = 0
Else
  Dif = pnuevo - precioi
End If
precioi = pnuevo

If it > 10000 Then
  Dif = 0
End If
Loop Until Dif = 0

Preciofin = Round(Preciofin, 2)

‘Colocación de las iteraciones en una celda Excel
'Sheets("Metodoit").[H7].Formula = it
'Range("H7").Value = it
' ***  La siguiente instrucción es la que genera el error.
' ***  Las otras dos instrucciones anteriores (RANGE, SHEETS
'        también generan el mismo error cuando se les quita
'        el comentario y se activan.
Cells(7, 8).Value = it
End Function
' ************* fin de instrucciones Modulo1 *************

Gracias
Federico Velázquez.

Federicov


Veo que algunos suben el archivo Excel. Lo ví en otras normas diferentes al incio. Aquí lo subo por si les sirve de algo. He quitado todo lo que no se refiere al caso.

Federicov


Archivo xlsm con la hoja excel simplificada.
Archivos
Precio iterativo2.xlsm
Es el archivo a que me refería anteriormente en la respuesta 4.
No tienes los permisos para descargar los archivos.
(16 KB)

Igtelo

avatar
Hola Federico.

Vamos por partes:

1.- Es un foro de Excel, por tanto es "obvio" que deben ser archivos de Excel ¿O no?

2.- Te dejo código en "Hoja1" de VBA para que te ponga el resultado en la celda que indicas, funciona porque la variable it la tienes como pública.

Los Function siguen determinadas reglas ya que estás haciendo una fórmula por ello te daba guerra, no así con el Msgbox (Busca en la red al respecto).

Saludos
Ignacio Téllez
Pd: Eliminé el pdf para no ocupar almacenamiento (éste cuesta).
Archivos
FedericoV-Iteraciones en celda.xlsm
No tienes los permisos para descargar los archivos.
(21 KB)

Federicov


Muchas gracias Ignacio.

Me confundí con lo del PDF porque ví por ahí que alguien había enviado un PDF y pensé que era la norma. Es claro que debe ser un EXCEL.

Ya funciona perfectamente. Leeré los temas que me aconsejas.

Es muy útil esta aplicación para poner precios en un restaurant o cafetería. Es para que la cuenta al final cuadre con múltiplo de 5 o 10 según se quiera poner al aplicar una ley de propina del 10% (en Rep. Dominicana solamente la he visto). Le había quitado todo lo demás al archivo Excel.

Esto es para servicio de comida que no pagan IVA (ONGs) que aquí es 18%. Si paga el IVA entonces tendría que aplicarse un 28%.

Es decir si el precio anterior es $1175, se vendería a 1181.82, en la cuenta del cliente $1181.82x1.1 es $1300.00 número redondo que le gusta al cliente y evita el exceso de cambio en el negocio.

Si se redondea a 5, sería 1177.27x1.1 = 1295.00
Las fórmulas matemáticas las deduje yo mismo.

Gracias mil!!!

Igtelo

avatar
Hola nuevamente.

Buen trabajo Federico, pero me tiene intrigado:¿Para que quieres el número de iteraciones?

Ignacio Téllez

Federicov


Hola, Ignacio.

El problema inicial consistía en encontrar un precio final del cliente, que cuando se multiplique el precio de un plato en el restaurante y multiplicar por 1.10 (10 % de ley de propinsa) el resultado sea un número múltiplo de 5 o de 10.

Con tu respuesta ahora lo voy a hacer para combinar el IVA (18%) y/o el impuesto de ley de propinas (10%) por si se quiere usar fuera de una ONG.

Cuando ví el problema primero intenté hacerlo con el Método de Newton, pero como era un problema práctico más que abstracto el asunto de usar derivadas no encajaba de ninguna forma.

Luego probé varias formas de ecuaciones derivadas del método de aproximaciones sucesivas, luego el método de bisección, el problema radicaba en que la aplicación de estos métodos o no convergían o daban una respuesta muy por encima del precio inicial, lo cual no es bueno para el negocio.

Pensé que debía intentar un método práctico acercándome siempre a la solución por la izquierda, y de diversas opciones este fue que me quedó mejor.

Pero debía de establecer el máximo de iteraciones en un rango de precios en RD$ (pesos dominicanos) para lograr una convergencia aceptable y comencé a tratar de hacerlo con CELLS porque era más elegante de esa forma cuando cambiaba los parámetros para fines de prueba-error. Cuando no pude entonces lo hice con MsgBox y eso me permitió llegar a una solución.

¿Al usuario final le interesan las iteraciones? realmente no, es muy matemático, pero necesitaba tener límites y rapidez probando diferentes parámetros de forma tal que si llega a las iteraciones límites del algoritmo ponga un mensaje de alerta al usuario, en este caso 10,000, pero que de la última respuesta. Esto lo quería hacer con una celda en Excel normal usando formato condicional, en base al valor de la celda que tiene la variable it.

Además, por la curiosidad de la investigación científica que siempre tengo no puedo dejar sin resolver un error de programación, por lo cual agradezco tu respuesta, y quería saber cómo se hacía por si en un futuro se me presenta de nuevo, uso mucho el Excel para trabajos de índoles diversas, desde investigación científica hasta asuntos muy prácticos, y ahora es que incurro en VBA-Excel por primera vez. Tambien uso Access, Delphi y ahora me estoy mudando a C# y sql/server.

Una vez quería saber como resolver el tiempo del ciclo de conjunción de dos o más planetas u objetos cósmicos en movimiento. El de dos planetas se consigue usando google, pero de tres o más no hay información. Pasaron más de 10 años tratando de resolver el problema, de vez en cuando le dedicaba un tiempo, la curiosidad no me dejaba tranquilo. Cada vez probaba los resultados matemáticos en Excel. Duré más de un año sin trabajar en el asunto y un día me desperté a las 7 am (normalmente despierto a las 4 o 5 am) con la solución en la cabeza, para mí fue algo sorprendente, inmediatamente me senté en la PC, lo transformé en Excel y listo, ahora tengo la solución para más de dos planetas. Esto fue por un estudio del siglo VI aC, -576 aC, Urano, Neptuno y Plutón.

Es para aplicarlo en el Club Deportivo Naco (República Dominicana) del cual soy socio y somos cerca de 20,000 familas, tiene instalaciones en la playa, campos de golf, baseball, gimnasio de pesas, gimnasia olímpica, voliball, Xtreme Runner (es lo que practico), natación, judo, piscina olímpica y varias piscinas recreativas, entre otros, además de ser uno de los clubes sociales más importantes del país, instalaciones principales en el centro de la ciudad, varias cafeterías, varios restaurantes, etc. Lo estoy haciendo sólo por ayudar al club, sin lucro. En el 2017 el club ganó 2,468 medallas en competencias nacionales e internacionales más de 1000 de oro, más de 700 de plata y más de 600 de bronce.

Igtelo

avatar
Hola Federico.

Gracias por tu explicación y tiempo, interesante lo que haces y sobre todo me agrada el que hayas optado por lo sencillo, muchas veces lo he mencionado y seguiré diciendo, para grandes obstáculos ==> soluciones sencillas...

Otra forma en que puedes obtener el dato es haciendo una macro normal, en éste caso pasa el código del evento al módulo, sólo que tendrías que agregar un botón y dar click, lo hice como evento para evitar dicho botón. Ya tienes 2 formas para hacerlo.

Saludos
Ignacio Téllez

Contenido patrocinado


Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

Permisos de este foro:
No puedes responder a temas en este foro.