martes, 6 de septiembre de 2022

LAMBDA y funciones macro 4.0

Sin duda las funciones macro 4.0 es una reminiscencia del pasado de Excel... incluso recientemente Microsoft decidió deshabilitarlas por defecto...
Pero siguen estando ahí presentes. Y aunque la inmensa mayoría de ellas solo tienen sentido dentro del contexto de las hojas de macros 4.0 de un libro de trabajo, algunas de ellas las podemos emplear en una hoja de cálculo estándar...
En general todas aquellas que retornan información y que habitualmente, en su nombre en inglés, contienen la palabra GET (es una generalidad, por supuesto).

Así pues, entre otras, funciones como:
GET.CELL = INDICAR.CELDA
GET.DOCUMENT = INDICAR.DOCUMENTO
GET.FORMULA = INDICAR.FORMULA
etc..
o respecto a información de tablas dinámicas:
GET.PIVOT.TABLE = INDICAR.TABLA.DINAMICA(type_num,pivot_table_name)
GET.PIVOT.FIELD = INDICAR.CAMPO.TABLA.DI(type_num, pivot_field_name, pivot_table_name)
GET.PIVOT.ITEM = INDICAR.ELEMENTO.TABLA.DI(type_num, pivot_item_name, pivot_field_name, pivot_table_name)

Sabemos que estas funciones las podemos emplear en nuestras hojas de cálculo, incluyéndolas dentro de Nombres definidos...
Un punto interesante, ya que coincide con el comportamiento o el requerimiento de las novedosas funciones LAMBDA.
Converge pasado y futuro... lo que nos abre una posibilidad de trabajo muy interesante.

Como ejemplo de lo potente de combinar funciones, veremos como facilita LAMBDA el uso de estas funciones macro 4.0.

Pongamos por caso que tenemos una tabla dinámica, llamada 'TD_UNO', de la cual me interesa recuperar cierta información. Por ejemplo:
- cuándo fue (hora, minuto y segundo) actualizada por última vez
- quién fue el usuario que hizo esa última actualización
- o cuál es la lista de campos disponibles para nuestra tabla dinámica
- o qué campos están a la vista (o cuáles ocultos/no mostrados) en la tabla dinámica
- o una lista de campos en el área de filas (o área de columnas o en el área de filtros)
- o cuál es el rango de celdas que ocupa la tabla dinámica, o el rango del área de filas/columnas/filtros
- y así hasta 22 puntos de información increible!!

Todo esto nos lo puede aportar la función:
INDICAR.TABLA.DINAMICA(type_num,pivot_table_name)
solo dos argumentos.
El primero - type_num - un valor entero de 1 a 22, cada uno muestra uno de los puntos de información comentados brevemente (es fácil de identificar qué significan la mayoría de ellos.
El segundo argumento - pivot_table_name - nos pide el nombre, entre comillas, de la tabla dinámica de la que queremos obtener información...

Si trabajamos la función bajo el paraguas de LAMBDA, podríamos definir la siguiente función:
=LAMBDA(tipo;INDICAR.TABLA.DINAMICA(tipo;"TD_UNO"))
para luego incluirla en el Administrador de nombres asignándole un nombre de función personalizado.
LAMBDA y funciones macro 4.0


Puedes ver el resultado en la imagen siguiente.... donde en la celda G3:G24 añadimos nuestra función Lamnda recién creada: =fxPT(F23)
LAMBDA y funciones macro 4.0


El significado de cada tipo sería pues:
INDICAR.TABLA.DINAMICA(type_num,pivot_table_name)		
1		último usuario que actualizá la TD
2		fecha última actualización
3		campos disponibles en la TD
4		número de campos disponibles
5		campos mostrados
6		campos no mostrados
7		campos en el área de filas
8		campos en el área de columnas
9		campos en el área de filtros
10		campos en el área de valores
11		rango sin incluir área de filtros
12		rango incluyendo el área de filtro
13		rango del área de filas
14		rango del área de columnas
15		celda que define la TD
16		rango del área de filtros
17		rango del área de valores
18		Verdadero si muestra Totales por fila
19		Verdadero si muestra Totales por columna
20		Verdadero si se guardan los datos con la TD
21		Verdadero si está habilitado el Autoajuste de columnas
22		fuente de la TD

Increible función!!...
Pues espera, tenemos también:
INDICAR.CAMPO.TABLA.DI(type_num, pivot_field_name, pivot_table_name)
con 17 posibilidades de información!!!.
Si la embebemos dentro de LAMBDA tendríamos (en un nombre definido):
=LAMBDA(tipo;campo;INDICAR.CAMPO.TABLA.DI(tipo;campo;"TD_UNO"))
donde deberemos informa del tipo (entero entre 1- 17, y un campo de nuestra tabla dinámica 'TD_UNO'.

A modo de ejemplo...
LAMBDA y funciones macro 4.0

Sin pretensiones de aburrir con listados interminables:
INDICAR.CAMPO.TABLA.DI(type_num, pivot_field_name, pivot_table_name)		
1		todos los elementos del campo
2		los elementos visibles del campo
3		los elementos no visibles del campo
4		área de ubicación del campo (0 = oculto / 1 = filas / 2 = Cols / 3 = filtros / 4 = valores)
5		….


Y de forma similar tendríamos:
INDICAR.ELEMENTO.TABLA.DI(type_num, pivot_item_name, pivot_field_name, pivot_table_name)
con otras 9 posibilidades.
1-posición del elemento dentro del campo
2-celda donde se ubica
3-rango donde se despliegan los valores de ese elemento
...

Quizá no tan útil como las anteriores, pero interesante conocer de su existencia.

Creo que es importante aprovecharse de lo mejor de ambos mundos (pasado y presente-futuro), y sin duda este tipo de funciones macro 4.0 ofrecen unas opciones inimaginables para la mayoría!!.

Y recuerda que solo he mostrado algunas de las funciones disponibles :OOO

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.