jueves, 28 de enero de 2021

Anexar rangos de celdas con funciones WEB

Un par de entradas atrás hablamos sobre las funciones Web de Excel, y en concreto sobre XMLFILTRO. Una función muy interesante sobre la que hoy daremos una nueva vuelta para conseguir anexar distintos rangos de celdas!!.
Partiremos de tres rangos, convertidos en tablas ('Tbl_2020','Tbl_2021' y 'Tbl_2022') para mayor facilidad
Anexar rangos de celdas con funciones WEB


El siguiente ejercicio se basa en el post previo (ver aquí) donde explicábamos como generar en HTML el código de una tabla. Ya que es posible crear una única tabla en código HTML a partir de distintos rangos...
Por ejemplo, en F2 insertamos la fórmula:
="<datos><celda>"&UNIRCADENAS("</celda><celda>";FALSO;Tbl_2020;Tbl_2021;Tbl_2022)&"</celda></datos>"
donde nos hemos inventado las etiquetas 'datos' y 'celda', ya que para nuestro ejercicio no es necesario un código real...
Además ni siquiera necesitamos separar filas de columnas, basta con crear una 'tabla' en HTML o XML de una sola columna... lo que hemos conseguido con la fórmula anterior.
El motivo de esto es que al aplciar en los siguientes pasos la función Web XMLFILTRO en todo caso se generará un vector de elementos!!.
Lo que es fácil de comprobar si en F5 escribimos:
=XMLFILTRO(F2;"//datos/celda")
Anexar rangos de celdas con funciones WEB

A partir de esta tabla en HTML o XML, en todo caso, generada con un patrón de etiquetas, podremos crear un rango de las filas y columnas necesarias, para nuestro ejemplo: 13 filas y 3 columnas.
Aprovechándonos de las nuevas fórmulas desbordadas, y en particular de SECUENCIA podremos escribir en H5 la fórmula anteriormente comentada:
=INDICE(XMLFILTRO(F2;"//datos/celda");SECUENCIA(13;3))
Donde INDICE recorre cada fila y columna de nuestra tabla XML creada con las etiquetas datos y celda, devolviendo cada dato de 'celda' y siendo reordenado por SECUENCIA en la posición adecuada!!.

Por supuesto nuevos registros en cualquiera de las tres tablas se anexarán adecuadamente en su posición... siempre y cuando dinamicemos el argumento 'num_filas' de la función SECUENCIA (primer argumento) que debe reflejar siempre el número total de filas de las tres tablas...
Por ejemplo con un sencillo:
FILAS(Tbl_2020)+FILAS(Tbl_2021)+FILAS(Tbl_2022)
Que dejaría nuestra fórmula en H5:
=INDICE(XMLFILTRO(F2;"//datos/celda");SECUENCIA(FILAS(Tbl_2020)+FILAS(Tbl_2021)+FILAS(Tbl_2022);3))
De forma similar para el número de columnas: COLUMNAS(Tbl_2020)
Si bien este caso es algo más delicado, ya que exige que las tres tablas tengan el mismo número de columnas y con igual estructura de campos!!.

No hay comentarios:

Publicar un comentario

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