sábado, noviembre 24, 2012

Calcular al número de semana dentro del trimestre

En un comentario en la nota Calcular trimestres con Excel me pregunta un lector:

¿existe alguna fórmula que permita calcular el número de semana, pero no anual, sino dentro de un trimestre?

Excel no tiene una función nativa para este cálculo, pero podemos crear una fórmula como ésta:

=NUM.DE.SEMANA(A2)-NUM.DE.SEMANA(BUSCAR(A2;FECHA(AÑO(A2);{1;4;7;10};1)))+1

Esta imagen muestra algunos ejemplos



Así, por ejemplo, el 25/05/2012 corresponde al segundo trimestre del año; es la semana número 21 del año pero la octava semana del trimestre.

La idea de la fórmula es restar el número de semanas transcurridas hasta el primer día del semestre en cuestión del número de semana en el año de la fecha buscada.

Esta fórmula funciona así:

1 - =NUM.DE.SEMANA(A3) calcula el número de semana del año, en nuestro caso 21.

2 - BUSCAR(A3;FECHA(AÑO(A3);{1;4;7;10};1)) calcula el primer día del trimestre correspondiente a la fecha en A3. La expresión FECHA(AÑO(A3);{1;4;7;10}; crea una matriz con los primeros días de cada trimestre ({1;4;7;10} es una constante matricial). Así para la fecha 25/05/2012, esta fórmula da como resultado 01/04/2012.

3 - NUM.DE.SEMANA(BUSCAR(…) calcula el número de semana del primer día del semestre; en nuestro ejemplo, 14.

4 – Restamos este último resultado del número de semana en el año y sumamos uno para corregir el resultado.

martes, noviembre 06, 2012

Generar muestras aleatorias en Excel

Supongamos que tenemos una lista de nombres como esta (la lista contiene 100 nombres propios)


y queremos extraer una muestra aleatoria de diez nombres.

En Excel podemos hacerlo con facilidad usando la función ALEATORIO.ENTRE para generar números aleatorios y usando este resultado como argumento en la función INDICE. Por supuesto tendremos que superar algunos inconvenientes, como, por ejemplo, números repetidos.

Empezamos por crear un nombre definido que re refiere al rango que contiene la lista (la población, en términos estadísticos)



En la hoja donde queremos que aparezca la muestra creamos una matriz que contenga los nombres (D4:E14 en nuestro ejemplo) y en el rango A5:A14 creamos una columna auxiliar con la fórmula

=ALEATORIO.ENTRE(1,CONTARA(Lista))



La fórmula que extrae los nombre en el rango E5:E14 es

=INDICE(Lista,A5)

donde "Lista" es el nombre que acabamos de definir.

Ahora basta con apretar F9 (Recalcular) para obtener una nueva muestra.

El problema con este modelo es que los números aleatorios no son únicos, es decir, pueden repetirse y por lo tanto generar nombres repetidos.

Para evitar esto creamos un mecanismo que verifique si hay números repetidos y en caso afirmativo, vuelva a calcular. Por supuesto, tendremos que usar macros.

En B5:B14 creamos un rango auxiliar con la fórmula

=CONTAR.SI($A$5:$A$14,A5)

Si el número aparece una única vez en el rango, el resultado es 1; en caso contrario será mayor que 1. Por ejemplo, en este caso el número 75 aparece dos veces y por lo tanto el nombre Cristian aparece dos veces en la muestra



En la celda B15 agregamos la fórmula " =SUMA(B5:B14)". Creamos el nombre definido " ControlValoresUnicos" que se refiere a esta celda. Si todos los números aparecen una única vez, el valor de la celda será 10; si es mayor de 10, sabemos que hay números repetidos.

Para automatizar esta operación usamos esta macro que ponemos en un módulo común del editor de Vb

Sub valores_unicos()

    Calculate
    While Range("ControlValoresUnicos") <> 10
        Calculate
    Wend
  
End Sub


La primer línea del código recalcula la hoja; luego la estructura While…Wend sigue recalculando hasta que la celda " ControlValoresUnicos" contiene el resultado 10.

El último paso es ocultar las columnas auxiliares y agregar un botón de la colección de Formularios de manera que el usuario puede generar una nueva muestra apretando este botón



El archivo con el ejemplo puede descargarse aquí

viernes, octubre 26, 2012

Registrar entradas con fórmulas – una aclaración

En la nota sobre registro de entradas con fórmulas en Excel, sugerí el uso de Tablas para evitar tener que copiar las fórmulas con cada entrada.

Sin embargo, y como me señalan varios de mis lectores, el uso de tablas en este caso puede dar resultados inesperados. Veamos:



Al introducir el segundo nombre nos hemos movido con las flechas y el resultado es 0, que por el formato fecha-hora vemos como 00/01/1900 00:00:00.

Sin embargo, si nos movemos con la tecla TAB veremos que el resultado es el correcto:



En conclusión: podemos usar un rango común de Excel, copiando las fórmulas o convertir el rango en Tabla y movernos dentro de esta con la tecla TAB.