lunes, agosto 17, 2015

Copiar y pegar formatos de tabla dinámica

En ciertas ocasiones queremos evitar que el usuario pueda ver todos los datos que alimentan una tabla dinámica. Dado que Excel no tiene un método para "desconectar" la tabla de la base de datos, la forma de hacerlo es con Copiar-Pegar Valores.

Pero este método tiene un inconveniente: Excel sólo copia los datos sin copiar los formatos que hayamos establecido en el reporte.

Por ejemplo, si copiamos con Pegar-Valores-Formato y Origen este informe dinámico al que hemos aplicado uno de los estilos


ek resultado no será el esperado; sólo el formato de los números aparece y ancho de las columnas son copiados; el resto de los formato desaparece.


Sin embargo podemos hacerlo usando este truco (tomado de este post de John Walkenbach)

Empezamos por seleccionar el rango de la tabla (o el rango de las columnas que ocupa), aplicamos Copiar y seleccionamos la primer celda del rango al cual queremos copiar la tabla.

Luego en la cinta Vamos a Inicio y abrimos el Portapapeles usando la flecha que aparece en el angulo inferior derecho

Hacemos un clic en el elemento que deseamos copiar y obtenemos este resultado

Coo podemos ver todos los formatos han sido copiados con la única excepción del ancho de las columnas.

miércoles, agosto 12, 2015

La función CELDA de Excel

En un post anterior sobre funciones Excel raramente usadas tendría que haber mencionado a la función CELDA(). Por ejemplo, a lo largo y a lo ancho de los 670 posts de esta blog, hay solamente dos menciones a esta función.

Tal como lo insinúa su nombre, esta función da como resultado información sobre una celda y su entorno. La función CELDA() acepta dos argumentos, el tipo de información, que es obligatorio y la celda de referencia, que es opcional.


El uso más obvio de esta función es en fórmulas donde el resultado depende de cierta característica del contenido de la celda o del entorno donde se halla.

Esta función tiene dos características importantes:

  1. es volátil, es decir que es recalculada con cualquier cambio en la hoja. Por eso se suele recomendar como buena práctica evitar, en la medida de lo posible el uso de estas funciones. 
  2. Si se omite la referencia a una celda la información especificada en el argumento tipo_de_info el resultado muestra la información de la última celda cambiada

Veamos algunos usos posibles.

Determinar si la celda contiene una fecha.
Excel no tiene una función nativa para determinar si el valor de una celda es una fecha (existe la función ESNUMERO pero no la función ESFECHA). Podemos usar la opción "Formato" para evaluar si el contenido es una fecha en lugar de usar la función IsDate de Vba (lo que implica crear una UDF).

Sucede que si la celda contiene una fecha la función CELDA con la opción Formato da como resultado "Dx", donde "x" es un número que identifica el tipo de formato


En este ejemplo, la fórmula =IZQUIERDA(CELDA("formato",B5),1)="D" nos permite determinar que la celda B5 contiene una fecha



SUBTOTALES con columnas ocultas 
Podemos hacerlo usando la opción "ancho" que da el ancho de la columna de referencia como número entero (SUBTOTALES realiza cálculos sin tomar en cuenta filas ocultas, pero no funciona con columnas ocultas). 
Si la columna esta oculta su ancho es 0, dato que podemor usar en conjunto con SUMAPRODUCTO tal como muestra Ismael Romero en esta nota de su blog Excelforo


El rango C1:H1 contiene la fórmula =CELDA("ancho",C4)<>0; la celda I4 contiene la fórmula =SUMAPRODUCTO(C1:H1*C4:H4).
Al multiplicar las matriz C1:H1 por la matriz C4:H4, SUMAPRODUCTO convierte los valores VERDADERO en 1 y los FALSO en 0.
Hay que tomar en cuenta que ocultar o mostrar filas no dispara el mecanismo de cálculo de Excel y por lo tanto hay que apretar F9 para actualizar el resultado de la fórmula.

Extaer el nombre de la hoja
Lo hacemos usando la opción "nombrearchivo" que da la  ruta de acceso completa de la celda referencia, en forma de texto.  
Supongamos que tenemos un cuaderno con una hoja por mes; si el nombre de la hoja es "agosto", esta fórmula dará como resultado "agosto"

=EXTRAE(CELDA("nombrearchivo",A1),ENCONTRAR("]",CELDA("nombrearchivo",A1))+1,256)

En esta fórmula es obligatorio usar la referencia a una celda de la hoja ya que de lo contrario elresultado será el nombre de la hoja donde se produjo el último cambio.

lunes, agosto 10, 2015

Ordenar valores del filtro de informe en tablas dinámicas

Las tablas dinámicas presentan cuatro áreas a las cuales podemos arrastrar los campos de la base de datos que la alimenta: etiquetas de filas, etiquetas de columna, valores y filtro de informe

Filtro de informe

Por defecto, los valores de las áreas de etiquetas, columnas y filtro del informe están ordenadas alfabéticamente, de A a Z, y el orden de los valores depende del orden del área de las filas.
Para cambiar el orden por defecto de las eetiquetas de fila y de columna podemos usar el menú de edición de estas áreas


El filtro de informe no cuenta con un menú de edición y por lo tanto no tenemos una forma directa de cambiar el orden de los valores (que por defecto es de A a Z). Pero podemos hacerlo con un pequeño truco.
En nuestro ejemplo tenemos un único campo, País, en el área de filtro de informe

filtro de informe

y como puede apreciarse está ordenado de A a Z. Para cambiar este orden reubicamos el campo del filtro de informe en el área de filas

Ahora podemos, por ejemplo, elegir "Ordenar de Z a A", apretar Aceptar y luego volver a ubicar el campo en el área de filtro de informe

con lo cual hemos invertido el orden por defecto del campo.

Ahora supongamos que queremos que los valores del filtro de informe aparezcan ordenados de mayor a menor según el total de ventas de cada país. Para lograrlo empezamos por quitar temporariamente el campo Ciudad y ubicar el campo País en el área de las filas. Abrimos el menú de edicion del campo y en "Más opciones de ordenación" elegimos "Descendente..." y "Por Ventas"

Pero esto no es suficiente. Ahora tenemos que apretar el botón "Más opciones" (en el ángulo inferior izquierdo del formulario, en la imagen está parcialmente oculto) y quitar la marca de la opción "Ordenar automáticamente cada vez que se actualice el informe)

Apretamos Aceptar para que el cambio cobre efecto