Mostrando entradas con la etiqueta función matricial. Mostrar todas las entradas
Mostrando entradas con la etiqueta función matricial. Mostrar todas las entradas

martes, 24 de noviembre de 2015

Promedio condicional

Puede descargar el archivo de Excel siguiente.
Disponemos en Excel de las funciones siguientes.
  • SUMAR.SI
  • SUMAR.SI.CONJUNTO
  • CONTAR.SI
  • CONTAR.SI.CONJUNTO
Pero no disponemos de la función PROMEDIO.SI

Vamos a ver un caso donde realizamos un promedio condicional donde varía el rango que deseamos promediar y además eliminamos los valores que no son numéricos. Lo vamos a resolver por tres métodos.



Deseamos calcular el promedio anual del Euribor a un año. La información la obtenemos del Banco de España.

En el punto 1.7 disponemos de un histórico de Series Temporales, concretamente en el siguiente enlace podremos descargar el archivo csv.

Método 1

Consiste en crear cada rango de forma manual. Para ayudarnos creamos la columna E.


Método 2

Sin usar fórmulas matriciales podemos obtener el promedio usando SUMAR.SI y CONTAR.SI.CONJUNTO.

Veamos la celda I6.
=SUMAR.SI(Años;G6;Porcentaje)/CONTAR.SI.CONJUNTO(Años;G6;Porcentaje;">0")/100

Método 3

En este caso usamos una función matricial. Recuerde que este tipo de funciones se validan no pulsando ENTER, sino pulsando simultáneamente tres teclas: CONTRO+SHIFT+ENTER.

La celda J6 contiene la siguiente expresión.
=SUMA((--(Años=G6))*SI.ERROR(VALOR(Porcentaje);0))/SUMA((Años=G6)*ESNUMERO(Porcentaje))/100

Para saber más ...

En el siguiente post se resuelve un caso similar pero que se caracteriza porque los rangos son todos del mismo tamaño. Lo interesante del caso que hemos visto en esta ocasión es que los rangos no son todos iguales, ya que existen años con 365 días y años con 366 días. Además teníamos el handicap de contar con días en los que no existía Euribor y se marcaban con un guión bajo (_).

miércoles, 20 de agosto de 2014

Veces que se repiten ciertos números

Archivo de Excel utilizado: matricial_veces_repetidos.xlsx

Nos han planteado un caso práctico donde se necesitaba conocer cuántas veces se repite cada uno de los números entre el 1 y el 33 dentro de una tabla donde se encuentra esa información. Además se requería en un formato concreto. Para resolver este caso hemos tenido que utilizar funciones matriciales de las de tamaño grande.

Para entender este caso se tendría que revisar previamente el siguiente post.

Tabla 1

En la zona azul se generan números aleatorios entre 1 y 33.


Tabla 2

En la zona naranja contamos cuántas veces a parece cada uno de los 33 números.
En la zona verde se representa cada número según las veces que aparece usando diferentes columnas según el número de veces que aparezca.
Tenemos columnas que van entre 0 y 15. Estamos suponiendo que el número máximo de veces que puede aparecer un número son 15 veces. Esto se tendría que verificar en cada caso.


Tabla 3

La zona amarilla es el transpuesto de la zona verde. Se podría haber obtenido con la función matricial TRANSPONER.


Tabla 4

La zona rosa es la que queríamos obtener. En ella se ve cuantas veces aparecen cada uno de los números generados aleatoriamente.

viernes, 8 de agosto de 2014

BUSCARV para valores repetidos

Archivo utilizado en el vídeo: excelavanzado_buscarv_repetidos.xlsx

La función BUSCARV siempre busca el primer valor que encuentra en el caso de que existan varios repetidos. Vamos a proponer un procedimiento que nos permitirá extraer de una base de datos aquellos registros que indiquemos aunque estén repetidos.



Nota

En el rango W2:Z2 se encuentran las fórmulas aleatorias con las que se han generado los valores de la base de datos.

Hoja1

Hoja2

Usamos la siguiente función matricial.

=SI.ERROR(INDICE($B$6:$B$24;K.ESIMO.MENOR(SI(C6:C24=0;FILA());FILA()-5)-5);"")


Hoja3

En la Hoja3 se mustran los pasos que permite obtener la fórmula de la Hoja3 de la columan amarilla.


Hoja4

Introducimos una fórmula matricial que extrae los registros que cumplen el criterio. En la celda Q9 vemos la siguiene fórmula matricial.

=SI.ERROR(INDICE(factura;K.ESIMO.MENOR(SI($I$5=Comercial;FILA()-8);FILA()-8);1);"")

Esta fórmula matricial no pertenece únicamente a esa celda, sino que abarca el rango Q9:Q58.

Las fórmulas matriciales requieren tres pasos para establecerlas correctamente.
  1. Paso 1. Seleccionar el rango donde la fórmula matricial actua. En este caso es el rango Q9;Q58
  2. Paso 2. Escribir la fórmula matricial
  3. Paso 3. Validar la fórmula pulsando simultáneamente las tres siguiente teclas: Contro+Shift+Enter


domingo, 29 de abril de 2012

Elementos distintos y repetidos en una lista

Descargar el fichero: aeropuertos.xlsx

Deseamos determinar cuantos elementos se encuentran repetidos en un listado, y deseamos saber quienes son los repetidos.

Hoja 1

Disponemos de una serie de ciudades y deseamos conocer cuantos elementos hay sin repetición. Para ello utilizamos la fórmula matricial que se encuentra en la celda D14 y cuya explicación se encuentra paso a paso en las columna C, y D.

La fórmula matricial de la celda D14 es la siguiente:

=SUMA(1/CONTAR.SI(B4:B11;B4:B11))



Hoja 2

En este caso vamos a entender que un elemento está o no repetido según dos diferentes criterios. El estudio se puede entender de dos formas. La primera considera el conjunto total de datos y establece quienes están repetidos una o más veces. El segundo criterio analiza los datos por orden y únicamente considera que el dato está repetido si ya apareció anteriormente.

Partimos de un listado de AENA con los aeropuertos españoles y sus códigos de tres caracteres. Por ejemplo, el código de Barcelona es BCN.

En la columna K establecemos una serie de números aleatorios entre 0 y 1, que nos servirán para luego elegir los aeropuertos que deseamos analizar en otra tabla.

La fórmula de la celda K4 es:

=1/42+K3



En la columna C generamos de forma aleatoria los códigos de los aeropuertos. Generamos 24 códigos a elegir entre los 42 disponibles. Estos códigos al ser aleatorios podrán salir repetidos. Esto se consigue con la fórmula siguiente:

=BUSCARV(ALEATORIO();valores;2)

Donde 'valores' es el rango K3:L44

Método 1

En la columna D determinamos si el valor de la columna C que estamos analizando se encuentra repetido o no respecto a todos los valores de la propia columna C. Esto se hace en la celda D12 con la siguiente expresión.

=SI(CONTAR.SI(C:C;C12)>1;"repe";"")

Método 2

En la columna E vamos a determinar si un valor se encuentra repetido únicamente respecto a los que han aparecido antes que él, dentro de la propia columna C.

Este es el motivo de que en E12 siempre ponga 'nuevo' por definición, ya que es el primero.

La fórmula de la celda E13 es la siguiente:

=SI(C13="";"";SI(ESERROR(BUSCARV(C13;C$12:C12;1;FALSO));"nuevo";"repetido"))

Es importante observar que el rango que se está analizando es el rango C$12:C12 que se corresponde con los valores previos, y se ha de marcar con un dolar la primera referencia para dejarla fija y sin dólares la segunda referencia para dejarla libre.


. 

viernes, 9 de diciembre de 2011

Creación de una campana de Gauss con Excel

Descargar el fichero: campana.xlsm

Veamo cómo crear una campana de Gauss. Trataremos de ver gráficamente el Teorema Central del Límite. Partimos de una serie de números aleatorios que se distribuyen según una distribución uniforme entre 0 y 1. U[0,1]

Los aleatorios se obtienen con la función de Excel:

=ALEATORIO()

El teorema central del límite nos dice que necesitaríamos infinitos valores, pero lo haremos con únicamente 12 valores.

Calculamos la media de estos valores con la función:

=PROMEDIO(datos)

Esta media se encuentra en la celda C1, y cada vez que escribimos algo en una celda, o cada vez que pulsamos la tecla F9, se recalculan los valores, ya que se basan en números aleatorios.


Queremos que los valores de la celda C1 (el promedio) se copien secuencialmente en la columna E, y de forma automática. Para conseguir nuestro objetivo utilizaremos una macro.


La macro anota permite escribir los valores de los promedios en la columna E, poniendo tantos como necesitemos. En la imagen el bucle FOR...NEXT llega hasta 10.000 valores.


Histograma

Para crear el histograma de frecuencias definimos los intervalos. Elegimos 20 intervalos y para obtenerlos en la columna G hacemos una serie que comienza en 0 y finaliza en 1, con un intervalo de 0,05.

A su derecha dejamos preparada una zona donde mediante la función FRACUENCIA determinaremos cuantos datos, de entre las 10.000 medias generadas, se encuentran dentro de cada intervalo.



La función Frecuencia tiene la siguiente sintaxis:

=FRECUENCIA(datos;grupos)

  • donde los datos son lo valores de la columna E, que es donde se encuentran las 10.000 anotaciones de los promedios generados
  • donde grupos es el rango G1:G21 que es done se encuntran los intervalos que hemos definido

Es una función matricial que requiere tres pasos:

  1. Seleccionar con el ratón (o con el teclado) la zona donde la función dejará sus resultados. En este caso abarca más de una celda, concretamente es la zona amarilla
  2. Se escribe la función matricial propiamente dicha. En este caso, se escribe la función Frecuencia
  3. No se valida pulsando INTRO. Se han de pulsar simultáneamente las tres teclas siguientes: CONTROL+MAYÚSCULAS+INTRO
Para saber más sobre funciones matriciales consulte el siguiente post:


Si ponemos en horizontal los valores obtenidos con la función Frecuencia, y con un poco de imaginación se puede ver ya la campana de Gauss.


Realicemos el gráfico.


Media Móvil

Si pulsamos sobre el gráfico con el botón derecho del ratón, podemos elegir "Agregar línea de tendencia", y de todas ellas elegir la Media Móvil. Así obtendremos el siguiente gráfico.


Vídeo


martes, 18 de octubre de 2011

Facturación por meses

Descargar el fichero: facturacion_mensual.xlsx

Veamos cómo podemos totalizar por meses con varios métodos: SUMAR.SI, SUMAPRODUCTO y sobre todo con funciones matriciales. Destaca el quinto método que no necesita emplear la columna auxiliar 'Mes' (columna D).



Se ha creado un nombre de rango que es en realidad una fórmula. Se denomina 'miMES' y la fórmula es:

=MES(Fechas)

Este nombre de rango es el que nos permite no necesitar el uso de la columna D.

Observar la celda K18 que nos permite totalizar de una forma muy especial:

{=SUMA((miMES={1;2;3;4;5;6;7;8;9;10;11;12})*Ventas)}

Si quisiéramos totalizar únicamente las ventas de los meses 1 y 2 la fórmula a emplear sería:

{=SUMA((miMES={1;2})*Ventas)}


También merece especial mención la celda K20 de color verde:

{=MIN(SI(K6:K17>0;K6:K17;""))}

Con la fórmula matricial anterior hemos conseguido calcular la facturación del mes con menor facturación positiva.

Pulse la tecla de función F9 para observar cómo cambian los datos y los resultados.

domingo, 16 de octubre de 2011

Seleccionar datos con un desplegable

Puede descargar los siguientes archivos.


Utilizar un desplegable es una tarea cotidiana e intuitiva. Lo que pretendemos es que al elegir con el desplegable un año, la consecuencia sea que una tabla con datos se rellene automáticamente con datos de ese año.

Conseguiremos nuestro proposito con el uso de la función INDIRECTO de la que podemos ver unos cuantos Post publicados en este mismo Blog. Para verlos simplemente hemos de seguir este enlace:




En la tabla verde disponemos de los datos correspondientes a tres años. Deseamos que al elegir el año en el desplegable la tabla azul se alimente automáticamente con los datos correspondientes al año elegido.

Observar que la zona azul se ha obtenido con la función INDIRECTO y se ha introducido como función matricial. Esto se puede comprobar al ver las llaves {} que son el rasgo distintivo de las funciones matriciales.

Datos de partida

Los datos de partida son los que se encuentran en la tabla superior (rango B4:E9). Lo que hacemos es crear nombres de rango con los rótulos de columna:
  • Año2009
  • Año2010
  • Año2010
Para crearlos de forma masiva lo que hacemos en la versión de Excel 2007 es seleccionar el rango C4:E9 e ir al menú Fórmulas, y luego elegir Crear desde una selección. De esta forma llegaremos a esta ventana:


Marcamos únicamente donde pone 'Fila superior'.

Si tuviéramos Excel 2003, para llegar a esta ventana el recorrido es: Insertar, Nombre, Crear.

Aceptando esta ventana lo que hemos logrado es crear los tres rangos siguientes:

  • Año2009 =Hoja1!$C$5:$C$9
  • Año2010 =Hoja1!$D$5:$D$9
  • Año2011 =Hoja1!$E$5:$E$9

Tabla para el BUSCARV

Creamos la tabla amarilla para luego poder usar un BUSCARV que nos proporcione el año al elegir desde el desplegable.



Creamos el desplegable

Creamos el desplegable o ComboBox,o también llamado 'Cuadro combinado'.


Esto en Excel 2007 se consigue desde la ficha Programador, y luego en Insertar uno de los Controles de formulario denominado Cuadro combinado.


En Excel 2003 se consigue obteniendo la barra de Formularios y luego eligiendo Cuadro combinado.

Al pulsar con el botón izquierdo del ratón sobre el icono del Cuadro combinado conseguiremos que el cursor se convierta en una cruz finita, y en ese momento crearemos la diagonal del desplegable arrastrando con el ratón sobre la hoja.

Luego, pulsamos el desplegable con el botón derecho del ratón y elegimos 'Formato de control'.


Como rango de entrada ponemos G13:G15 que es donde están escritos los nombres de cabecera que previamente hemos creado.

Donde pone 'Vincular con la celda' ponemos la celda G11. Esto permitirá que al elegir en el desplegable la primera opción en la celda G11 aparezca un 1; si elegimos la segunda opción aparecerá un 2; y si elegimos la tercera opción del desplegable en la celda G11 aparecerá un 3.

BUSCARV

En la celda C11 escribimos la siguiente función:

=BUSCARV(G11;tabla;2;0)

Donde el rango tabla es: F13:G15.

Con ello conseguiremos que al cambiar el valor de la celda G11 según las elecciones que hagamos del desplegable, podamos poner en esta celda (C11) la cabecera de los datos que deseamos obtener.

Son tres posibles cabeceras que podemos obtener:

  • Año2009
  • Año2010
  • Año2010
INDIRECTO como función matricial

Finalmente hemos de emplear la función INDIRECTO. Para familiarizarnos con esta función avanzada de Excel conviene revisar algunos post donde se habla de ella o se utiliza. Para ello se puede seguir el enlace que se ha indicado al inicio de este artículo.

Como vamos a tratarla como una función matricial hemos de seguir los tres pasos típicos de toda función matricial. Para familiarizarnos con esto se aconseja ver el siguiente artículo:


Primero, señalamos el rango C12:C16, que es donde la función matricial dejará su resultado.

Segundo, escribimos la función matricial que empleamos en este caso, que es la siguiente:

=INDIRECTO(C11)

Tercero, para validar no pulsamos Enter, sino que hemos de pulsar tres teclas simultaneamente: CONTROL+MAYUCULAS+ENTER.

Resultado

Si todo ha ido bien hemos conseguido un desplegable donde al elegir el año la tabla de abajo toma los datos correspondientes a ese año de la tabla de arriba. Con ello, hemos conseguido disponer de un desplegable que permite traernos los datos que deseamos.


Esto con tablas de datos realmente grandes puede llegar a ser muy interesante.

Hoja2

Proponemos un segundo método que incluso puede ser mejor que el primero por ser más sencillo.

Consiste en utilizar como desplegable una celda con Validación de datos de tipo LISTA.



En el siguiente vídeo puede ver el proceso de creación por los dos métodos.

El 10%


Podemos crear fórmulas matriciales que hagan referencia a todo un rango o matriz. Veamos cómo se calcula el 10% del rango C12:C16.



Al variar los datos con el desplegable de la celda C11 nuestro 10% también varía.


Para saber más

Puede consultar el siguiente enlace.

viernes, 2 de septiembre de 2011

Último valor de la fila

Descargar el fichero: ultimo.xlsx

Puede llegar a se muy útil determinar cuál es el último valor de una fila o columna. Para lograrlo utilizaremos funciones matriciales. En esta ocasión veremos dos hojas en las que planteamos dos casos en los que se emplean estas fórmulas matriciales que calculan el último valor escrito en una fila.

Hoja1

Veamos cómo se calcula con una fórmula matricial el último valor de una fila.


La celda J16 es:

{=INDICE((B16:H16);;MAX(SI((B16:H16)<>"";COLUMNA(B16:H16)))-1}

Recuerde que las llaves {} que rodean la fórmula indican que se trata de una función matricial y el usuario no ha de escribirlas, ya que de ello se encarga Excel al validar la fórmula pulsando CONTROL+MAYUSCULAS+INTRO.


Puede ampliar información sobre las funciones matriciales en el siguiente enlace: Fórmulas Matriciales.

También puede consultar el penúltimo o anteúltimo valor de la fila.


Para ello en la celda K16 empleamos la fórmula matricial siguiente:

{=INDICE((B16:H16);K.ESIMO.MAYOR(((B16:H16)<>"")*(COLUMNA(B16:H16));2)-1)}

La función K.ESIMO.MAYOR y la función K.ESIMO.MENOR se utilizan mucho en este tipo de cálculos.

Hoja2


Veamos una aplicación práctica de las ideas recogidas en la Hoja1. Disponemos de las ventas mensuales durante los últimos años. Actualmente nos encontramos en el año 2011 y el último mes del que tenemos información es Julio. Esto se puede observar viendo la tabla de datos.


Con el objeto de poder comparar adecuadamente los datos acumulados de los meses que llevamos de 2011 con los de años anteriores, lo que deseamos es crear la columna Q en la que obtengamos el acumulado de las ventas de todos los años pero únicamente hasta el mes de julio, que es el último mes del que tenemos información en el año 2011.

Lo importante es que deseamos que esto se recalcule de forma automática y que cuando sea agosto el último mes del que tengamos información automáticamente sea éste el mes hasta el que se acumulen en la columna Q los valores de ventas de todos los años.

Para conseguir esto hemos tenido que dar una serie de pasos.

Paso 1

En el rango D4:O4 hemos creado la serie de números del 1 al 12. Para que no se vean hemos utilizado un truco que consiste en dar formato a esas celdas del tipo formato número, personalizado y en tipo indicar "". Esto lo que hace es evitar que el valor de esa celda se vea.



Paso 2

La columna C se encuentra oculta. Esta es una columna auxiliar necesaria. En ella lo que calculamos es el último valor escrito en la fila. Así en la celda C8 obtenemos el valor 7 ya que el último valor escrito en el rango D8:O8 es el del mes de julio. La fórmula matricial de la celda C8 es la siguiente.

{=MAX(SI((D8:O8)<>"";COLUMNA(D8:O8)))-3}

Paso 3

En la celda Q4 escribimos la siguiente fórmula matricial.

{=+MIN(SI((C6:C10)>0;(C6:C10)))}

Esta fórmula calcula el último mes escrito que en nuestro caso es el mes de julio. En la celda figura el valor 7, que se corresponde con julio. El número 7 no se ve ya que hemos utilizado en la celda un formato de número personalizado indicando en tipo "


Paso 4

En la celda Q5 deseamos que aparezca una indicación del mes hasta el que se acumula. En este caso vemos que pone "Hasta julio", esto se consigue con la siguiente fórmula.

=FECHA(2011;Q4;1)

Paso 5

En la celda Q6 tenemos la fórmula matricial siguiente.

{=SUMA((D6:O6)*(--(($D$4:$O$4)<=$Q$4)))}

De esta forma, conseguimos que, de forma automática, al ir escribiendo los datos de los sucesivos meses, los acumulados se adapten y muestren la cifra de ventas, justo hasta el mes último del que tenemos datos en el años actual.


Actualización (a 4 sep. 2011)

Para evitar el paso 1, evitando escribir en la fila 4 los números de 1 al 12, y luego ocultarlos, vamos a proponer un cambio en la fórmula de la celda Q6.

{=SUMA((D6:O6)*({1;2;3;4;5;6;7;8;9;10;11;12}<=$Q$4))}

lunes, 15 de agosto de 2011

Convertir en una BD (sin repetición)

Descargar el fichero: matricial_extrae.xlsx

En Excel podemos convertir una tabla de doble entrada en una base de datos. Los datos de la tabla de doble entrada tienen que ser sin repetición. En este caso se trata de países que no se pueden repetir.

En la Hoja1 del fichero matricial_extrae.xlsx estudiamos cómo extraer información de una tabla de doble entrada. Puede verse el siguiente post:



Hoja2

En esta ocasión trabajamos en la Hoja2 con la siguiente tabla de doble entrada.


Queremos obtener un listado donde figuren en columna todos los países y junto a cada uno de ellos la fecha y el empresa que le corresponde. El resultado será el siguiente.


La fecha la hemos calculado por un único método pero la empresa se ha calculado por 8 métodos diferentes.

Calcular la fecha es más sencillo al tratarse de un valor numérico. La fórmula matricial empleada en la celda C19 es la siguiente.

{=SUMA((tabla=B19)*Dias)}

Para saber más sobre fórmulas matriciales consulte el siguiente post.

Funciones matriciales en Excel

Los nombres de rango utilizados en la Hoja2 son estos.


Expliquemos la fórmula anterior. La expresión (tabla=B19) es una igualdad que Excel evalúa y nos dice si es verdadera o falsa. Al tratarse de una matriz tendremos una matriz de valores que pueden ser verdaderos o falsos. Como estamos igualando a B19 que es Angola, nos dará la siguiente matriz.


Todos los valores dan FALSO, salvo el primero que da VERDADERO. Esto es así porque Angola ocupa justo el primer lugar de la tabla.

En informática los verdaderos son unos y los faltos son ceros, por lo que en realidad lo que tenemos es la siguiente tabla, con la que podemos operar como si se trataran de números.


Si la tabla anterior se multiplica por el rango 'Dias' que es un vector columna de 10 elementos obtenemos lo siguiente.


El valor 39083 en formato fecha corresponde al día 1-enero-2007.

Ahora sólo falta sumar los valores anteriores, y mostrar el resultado con formato fecha. Esto es lo que se puede observar en la celda C19.


Gracias a que la fecha en realidad es un número hemos podido multiplicar y luego sumar. El problema viene cuando lo que buscamos no es un número sino texto. Es el caso de las Empresas, donde debemos buscar qué empresa corresponde a cada país. Así, por ejemplo, a Croacia le corresponderá la Emp2. Para averiguar esto el método anterior no es válido y hemos tenido que recurrir a otros métodos. Concretamente planteamos 8 método para conseguir nuestro objetivo.

Veamos la fórmulas para Angola, fila 19.

Método 1

{=BUSCARV(SUMA((tabla=B19)*NumEmp);TablaEmp;2)}

Utiliza la tabla auxiliar TablaEmp que está en el rango H12:I15.

Método 2

{="Emp"&SUMA((tabla=B19)*NumEmp)}

Utiliza las celdas auxiliares C4:F4 que se han nombrado con el nombre de rango NumEmp.


Método 3

{=INDICE(empresa;1;SUMA((tabla=B19)*NumEmp))}

Utiliza el rango auxiliar NumEmp.


Método 4

{=BUSCARH(SUMA((tabla=B19)*NumEmp);$C$4:$F$5;2;0)}

Utiliza el rango auxiliar NumEmp.


Método 5

{=INDICE(empresa;1;SUMA((tabla=B19)*{1;2;3;4}))}

La expresión {1;2;3;4} está relacionada con el número de columnas. En este caso son 4 columnas, pero si estuviéramos en un caso con un número mayor o menor de columnas tendríamos que adaptar la fórmula. Por ejemplo, para 5 columnas tendríamos que escribir  {1;2;3;4;5}.


Método 6

{=DESREF($B$5;0;COINCIDIR(1;SIGNO(CONTAR.SI(DESREF(tabla;;COLUMNA(tabla)-CELDA("columna";tabla);;1);B19));0))}


Método 7

{=INDICE(empresa;1;COINCIDIR(1;SIGNO(CONTAR.SI(DESREF(tabla;;COLUMNA(tabla)-CELDA("columna";tabla);;1);B19));0))}


Método 8

{=INDICE(empresa;1;(SUMA((tabla=B19)*(COLUMNA(tabla))))-COLUMNA(tabla)+1)}

Los método 6, 7 y 8 no requieren tablas auxiliares de datos.

Podríamos crear un método más, convirtiendo las celdas que contienen los nombres de las empresas (rango C5:F5) en un rango de valores numéricos. Numerando las empresas del 1 al 4, y para que en lugar de verse el número en esas celdas se vea tal y como se ve ahora: Emp1, Emp2, Emp3, Emp4, podríamos dar a esas celdas un formato personalizado poniendo esto: "Emp"Estandar


Lo que veríamos después de aplicar el formato sería lo mismo que teníamos antes.


Con la ventaja de que esas celdas ahora son verdaderos números y podemos emplear una fórmula similar a la que se empleo en el caso de las Fechas. Lo cual hace el cálculo más sencillo.


¿Y si se repiten?

Y ahora la pregunta que seguro que tienes en mente. Y que pasa cuando los datos de la tabla de doble entrada se repiten. En nuestro caso, ¿qué pasa cuando existen países repetidos?

La respuesta es que algunos de estos método dan error y otros en caso de tener dos Angolas nos dan la Empresa de uno de los valores o de otro de ellos. Dicho de otra forma no son válidos estos métodos.

Pero vayamos más allá, y pensemos que esta forma de presentar la información no es válida, ya que no tendría sentido tener un listado con todos los países sin repetición. Este informe no es válido ya que cuando le toque el turno a uno de los países que figura dos o más veces en la tabla de datos, ¿qué fecha y empresa ponemos?

En estos casos se tendría que ir a otro tipo de informe donde en el listado apareciera tantas veces el país como veces se repita, y por cada fila figuraría la fecha y empresa que corresponde a esa aparición.

miércoles, 15 de junio de 2011

Selección de Gráficos

Descargar el fichero: selectivo.xlsx


Podemos seleccionar diferentes gráficos con solo pulsar sobre un botón o marcar una opción. Vamos a ver un sistema que permite elegir unos u otros datos sin más que seleccionar una opción. Estos datos son los que alimentan el gráfico y por tanto conseguimos que el gráfico cambie simplemente eligiendo una opción al pulsar un botón.

Hoja 1

Supongamos que tenemos información en forma de tabla sobre dos plantas industriales, una en Barcelona y otra en Madrid.

  • La Tabla 1 (planta de Barcelona) está en el rango B4:F8
  • La Tabla 2 (planta de Madrid) está en el rango B10:F14

Debajo de estas tablas planteamos un sistema que nos permita elegir la planta que deseamos mostrar en el gráfico. Esto se hace estableciendo unas Opciones de formulario, y en este caso, concretamente, hemos elegido dos Botones de opción, uno para Barcelona y otro para Madrid.


Al elegir una u otra planta industrial queda en la celda C23 el número 1 o 2 según hubiéramos elegido la primera opción (Barcelona) o la segunda opción (Madrid).

Ahora creamos una tabla que servirá para alimentar los datos del gráfico. La tabla se encuentra en el rango H19:L23. Para vincular esta tabla con las tablas de Madrid o Barcelona según lo elegido por el usuario, utilizamos la siguiente formula para la celda H20 que luego copiamos al resto de la tabla.

=SI($C$23=1;"Barcelona";"Madrid")

Los rangos utilizados en la Hoja1 son:

  • Barcelona =Hoja1!$C$6:$F$8 
  • Madrid =Hoja1!$C$12:$F$14  

El interior de la tabla se calcula con fórmulas matriciales.

=SI($C$23=1;Barcelona;Madrid)

Incluso la tabla está formateada con Formato condicional para que tome los colores y formatos de la tabla de Barcelona o Madrid según la elección del usuario.


La tabla resultante y el gráfico asociado son los siguientes.



Hoja 2

En la Hoja2 el usuario elige el trimestre que desea representar en el gráfico. Para elegir el trimestre el usuario dispone de un Control de formulario denominado Barra de desplazamiento.


El trimestre elegido se recoge en la celda D16, y con ella se crea un vector (rango D19:D22) que indica el trimestre elegido.

En la tabla I19:K24 se crea una tabla vinculada a las dos tablas anteriores tomando los datos del trimestre elegido por el usuario.


Los rangos creados en la Hoja2 son los siguientes.

  • BCN =Hoja2!$C$6:$F$8
  • MAD =Hoja2!$C$12:$F$14
  • vector =Hoja2!$D$19:$D$22

Veamos como se calcula la Tabla que alimenta el gráfico.

  • El rango J20:J22 de color verde se consigue multiplicando el vector de los trimestres por el rango MAD. La fórmula matricial es: =MMULT(MAD;vector)
  • El rango K20:K22 de color amarillo se consigue multiplicando el vector de los trimestres por el rango BCN. La fórmula matricial es: =MMULT(BCN;vector)

La función MMULT es la que permite multiplicar matrices. Las matrices que se multiplican son MAD o BCN según se trate de la información de Madrid o Barcelona, por el vector de los trimestres. El orden de multiplicación es importante, ya que cambiadas de orden darían error.

Pruebe a cambiar los trimestres pulsando en el control de formulario denominado Barra de desplazamiento, y comprobará como cambia la tabla que se encuentra debajo del gráfico, que es la que alimenta el propio gráfico. La consecuencia de todo esto es que puede modificar el gráfico que se muestra sin más que pulsar un botón.

Para saber más

Puede consultar el siguiente enlace.

jueves, 2 de junio de 2011

Suma con errores

Descargar el fichero: suma_con_errores.xlsx


Es frecuente que tengamos que sumar unos datos entre los que hay una celda que tiene un error, o un #N/A (no aplicable). Al efectuar la suma de todos los datos el error se arrastra a la suma, obteniendo un valor también con error. Vamos a ver un método que evita que esos errores se transmitan a la suma, o al promedio, o a la función que estemos manejando.

Disponemos de unos datos sobre los habitantes de una serie de ciudades en el año 2010. Esta tabla se nombra con el nombre de rango 'datos'.


Deseamos crear una tabla donde indicando el nombre de la ciudad a su derecha se tome el número de habitantes de la tabla 'datos'. Si todas las ciudades que deseamos totalizar se encuentran en la tabla 'datos' no tendremos problema en obtener la población con la función BUSCARV y luego poder sumar los habitantes.


La función empleada en la celda C5 es:

=BUSCARV(B5;datos;2;0)


Si ahora hacemos otra tabla similar pero donde añadimos Sevilla que es una ciudad que no existe en la tabla 'datos' el resultado será #N/A que significa "No Aplicable", e indica que Sevilla no se encuentra en la tabla 'datos'. Observar que en la función BUSCARV se pidió búsqueda exacta.


Al no existir Sevilla y obtener #N/A el error se transmite al Total y él también  da #N/A por lo que no hemos podido sumar los habitantes de las tres ciudades de las que si disponemos de datos.

Para resolver este problema acudimos a la creación de una fórmula matricial. En la celda C23 calculamos el Total con la función SUMA:

=SUMA(SI(ESERROR(valores);"";valores))

En la celda C24 calculamos la media con la función PROMEDIO:

=PROMEDIO(SI(ESERROR(valores);"";valores))



Ambas expresiones son fórmulas matriciales. Observar que van entre llaves {}. Para validarlas no se ha de pulsar ENTER. Las fórmulas matriciales se validan pulsando simultáneamente estas tres teclas:

CONTROL + MAYÚSCULAS + ENTER

Práctica

En la Hoja2 dispone de un ejercicio propuesto.


Una empresa comercializa 9 tipos de productos prefabricados.
No se dispone del precio unitario del Prefabricado 5.
Deseamos calcular las unidades vendidas en total, salvo del prefabricado 5 ya que de éste no disponemos de datos para calcularlo adecuadamente.
También necesitamos determinar las unidades medias vendidas sin considerar las del Prefabricado 5