lunes, 28 de marzo de 2022

Tablas con barras de desplazamiento

Hoy vamos a ver un truco que, desde mi punto de vista y basándome en algunas preguntas recurrentes que he visto en varios foros, podría ser útil a muchas personas ¿Cuál es? Pues pasemos a comentarlo.

Muchas personas tienen datos con varias filas y columnas y a veces consideran que es molesto ir desplazándose por toda la hoja y si bien hay algunas alternativas que ayudan a visualizar encabezados y/o datos que algunos/as requieren, estos no terminan de convencer a los/as usuarios/as y, además, no necesariamente saben y/o quieren usar macros (VBA) para intentar otras alternativas como por ejemplo el manejo de datos a través de formularios (Userform de VBA). Hablando de alternativas, he visto algunas que plantean colocar barras de desplazamiento verticales en “réplicas” de las tablas, lo que es muy útil para ir viendo de un modo rápido todas las filas de datos, pero no termina de ayudar si se tienen muchas columnas. Entonces, en esta oportunidad vamos también a implementar una barra de desplazamiento horizontal justamente para poder ver todas las columnas de ser estas muchas. En mi caso he creado una base de datos con 30 columnas (campos) y 100 filas (registros); las columnas tienen encabezados y he convertido todo el rango en Tabla. Es evidente que siendo tantas columnas pues no todas se ven en la pantalla. En mi caso he comenzado la tabla a partir de la fila 15 para que de ese modo usemos las primeras filas libres para el ejercicio que haremos hoy.

Ahora vamos a decidir cuántas filas y columnas queremos ver en eso que he llamado “réplica” de la tabla. En mi caso colocaré todo a partir de la columna C y la fila 1 y tendrá, a su vez, 10 filas y 6 columnas en total. Para comenzar vamos a insertar barras de desplazamiento, una horizontal y una vertical. Ojo, usaremos las de formulario, no las de los objetos ActiveX.

He colocado fondo rojo a aquellas celdas en donde replicaremos los encabezados y miren al lado izquierdo, de manera vertical, una de las barras de desplazamiento y abajo, de forma horizontal, la otra barra de desplazamiento.

Ahora, elegimos la barra vertical, le damo clic derecho y en el menú contextual elegimos “Formato de control…”.

En la caja de diálogo que se mostrará, en la pestaña “Propiedades” activemos “No mover, ni cambiar tamaño con las celdas”..

Ahora en la pestaña “Control” coloquemos en “Valor mínimo” un uno (1) y en “Valor máximo”, para mi caso, colocaré 91, en “Incremento” un uno (1) también y en “Cambio de página” pueden colocar un, por ejemplo, cinco (5). Por último, la parte más, importante diría yo, en “Vincular con la celda” elijan la de su predilección, y que esté fuera del área de la réplica y de la Tabla. Yo elegí la celda J2.

Repetimos lo mismo para la barra horizontal, pero evidentemente con otros valores.

Podríamos, si deseamos, tener las celdas vinculadas y/o sus datos ocultos, pero en mi caso voy a dejarlos a la vista, como verán cuando descarguen el ejemplo, para que se entienda mejor.

Ahora vamos a ver cómo obtener los encabezados. No olvidar que mi tabla se llama Tabla1 y que la barra de desplazamiento vertical, para las filas, está vinculada a la celda J2 y la barra de desplazamiento horizontal, para las columnas, está vinculada a la celda K2. Podríamos ocultar los valores o colocar en un lugar no visible, pero para el ejemplo dejaremos todo a la vista.

Para empezar, les comento que vamos a usar la función INDICE; asumo que la conocen y saben cómo se usa (Enlace). Entonces, en la celda C1, para mi caso vamos a colocar la siguiente fórmula:

=INDICE(Tabla1[#Encabezados];1;$K$2)

Insisto en que no voy a explicar cómo trabaja dicha función, pero sí aclararé que usar como matriz la Tabla1, nos permite por ejemplo colocar la referencia a la tabla y sus encabezados de modo fácil. El 1 es evidentemente relacionado a la fila de la matriz de los encabezados (son una sola fila, obviamente) y como recuerdan, la barra de columnas está relacionada a la celda K2, por lo que también la colocamos en esta fórmula. Si todo salió bien, tendremos esto en la celda respectiva:

Es decir, igual al primer encabezado de la Tabla1:

Luego, vamos a repetir lo mismo para todos los encabezados, pero sumándole algunos valores al tercer argumento de la fórmula, como verán a continuación:

Así, hasta el ultimo encabezado que sumará cinco (5). De ese modo tenemos todos los encabezados y el siguiente resultado cuando movemos la barra de desplazamiento horizontal.


Ahora sí la parte más interesante, llenar de datos el área en la que vamos a trabajar. Vamos a la primera celda, en mi caso la celda C2, y colocaremos la siguiente fórmula:

=INDICE(Tabla1;$J$2;K2)

En esta ocasión, a diferencia de la anterior, sí hacemos referencia a toda la Tabla1, no solo a los encabezados, luego referencia a J2, que es en donde nuestra barra vertical nos mostrará el número de fila que queremos de la matriz y por último a K2, que será el número de columna de esa misma matriz (Tabla1). Lo siguiente es colocar las fórmulas en las celdas de las filas que están debajo, pero, y ahí viene el “truco”, vamos sumándole uno (1) más a la fórmula en donde se hace referencia a la fila, justamente. Al final deberíamos tener esto:

Luego aplicaremos algo parecido a las columnas, pero sumaremos uno (1) a la referencia a las columnas:

Por último, llenamos todo con las fórmulas respectivas y tendríamos algo así:

Si queremos verlo en acción, pues así se verá:

Espero les haya gustado y, sobre todo, espero que les sea útil. Hasta la próxima.

Abraham Valencia
Lima, Perú

Descargue el ejemplo aquí

jueves, 10 de marzo de 2022

¿Hay protección infalible para que no vean nuestras macros (VBA)?

Hay protección infalible para que no vean nuestras macros (VBA)? ¿Vale la pena usar métodos como convertir en ejecutables nuestros archivos de Excel que tiene macros? ¿La gente se adaptaría a usar los archivos de Excel acompañados de librerías u otros ejecutables que ayuden a no ver las macros? ¿Qué opinan ustedes?

Un abrazo a todos y todas.

Abraham Valencia
Lima, Perú