lunes, octubre 27, 2014

Comentarios en tablas dinámicas.

Con un pie en el avión rumbo a Italia (viaje de trabajo y placer, lamentablemente no en las proporciones deseadas) recibo un llamado de un amigo consultándome sobre comentarios en tablas dinámicas.

- ¿Cómo hago para poner poner un comentario en una tabla dinámica?
- ¿Dónde en la tabla dinámica?
- ¿Cómo dónde en la tabla? ¡En una celda de la tabla! ¿Dónde va a ser      sino?
- Bien, sucede que las tablas dinámicas no tienen celdas, eeeehh, tienen   pero no exactamente, es decir, eeehh, bueno...
- ¿Te podés explicar por favor?!!

Me explico. Por lo general usamos el menú contextual de para poner un comentario en una celda

Pero si intentamos hacerlo en una celda que es parte de una tabla dinámica, la opción "Insertar comentario" no aparece en el menú contextual

Esto no es casual ni tampoco un error. El contenido de las celdas que ocupa una tabla dinámica cambian (obviamente en forma dinámica) con los cambios en los datos de la base de datos que la alimenta o cuando cambiamos el enfoque de la tabla. Pero los comentarios queda ligados a la celda y no dependen del valor que le asigne a esa celda la tabla dinámica.

A pesar de esto podemos introducir un comentario en la celda usando el menú de la cinta Revisar-Comentarios-Nuevo Comentario

Supongamos que hemos puesto un comentario en la celda C8 del ejemplo explicando por qué las ventas de Brasil han crecido en un 50%


Sin embargo cuando apuntamos a la celda no podremos ver el comentario; en su lugar aparecerá la información contextual relacionada al valor de la tabla que ocupa la celda


Para que aparezca el comentario tenemos que modificar la propiedad "Mostrar información contextual..." en el menú de "Opciones de tabla dinámica-Mostrar"


Lamentablemente aquí no terminan nuestros penares. 
Ahora quitemos a Brasil del informe usando el filtro del campo


El resultado será que ahora Canadá ocupa la celda C8, pero el comentario sobre Brasil sigue apareciendo en la celda


Conclusión: no usar comentarios en celdas ocupadas por valores de una tabla dinámica; y si queremos usarlos, convertir la tabla dinámica en una tabla estática (copiar-pegar valores).

viernes, octubre 17, 2014

Lista desplegable con contenido condicional - versión con Vba

Supongamos este escenario:

tenemos una lista que asocia nombres con valores

donde los nombres se repiten.

Queremos crear una lista desplegable que muestre los valores asociados al nombre que eliljamos en la celda G2 de este ejemplo


Vamos a mostrar como está construido este modelo.

Comenzamos por mostrar la columna A que están oculta. Esta columna contiene un rango dinámico donde ponemos los valores asociados al nombre que aparece en la celda G2.


El rango D1:E14 que contiene los nombres y sus valores está definido como Tabla.
La columna A contiene los valores asociados al nombre introducido en la celda G2.
Para poner estos valores usamos un evento de tipo Change

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Address = "$G$2" Then
        Range("tblNombreValor[#All]").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("G1:G2"), CopyToRange:=Range("A1"), Unique:=False
    End If
 
End Sub


El código usa la funcionalidad Filtro Avanzado (Datos - Ordenar y Filtrar - Avanzadas) que nos permite filtrar una tabla y copiar los resultados a otro rango.

Definimos un nombre que se refiere a este rango dinámicamente con esta fórmula

=Hoja1!$A$2:INDICE(Hoja1!$A:$A,CONTARA(Hoja1!$A:$A))


Ahora definimos una validación de datos en la celda H2 con la opción Lista y el nombre definido ListValores en la casilla Origen


Con esto concluimos la construcción del modelo. El archivo del ejemplo se puede descargar aquí.

En cuanto al formato condicional para señalar las filas del nombre introducido en G2, usamos la opción Formula con esta definición



domingo, septiembre 28, 2014

El extraño caso de los guiones distintos

En el pasado hemos visto y analizado los extraños casos del signo + en Excel (que amplié en esta nota), del espacio inamovible (ASCII160) y del cálculo manual persistente.
Hoy voy a agregar un nuevo capítulo a la serie: el extraño caso de los guiones distintos

Veamos esta situación


En la celda B2 hemos tipeado el texto "Sucursal 1 - Norte"; en la celda C2 hemos copiado copiado el mismo texto escrito previamente en Word; la comparación de ambos textos, que suponemos idénticos, en la celda D2 da "FALSO".
El primer sospechoso es la presencia de espacios lo que podemos comprobar usando la función LARGO

Sin embargo la comparación en la celda D2 nos muestra que ambos textos tienen el mismo largo. Si bien los lectores más atentos habrán advertido la diferencia entre el guión en la celda B2 y el de la celda C2, esto no es siempre evidente; en particular si la hoja contiene grandes cantidades de datos.

Para encontrar el problema vamos a "destripar" los textos en sus componentes y compararlos uno por uno. Para hacerlo usaremos la función EXTRAE

En la celda Be ponemos la fórmula =EXTRAE($B$2,FILA()-3,1) y la copiamos hacia abajo hasta obtener todos los caracteres del texto; hacemos lo mismo en la celda C4 pero refiriéndonos al texto en la celda C2.
En la columna D comparamos entre la la columna B y la C. Inmediatamente vemos que el problema está en la fila 15, los guiones son distintos.

Cuando usamos el guión Word activa la autocorrección y lo convierte en en el guión un tanto distinto


Esta cambio pasa inadvertido (el menú para deshacer el cambio sólo aparece si apuntamos con el mouse al guión).
Esto no pasaría de ser una anécdota si no fuera porqué el mismo problema suele presentarse al importar textos de páginas WEB y de otras fuentes.

El remedio para esta situación es reemplazar el guión "largo" (em dash) por el guión "corto" (el guión "corto" es en realidad el signo menos; el guión largo se lo conoce como "em dash").
El reemplazo lo podemos hacer usando Buscar y Reemplazar (Ctrl L). Pero el problema es que el "guión largo" no está asociado a ninguna tecla en el teclado. Para poder "teclear" el guión largo usaremos la técnica conocida como Códigos Alt (Alt Codes). Sin deternos en la historia, la técnica consiste en mantener apretada la tecla Alt y pulsar el código del caracter en el teclado númerico (situado a la parte derecha del teclado). En nuestro caso el código del "em dash" es 0150