Entries RSS Comments RSS

Archive for the ‘OpenOffice’ Category

¡Bingo! Un generador de números hecho en OpenOffice Calc

Lunes, octubre 1st, 2012

Un colega preguntó en la lista de gleducar por un programa libre (con licencia libre, no simplemente gratuito), para generar los números del bingo.

Yo pensé en crear los números al azar con la función aleatorio() en calc, pero tenía el problema de cómo saber si los números ya salieron anteriormente. Como no encontré manera de agregar excepciones, algo que dijera “generar números al azar excepto los de esta lista”, no pude generar la aplicación mediante simples funciones (exceptuando la “trampita” de poner muchos if anidados, pero tiene un gran margen de error… salvo que se creen tantos if anidados como celdas preceden a la que estamos escribiendo, terminando con una celda que tenga 99 condicionales…).

Entonces busqué en Google una macro para OpenOffice Calc, donde se utilice la estructura while (mientras…), como para que el sistema realice esta estructura:

“mientras el número que salga en el sorteo no sea diferente a todos los anteriores, continuar sorteando números”.

Encontré este post que, casualmente, está realizado para un lotto (o bingo, no?)

Descargué el archivo de la página y entré al menú Macros, buscando la macro para editar su código:

Macros en OpenOffice Calc

Para que funcione tuve que copiar el código y pegarlo en una nueva macro (yendo a Mis Macros / Standard / Module 1 y eligiendo el botón Editar).

Modifiqué dos valores: donde decía 49 puse 99, dos veces.

Sub Lotto
Dim i
Dim j
Dim val
Dim match
oSheet = ThisComponent.Sheets(1)
For i = 1 To 99
oCell = oSheet.getCellByPosition(1,i)
Do
match = False
   val = int(rnd()*99) + 1
For j = 1 To i
If val = oSheet.getCellByPosition(1,j).getValue() Then
match = True
End If
Next j
Loop Until (match = False)
oCell.setValue(val)
Next i
End Sub

Después probé ejecutar la macro y efectivamente puso 100 números al azar en la columna B.

Lo siguiente es muy sencillo: en la columna C le puse una fórmula que mostrar los valores de la columna B sólo si había algo en la columna A:

=SI(A2<>”";B2;” “)

Oculté la columna B, y entonces, cada vez que uno escribe algo (por ejemplo una equis, un asterisco, cualquier cosa) en la columna A, se muestra un número en la columna C. Hay que ir escribiendo desde A2 hacia abajo:

Bingo terminado

Aquí les dejo el archivo, para usarlo tal cual viene, o para modificarlo a piaccere: bingo

¿Cuánto falta para cobrar?

Sábado, enero 21st, 2012

Si sos una persona normal, a la que no le sobra el dinero, seguramente vivirás haciendo cuentas sobre lo que gastaste y lo que te queda, cuántos días faltan para cobrar y cuánto te va a quedar después de hacer los gastos que ya tenés previstos (el celular, la cuota o el alquiler, la tarjeta de crédito…).

Personalmente, me divierto haciendo cuentas y más cuentas, porque no me gusta tener sorpresas y andar revisando los bolsillos de los sacos para ver si en invierno me quedó algo por ahí…

¿Cómo hacer cálculos con fechas?

Cuando escribimos una fecha en Calc, ésta se convierte en un número de serie que cuenta los días y las horas a partir de una fecha determinada. Cada número entero corresponde a un día, y los decimales son las horas y sus fracciones. Por lo tanto, cuando restamos dos fechas obtenemos la diferencia de días entre ellas.

Para saber qué día es hoy usamos la función HOY()

Escribimos el día de cobro en una celda, y entonces hacemos la resta: la fecha de cobro menos la fecha de hoy, da la cantidad de días. Dividimos el dinero total que tenemos por la cantidad de días, y sabemos cuánto podemos gastar cada día para llegar al próximo sueldo sin problemas.

Para el que le gustan las fórmulas más complicadas, va a ser mejor que sea Calc quien le diga qué día cobra.

Para saber qué día cobramos, sin tener que cambiarla cada mes, tenemos que armar el número de serie de la fecha del año de hoy, el mes de hoy más uno, y el día de cobro; suponiendo que está en D18 sería:

=FECHA(AÑO(HOY());MES(HOY())+1;D18)

Sin embargo, en esa fórmula tendríamos un problema en diciembre, ya que nos daría el mes 13 (mes de hoy más uno). Por lo tanto hay que usar otra fórmula, donde le sumemos un mes a la fecha.

Para eso vamos a empezar por averiguar si hay que sumarle o no un mes a la fecha. ¿El día de hoy =día(hoy()) es mayor que el día de cobro? Si es 3 de febrero cobramos el 4 de este mismo mes. Si es 20 de enero, hay que sumar un mes a la fecha.

Saber si hay que sumar un mes o no

Ahora armamos la fecha de cobro usando la fecha de hoy como base, y averiguamos cuánto es la fecha de hoy más un mes.

=fecha.mes(hoy();1)

Eso nos dice la fecha del próximo mes, por ejemplo si hoy es 17 de enero devuelve 18 de enero. Si hoy es 31 de enero nos devuelve 28 de febrero (o 29 este año).

Entonces, tenemos que saber cuál es el número de mes del mes que viene:

mes(fecha.mes(hoy();1))

Y el año del mes que viene

año(fecha.mes(hoy();1))

Para armar la fecha de cobro del mes que viene:

=FECHA(AÑO(FECHA.MES(HOY();1));MES(FECHA.MES(HOY();1));D23)

Pero sólo escribimos esa fecha si antes determinamos que sí hay que sumarle uno al mes, es decir que eso lo usamos si el día de hoy es mayor que el día de cobro (si hoy es 30 de enero y cobro el 4 de febrero).

Así que usamos un condicional, usando el dato de la celda d25 para saber si sumamos un mes, y d23 para saber qué día del mes cobramos:

=SI(D25=1;FECHA(AÑO(FECHA.MES(HOY();1));MES(FECHA.MES(HOY();1));D23);FECHA(AÑO(HOY());MES(HOY());D23))

(¡Qué linda fórmula! ¡Qué belleza de la informática!)

Descargar archivo con todas las fórmulas: cobro

El regalo de BetaWeblog para estas fiestas

Miércoles, diciembre 28th, 2011

Ya hubo un año en que BETAweblog regaló un calendario, pero esta vez el regalo es el calendario personalizable más la explicación de cómo hacerlo :)

  • Y debido a que al abrir el archivo anterior, Excel elimina las fórmulas, también les dejo acá el archivo xls, aunque les recomiendo que usen OpenOffice.org en lugar de usar Excel: calendario.xls

El calendario se ve de esta manera:

Calendario

En la primera celda se escribe el mes, y debajo el año. Sólo con eso, ya se visualiza el calendario al que puede modificarse el formato, el tamaño de letra, agregar un dibujo, una foto, etc.

Para el que tiene ganas de imprimir un calendario en otro formato, aquí hay varias plantillas para Calc.

¿Y cómo lo hice?

Creé una hoja de cálculos usando Calc, de OpenOffice.org. Se puede descargar e instalar desde este sitio: OpenOffice.org/es

  • Cada vez que tengo que saber cuál es el primer día del mes del calendario uso la función FECHA(año;mes;día). Como tengo el año escrito en a2 y el mes en a1, escribo: FECHA(A2;A1;1)
  • Para saber qué día de la semana empieza o termina un mes, uso DIASEM(fecha), que me devuelve un 1 para domingo, 2 para lunes, 3 para martes, etc. Para saber el primer día del mes del calendario me queda esto: DIASEM(FECHA(A2;A1;1)
  • Para conocer la cantidad de días del mes usé la función DÍASENMES(fecha).  Es decir: DÍASENMES(FECHA(A2;A1;1))
  • Para que en una celda se escriba una cosa u otra uso la condición SI(condición;”sí”;”no”). Por ejemplo, si quisiera escribir “Lunes” si un día es lunes, y un espacio si no es lunes, usaría: SI(DIASEM(FECHA(A2;A1;1)=2;”Lunes”;” “).

Para la primera fila del calendario necesité usar algunas condiciones:

En la celda del lunes: “Si el día de la semana del primer día del mes es 2, entonces poner aquí un 1. Si no, escribir un espacio”.

=SI(DIASEM(FECHA(A2;A1;1))=2;1;” “)

En la celda del martes: “Si el día de la semana del primer día del mes es 3, entonces poner aquí un 1. Si no, hay dos posibilidades: si en la celda del día anterior -lunes- no hay un espacio, aquí escribir un número más que el que está al lado. Si no, escribir un espacio.”

=SI(DIASEM(FECHA(A2;A1;1))=3;1;SI(C4<>” “;C4+1;” “))

En las últimas filas es necesario evaluar cuántos días tiene el mes y si corresponde o no escribir algo en cada celda: “Si el casillero anterior no tiene un espacio, hay dos posibilidades: si al sumarle uno al casillero anterior obtengo un número mayor al número de días que tiene este mes, entonces escribir un espacio. Si no, sumarle uno al casillero anterior.”

=SI(C8<>” “;SI(C8+1>DÍASENMES(FECHA($A$2;$A$1;1));” “;C8+1);” “)

En Excel no existía la función días en mes, así que tuve que complicar un poco más la función usando FIN.MES, que devuelve el número de serie del último día del mes:

=SI(E8<>” “;SI(E8+1>DIA(FIN.MES(FECHA($A$2;$A$1;1);0));” “;E8+1);” “)

¡Felices fiestas!