Pasar rango como argumento a una función personalizada.

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Chorcho
Mensajes: 8
Registrado: Vie Mar 24, 2023 8:38 am

Pasar rango como argumento a una función personalizada.

Mensaje por Chorcho »

Quiero emular el funcionamiento de BUSCARV (VLOOKUP) con una función personalizada BuscarVPersonalizado

Antes de que nadie conteste que eso ya lo hace BUSCARV. Necesito hacerlo para entender el porqué no admite el parámetro rango como argumento, y además necesito hacerlo para implementarlo en un código más extenso y complejo.

Si llamo a la función así (con rango entrecomillado):
=BUSCARVPERSONALIZADO(A47;"A2:B43";2;0)

Function BuscarVPersonalizado(valorBuscar, rangoBuscar, columnaResultado,ordenado)

me da error con variable de objeto no establecida, pero sí que me pasa A2:B43

Si llamo a la función así (sin comillas):
=BUSCARVPERSONALIZADO(A47;A2:B43;2;0)

me da el error de la variable no establecida en rangoBuscar, y además lo pasa como vacío.

Leí varios hilos y documentación, y no doy con la solución.
OpenOffice 4.1.1
FJCC-ES
Mensajes: 895
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Pasar rango como argumento a una función personalizada.

Mensaje por FJCC-ES »

Esta función

Código: Seleccionar todo

Function LeerMatriz(rangoBuscar, fila, columna) 
If IsArray(rangoBuscar) Then
  LeerMatriz = rangoBuscar(fila,columna)
Else
  CellRange = ThisComponent.CurrentController.ActiveSheet.getCellrangeByName(rangoBuscar)
  LeerMatriz = CellRange.getDataArray()(fila - 1)(columna -1)
End If
End Function
devuelve el valor de una celda en un rango de celdas.

Si escribo LeerMatriz(A2:B42; 1,2), el argumento rangoBuscar es una matriz de valores, la función IsArray(rangoBuscar) devuelve VERDADERO y LeerMatriz tiene el valor rangoBuscar(1, 2). Note que la primera fila y columna de rangoBuscar tienen el indice 1.

Si escribo LeerMatriz("A2:B42"; 1,2), rangoBuscar es el texto "A2:B42". IsArray(rangoBuscar) devuelve FALSO. LeerMatriz usa getCellrangeByName(rangoBuscar) y getDataArray() para obtener la matriz de valores. En la matriz que devuelve getDataArray(), la primera fila y columna tienen el indice 0.
Chorcho
Mensajes: 8
Registrado: Vie Mar 24, 2023 8:38 am

Re: Pasar rango como argumento a una función personalizada.

Mensaje por Chorcho »

Hola FJCC-ES:

Funciona perfecto.

Lo único que tuve que corregir es a la hora de escribir la fórmula, separar los parámetros con punto y coma (;), en vez de con coma.
LeerMatriz("A2:B42"; 1; 2)

Muchas gracias. Me ha sido de gran ayuda.

Se puede cerrar el hilo
OpenOffice 4.1.1
Responder