martes, 5 de octubre de 2010

Lluvia

Dispone del siguiente archivo de Excel: lluvia.xlsm

Hoja1

Vamos a generar un poco de lluvia con una macro. De forma aleatoria generamos la posición de una celda dentro del un area, y en ese punto hacemos caer una gota de lluvia representada por un asterisco (*). Esta idea tan simple es la introducción que nos permite entender cómo se utiliza el método de simulación de Monte Carlo para el cálculo de áreas.


Código

Sub puntos_aleatorios()
Dim i As Integer
For i = 1 To 100
    Cells(Int(Rnd * 30) + 1, Int(Rnd * 30) + 1) = "*"
Next i
End Sub
Sub Borra()
Range("A1:AD30").ClearContents
Range("AQ1").Select
End Sub



Rnd genera un número aleatorio entre 0 y 1. Equivale a la función =ALEATORIO().

Hoja2

En la Hoja2 vamos a calcular estimar áreas usando la lluvia.


8 comentarios:

  1. Estimado Sr. Aparicio,

    ¿me podría decir porque deja la Celda BA1 seleccinada para la Macro Borrar?
    Range("BA1").Select

    Muchas gracias por adelantado,

    Un cordial saludo.

    ResponderEliminar
  2. Hola Adrián.

    Puedes finalizar la macro seleccionando la celda que quieras, o incluso dejando el cursor en su sitio. Yo tengo la costumbre de dejar el cursor a la vista, para evitar algunos problemas que surgen cuando después de mover el cursor no sabes ni donde le tienes. BA1 es un buen sitio porque esta sobre los botones, y sabes que siempre ha de estar a la vista del usuario.

    Un saludo.

    Adolfo Aparicio

    ResponderEliminar
  3. Hola,

    por experiencia, creo que nono es una buena práctica cambiar la celda que tiene seleccionada el usuario (que si la tiene seleccionada es por algo) a menos que la macro realmente lo requiera.

    Por lo general, el usuario tiene seleccionada una celda (y por lo general sabe qué celda es) antes de ejecutar la macro. Resulta molesto para el usuario que al terminar la macro el cursor no se encuentre en la celda en donde lo tenía, sin ninguna razón, y tener que buscarlo (porque así esté en el lugar más obvio, si no está en donde uno esperaría que esté, que es en donde lo dejó, no lo ve).

    ResponderEliminar
  4. Edito:Acabo de leer mi comentario ya publicado y veo que usé el termino cursor y está discusión no tiene nada que ver con el cursor, sino con la celda seleccionada.

    No hay forma de editar, así que depuro mi comentario anterior:


    por experiencia, creo que no es una buena práctica cambiar la celda que tiene seleccionada el usuario (que si la tiene seleccionada es por algo) a menos que la macro realmente lo requiera (y muy pero muy rara vez lo requiere).

    Por lo general, el usuario tiene seleccionada una celda (y por lo general sabe qué celda es) antes de ejecutar la macro.

    Resulta molesto para el usuario que al terminar la macro la celda seleccionada no sea la celda que él tenía seleccionada, sino que se la hayan cambiado sin ninguna razón, y tener que buscarlo (porque así esté en el lugar más obvio, si no está en donde uno esperaría que esté, que es en donde lo dejó, no lo ve).

    Creo que las mejores macros son aquellas que se ejecutan sin que el usuario sienta que ha pasado algo, sin que interfiera con lo que está haciendo... y cambiarle la selección (sin razón), definitivamente, no va en ese camino.

    ResponderEliminar
  5. Hola Mauricio.
    Me parece una buena aportación. Es cierto que no conviene marear innecesariamente al usuario.
    Tendré en cuenta tu comentario para macros orientadas al mundo empresarial. Aunque muchas de las que verás en este blog son para formación, y no se trata de dar una macro "llave en mano" sino de mostrar a los visitantes del Blog ejemplos de programación.
    Pero aún así, tienes razón, es preferible usar Offset y dejar el cursor quieto.
    Un saludo.
    Adolfo Aparicio

    ResponderEliminar
  6. Saludos Sr Aparicio, tengo una duda espero y pueda apoyarme, bueno digamos que 2000 registros en un libro de excel, entonces cada registro tiene su informacion propia como por ejemplo edad, telefono etc, pero el primer registro es el nombre, mi duda es como podria hacerle para que cuando yo de click por ejemplo en la celda de cualquier persona, auntomaticamente me muestre sus datos de la misma, es que si lo hago manual seria muchas lineas de codigo, como podria reducir un poco mas el codigo, saludos y gracias de antemano

    ResponderEliminar
  7. Soy super primeriza en Macros, pero se me ocurre que se podría poner:

    ActiveCell.Select

    y así no nos mareamos, no?

    ResponderEliminar