jueves, 20 de octubre de 2022

VBA: Jagged Arrays o Array de Arrays

Como continuación del artículo anterior, donde mencionaba el uso de Arrays de arrays (jagged arrays-array escalonada o array irregular), pondré hoy un ejemplo del uso de la técnica, que nos permitirá replicar la función M de Power Query: Table.SelectColumns, o la lnueva función de Excel: ELEGIRCOLS

El desarrollo de nuestra función UDF nos llevará a obtener, en un solo rango, juntas, los campos elegidos... empleando el método de construir una Array de arrays (de columnas o campos de una tabla).

Veamos el código de nuestra UDF insertado en un módulo estándar...
Function fxSelectColumns(ByRef arrCampos() As Variant, rngDatos As Range)
On Error GoTo trato_errores

'generamos una array de arrays (cada campo será una array)
10 Dim arrJagged() As Variant
20 x = 0
30 For a = LBound(arrCampos) To UBound(arrCampos)
40    ReDim Preserve arrJagged(x) As Variant
50    col = Application.Match(arrCampos(a, 1), rngDatos.Offset(-1, 0).Resize(1, rngDatos.Columns.Count), 0)
    ''' simplificamos y reducimos dimensiones
60    Dim txt As String, arrTmp As Variant
70    txt = Join(Application.Transpose(rngDatos.Columns(col)), "|")
80    arrTmp = Split(txt, "|")
    
    '''
90    arrJagged(x) = arrTmp       'rngDatos.Columns(col)
    
100    x = x + 1
110 Next a

120 fxSelectColumns = Application.Transpose(arrJagged)

Exit Function
trato_errores:

	Debug.Print Err.Description & "_ línea" & Erl()

End Function

para depurar errores que pudieran aparecer, en cuanto a las dimensiones de las arrays y/o rangos, he numerado las líneas del código, y añadido un control de errores con la función de VBA: Erl

He empleado las mismas técnicas descritas en el post anterior, donde básicamente se identifican y extraen las columnas/campos indicados en el primer argumento de nuestra UDF.
A partir del segundo argumento, será el rango de celdas o Tabla, recuperamos el encabezado para localizar las posiciones de las columnas, y por extensión, los valores asociados a cada campo...
Finalmente devolvemos a la hoja de cálculo la matriz resultante...
VBA: Jagged Arrays o Array de Arrays

No hay comentarios:

Publicar un comentario

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