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.
Pasar rango como argumento a una función personalizada.
Pasar rango como argumento a una función personalizada.
OpenOffice 4.1.1
Re: Pasar rango como argumento a una función personalizada.
Esta función
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.
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
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.
Re: Pasar rango como argumento a una función personalizada.
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
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