Mostrando entradas con la etiqueta Exceltricidades. Mostrar todas las entradas
Mostrando entradas con la etiqueta Exceltricidades. Mostrar todas las entradas

jueves, 16 de agosto de 2012

Rótulos en Movimiento con Excel

Lo prometido es deuda, y aunque he andado algo liado este verano hago esta entrada para cumplir con lo que os comenté en la entrada Simulación, movimiento e impacto en Excel, un simple ejemplo de cómo mostrar movimiento con Excel. No es la forma que indicaba en la entrada, pero sí la más sencilla para mostrar un movimiento. Insisto es una entrada referida a una curiosidad (una pequeña frivolité), por eso está dentro de la categoría de Exceltricidades. No hay entrada de estricta aplicación administrativa hoy.

Haciendo una excepción sobre mi política de no introducir entradas sobre código VBA cuando aún quedan muchísimas cosas que contar sobre el propio Excel, indicaré las dos Subrutinas necesarias. Una sale prácticamente tal cual de la grabación de una macro con el grabador.

En primer lugar construiremos el rótulo que queremos desplazar. En este caso como va a subir de abajo a arriba, lo construyo a partir de la fila 59.


La sensación de movimiento la conseguimos simplemente sucediendo eliminaciones de rangos de celdas, en este caso el rango D2:CL2, que cubre la longitud más larga del rótulo. La macro que elimina ese rango es:


Veréis que si grabáis con el grabador una macro que seleccione el rango y elimine las celdas subiendo las demás hacia arriba para ocupar el hueco, obtenéis una macro prácticamente igual que esta. Simplemente he eliminado la parte que selecciona el rango.

Ahora basta con repetir muchas veces esa macro, para ello utilizamos la siguiente subrutina. Básicamente es un bucle que repite tantas veces como le indiquemos lo que programemos dentro del mismo.


Esta rutina es muy fácil, es lo mismo (pero infinitamente más eficiente) que repetir entre Sub y End Sub 200 veces Macro1.

Ahora simplemente coloco un botón de comando a la derecha de la página (fuera del área que va a ocupar el rótulo) y le asigno la Macro “Letsmove” para iniciar el movimiento del rótulo cuando ejecutemos el botón de comando.


La calidad del vídeo no es la mejor pero es suficiente para mostrar la idea de movimiento en Excel. Como he dicho antes no es la forma en la que movería los marcianos en caso de querer hacer una simulación de máquina recreativa, es simplemente la manera más fácil de hacer una marquesina que nos muestre un efecto de movimiento en Excel. A partir de aquí los más inquietos podréis intentar hacer algo más sofisticado, hay mucho margen…

Por ejemplo que se repita indefinidamente el rótulo...

¿Repitiendo el rótulo una y otra vez abajo hasta la celda 20.000 y que N llegue hasta ese número?... No, claro que no!. Basta con pegar el rango que cortamos en un rango por debajo del final del rótulo original dentro de la Macro1. A medida que desaparece por arriba, se va construyendo por abajo.

Estas pequeñas trivialidades en principio parecen no servir de mucho, pero como todo en la vida, nunca se sabe dónde o de qué modo vamos a poder aplicarlas. Esto me recuerda lo que comenta Steve Jobs sobre la caligrafía en el vídeo de la derecha...

Por cierto, estoy terminando una nueva aplicación para practicar inglés. En breve la colgaré en Xcl NT docs.

jueves, 12 de julio de 2012

Simulación, movimiento e impacto en Excel


Atendiendo a un par de comentarios en la entrada de Máquinas recreativas de los 80 en tu Excel que parece haber suscitado bastante interés, escribo esta nueva entrada. Comenté que tenía previsto hacer un tetris y hay curiosidad sobre cómo. Son cuatro ideas sobre cómo hacerlo que hay que depurar y mejorar. Cuando finalmente lo construya puede que haya encontrado algo mejor, pero son mi primera impresión sobre por dónde pueden ir los tiros. De hecho, si a alguno de vosotros se le ocurre alguna mejor está invitado a compartirla con nosotros.

Ante todo tengo que decir que hace falta utilizar VBA, sin entrar en detalles de código propongo mi reflexión como ejercicio teórico. En primer lugar, una de las cosas que me llamó la atención era cómo conseguían los caracteres necesarios para representar las naves y personajes, (ya que estos no están presentes en Excel…). Observando uno de los juegos que me he descargado “Space Invaders”, es más sencillo de lo que parece. Basta con hacer cuadrados las celdas y minimizar cuanto sea necesario el zoom utilizando el conjunto de celdas preciso para representar el gráfico deseado.

Como una imagen vale más que mil palabra, tenemos el resultado:


Compuesto por:


En el caso del tetris, es bastante más evidente, aunque cuando me ponga a hacerlo, lo más probable es que utilice un UserForm como pantalla, por lo que utilizaré otro sistema.


Ni que decir tiene que todas esas celdas que representan cada elemento actúan a partir de ese momento como una unidad. De este modo, la cuestión de cómo simular el entorno de la máquina queda resuelto (y es bastante más sencillo de lo que se podría imaginar…).

Hablaré de dos cuestiones mas que a primera vista intuyo que son de lo más importante para la construcción del juego: el movimiento y la determinación de un impacto. Ambas están relacionadas.

Empezaremos por el movimiento. Bastaría con cambiar el formato de las celdas a cómo sería desplazando una celda a la derecha, izquierda,… todo el bloque. Algunas quedarán como estaban y otras cambiarán: Por ejemplo, en el caso de nuestro marciano verde avanzando hacia la derecha, desplazaríamos todo el conjunto de celdas una celda a la derecha así la celda BE73 pasaría a tener fondo negro la celda BF73 seguiría con fondo verde y la celda BG73 pasaría de fondo negro a fondo verde. Haciendo este ejercicio en todas las celdas de forma sucesiva tendríamos el movimiento del marciano.

Para determinar el impacto es similar. Cada celda donde hay marciano debería tener un valor, y donde no lo hay estar en blanco. Para determinar si hay impacto bastaría con comprobar que tras el movimiento todas las celdas ocupan lugares sin datos en ellas. Si no es así, es que algo se ha interpuesto en su camino, por lo general un proyectil… En el caso de la bajada de esta pieza del tetris, habría que comprobar si las celdas J22 y K20 tienen algún valor con lo que se detendrá el movimiento o están vacías, en cuyo caso puede seguir bajando.


Como he dicho antes, esto se programa con VBA, no hay posibilidad de hacerlo con los comandos de Excel propiamente dicho aunque a bote pronto se me ocurre que alguno podría ayudar como el formato condicional,… si automáticamente cada vez que una celda cambia de valor se actualiza el formato, tendremos menos que programar. Bastaría con desplazar conjuntos de números.

Como idea superficial esto es lo que propongo para hacer de Excel un videojuego, cosa que por descontado no es la finalidad del programa.

En la próxima entrada haré un pequeño ejercicio construyendo en Excel una marquesina en la que se muestre un título en movimiento. Lo haré utilizando un procedimiento distinto del que planteo para estos juegos pero que creo que puede por su simplicidad despertar la creatividad de muchos sin ser necesarios conocimientos profundos de VBA.

martes, 26 de junio de 2012

Máquinas recreativas de los 80 en tu Excel

Personalmente, programar en Excel y VBA es una actividad que me encanta, resulta muy entretenido pensar en algo que te gustaría hacer en Excel para luego darle vueltas y buscar la forma de hacerlo. Cuando la encuentras es realmente satisfactorio. Si además es algo que te permite hacer tu trabajo más rápido y mejor, no os digo más…

Pero que sería de la vida sin momentos de ocio… He encontrado esta web japonesa en la que están disponibles para descargar juegos clásicos de las máquinas de los años 80 en Excel.

Curiosamente tenía ya pensado cómo hacer un Tetris en Excel, pero veo que ya hay varias versiones colgadas en esa página, así que pensaré en otro reto…


Como ya sabéis, en Xcl NT docs he colgado algún juego que he hecho en Excel; tipo Quiz (Xcl NT Places), tipo “brain training” (Xcl NT Memory) y tipo Puzzles (Xcl NT Puzzles). Pero los que hay en estas páginas son versiones de arcades que muchos de nosotros hemos jugado de pequeños.

Logrados con mayor o menor fidelidad, algunos de ellos dan problemas al abrirlos, según he podido leer por ahí debido a la incompatibilidad de algunos caracteres japoneses (esto no lo tengo claro, pero me parece lógico). No obstante muchos si se pueden ejecutar y despertará nuestra añoranza de los tiempos mozos en los que gastábamos nuestra paga jugando a los marcianitos.

jueves, 21 de junio de 2012

Hacer que Excel hable

Si, ¡Excel habla!. Una posibilidad de Excel que resulta muy llamativa es hacer que Excel hable. Podemos escribir en una celda lo que queremos que diga y para sorpresa y regocijo de aquellos que desconocían esta posibilidad escucharemos una voz que dice lo que hemos escrito.

La pega es que salvo error por mi parte, sólo es posible hacerlo hablar en inglés… En caso de poner una frase en castellano sonará muy diferente a lo que esperamos, como un guiri que no tiene ni idea de español y lee algo de un papel.  Tengo entendido que Steven Hawking comentó en cierta ocasión sobre el acento inglés de su ordenador de habla, que lo había elegido a propósito por que había comprobado que resultaba más sexy a las mujeres. Debe ser por eso que no han construido la opción en castellano.

Hasta ahora, para hacer hablar a Excel acudía a VBA. Como es un código realmente sencillo ni siquiera me había planteado que pudiese estar disponible a través de un comando en Excel. Para que Excel nos diga lo que hemos puesto en la celda A1 de la Hoja1 escribía el siguiente código.
Sub Habla()
Application.Speech.Speak Sheets("Hoja1").Range("A1")
End Sub

Pero como SIEMPRE ocurre en Excel, hay varias maneras de hacer una misma cosa. Gracias al comentario que Rebeca dejó hace un par de días, he encontrado un grupo de comandos que no sólo hace que Excel hable, sino que además lo hace de distintas maneras.

Eso sí, éstos comandos no están presentes en la cinta de opciones standard, hay que rescatarlos. Para ello acudimos a Personalizar barra de herramientas de acceso rápido. Para aquellos que lo puedan necesitar el proceso viene explicado en la entrada Trucos y Consejos IV: Personalizar Excel.




Los comandos que nos interesa rescatar son:
Leer celdas; Situados en una celda, ejecutamos el comando y Excel lee el contenido.
Detener la lectura de celdas. Finalizar esta opción.
Leer celdas al presionar Enter, Excel lee la celda una vez pulsado Enter cuando la teníamos seleccionada.
Leer celdas por filas. Las celdas se leen por el orden en que Excel las encuentra repasando las filas.
Leer celdas por columnas. Igual que el anterior, pero siguiendo las columnas.

No es necesaria mayor explicación, ponemos en las celdas lo que queremos que Excel diga y utilizamos el comando que más nos convenga.

Obviamente esto es una pequeña frivolidad que no se puede considerar como una utilidad importante de Excel, de hecho esta funciónalidad no es exclusiva de Excel, también está al menos en Word y PowerPoint. Pero todo suma. Siempre se puede haber algo para lo que nos sirva, es bueno tenerlo por si acaso.

lunes, 27 de julio de 2009

Simulador para el cálculo de Lotería Primitiva

Navegando -por internet -me encontre. con un blog sobre -excel que a mi juicio -adolecía un poco de abusar de Visual Basic. En mi opinión Visual Basic puede potenciar las posibilidades de excel y hacer cosas que excel no permite, pero hay muchos casos en los que las fórmulas de excel son más eficientes.
.
Como ejemplo, en dicho blog se ofrecía un calculador de loterías primitivas en Visual Basic. El programa contenía un número bastante grande de líneas de código. Como alternativa al código propongo una alternativa a mi juicio bastante más rápida y simple.
.
Procedimiento:
Llamamos a la pestaña 1 de excel "Cálculos"
Celda A1, =ENTERO(ALEATORIO()*49)+1. Arrastramos esta fórmula unas cuantas filas (pongamos que hasta la fila 20 aunque no hace falta tanto). Con esto generamos una serie de números aleatorios del 1 al 49.
Celda C1, =ENTERO(ALEATORIO()*9)+1. Con esto generamos un número aleatorio del 1 al 9 para el reintegro.
.
Lamamos a la pestaña 2 "Simulador"
Grabamos aquí una macro que haga lo siguiente:
Hace doble click en A1 de Cálculos y ejecuta Enter. (con esto obtenemos nuevos números aleatorios)
Copia la columna A de Cálculos y la pegamos en valor en la columna B
Si tenemos excel 2007, seleccionamos la columna B y ejecutamos (Datos / Eliminar coincidentes)
Con esto tenemos suficientes números aleatorios no repetidos para nuestra primitiva.
Terminamos la macro.
En la pestaña Simulador insertamos un botón de comando con el nombre Generar Primitiva, al que le asignamos la macro que acabo de explicar.
Finalmente, hacemos una carátula en la pestaña Simulador en la que aparezcan los 6 números, el complementario y el reintegro, Vinculamos los 6 números y el complementario a las celdas B1, B2, B3, B4, B5, B6, B7 de la hoja Cálculos y el reintegro a la celda C1.
Fin.
.
En hacer esto se tardan 3 minutos, Pensé que podría ser interesante compartirlo con vosotros. No obstante estoy seguro de que puede hacerse de otras formas. Si se os ocurre alguna mejor POR FAVOR SENTIROS LIBRES DE EXPONERLA!!.