Función BUSCARV en Excel con ruta relativa

Resuelto
Hasaran -  
 Hasaran -
Hola,

Me gustaría usar la función BUSCARV de Excel llamando a una matriz mediante una ruta relativa.
BUSCARV(variable;'C:\ruta\[archivo.xls]Hoja1'!$C$4:$N$499;10;FALSO)

He creado una macro que me da en la celda A1 la ubicación de mis hojas de cálculo (gracias a ActiveWorkbook.Path).

Luego concateno este resultado (C:\ruta) de esta manera:
CONCATENAR("'";A1;"\[archivo.xls]Hoja1'!$C$4:$N$499")
en la celda A2.

Pero cuando vuelvo a escribir mi función BUSCARV así:
BUSCARV(variable;A2;10;FALSO)
la celda devuelve #N/A

¿Cómo podría resolver este problema?
Configuración: Excel 2003

4 respuestas

  1. Le Pingou Mensajes publicados 12275 Fecha de registro   Estado Colaborador Última intervención   1 478
     
    Hola,
    Gracias por la información.

    En el sentido de que los dos cuadernos están en la misma carpeta, use su fórmula:
    BUSCARV (variable;'C:\chemin\[fichier.xls]Onglet1'!$C$4:$N$499;10;FALSO), que funcionará incluso si el libro fuente está cerrado.

    La otra solución con la función [INDIRECT] exige que el libro fuente también esté abierto. Si no está abierto en memoria, la función devuelve un valor de error #REF!.
    Para usar esta posibilidad:
    En el libro de destino colocar en formato texto en una celda:
    A1=C:\chemin\[fichier.xls]Onglet1
    A2 = C4:N499
    y la función INDIRECT a insertar en BUSCARV se convierte en: INDIRECT("'"& A1 &"'!"&A2)

    --

    Saludos.
    Jean-Pierre
    1
    1. Hasaran
       
      ¡Ya está! funciona.

      Lástima que INDIRECT no funcione con el archivo de base de datos cerrado ....

      Gracias por su ayuda
      0
  2. Raymond PENTIER Mensajes publicados 58219 Fecha de registro   Estado Colaborador Última intervención   17 485
     
    Quizás con la función INDIRECTA?
    --
    Está bien, la jubilación! Sobre todo en las Antillas... :-)
    ☻ Raymond ♂
    0
    1. Hasaran
       
      Estoy intentando usar la función INDIRECTA:
      BUSCARV(变量;INDIRECTO($A$3);10;FALSO)
      colocando en A3 la referencia de la celda donde tengo la ruta concatenada (A2).

      El mismo resultado .... (funciona fuera de la función BUSCARV)

      a menos que exista otra forma de usar la función INDIRECTA ....
      0
  3. Le Pingou Mensajes publicados 12275 Fecha de registro   Estado Colaborador Última intervención   1 478
     
    Hola,
    A la espera de tu respuesta, la celda [A2] contiene la ruta de tu matriz, así que pon directamente: INDIRECT($A$2) !

    ¿La matriz ('C:\ruta\[archivo.xls]Hoja1'!$C$4:$N-$499) sigue siendo la misma?

    ¿Tu fórmula: BUSCARV(variable;'C:\ruta\[archivo.xls]Hoja1'!$C$4:$N-$499;10,FALSO)
    ¿funciona? Sí o No?
    --

    Saludos.
    Jean-Pierre
    0
    1. Hasaran
       
      Hola, Al usar INDIRECT($A$2), la celda muestra #REF! tanto al integrar esta función en BUSCARV como de forma independiente. La matriz ('C:\ruta\[archivo.xls]Hoja1'!$C$4:$N$499) es siempre la misma. Mi fórmula: BUSCARV(variable;'C:\ruta\[archivo.xls]Hoja1'!$C$4:$N$499;10;FALSO) funciona bien.
      0
  4. Raymond PENTIER Mensajes publicados 58219 Fecha de registro   Estado Colaborador Última intervención   17 485
     
    Hola.

    Si entiendo bien todo, la matriz que contiene los datos no está en la misma carpeta (archivo) que la hoja donde se encuentra la fórmula de búsqueda. En ese caso, recordemos que es IMPRESCINDIBLE que ese primer archivo esté abierto para que la búsqueda se realice.

    No he entendido por qué escribes INDIRECT($A$3) cuando el contenido de A3 parece ser =A2. ¡Entonces bastaría con escribir INDIRECT(A2)!

    En cuanto al contenido de A2, no he entendido muy bien lo que quieres hacer: no veo el significado de 'A1\ en 'A1\[fichier.xls]onglet1'!$C$4:$N$499 Pero ya que dices que “funciona fuera de la función BUSCARV”, debo suponer que es correcto...

    Última observación: siempre es aconsejable dar un nombre a la matriz de datos; así si pones el nombre "Matr" al rango C4:N499 de la hoja onglet1 del archivo fichier.xls, la escritura de tu fórmula se simplifica a 'A1\[fichier.xls]Matr

    --
    Cuidado: la retirada! Sube a las Antillas... :-)

    ☻ Raymond ♂
    0
    1. Hasaran
       
      Hola. La matriz que contiene los datos está, en mi caso, en la misma carpeta pero no en el mismo archivo que la hoja donde se encuentra la fórmula de búsqueda. La búsqueda funciona bien cuando el archivo que contiene los datos está cerrado; la única diferencia que he observado es que Excel me pide actualizar el archivo cuando el que contiene los datos está cerrado. E escribir INDIRECT(A2) no funciona; obtengo el valor #REF! en la celda, tanto al usar INDIRECT dentro de BUSCARV como al colocar INDIRECT en una celda aparte. Mi objetivo principal es poder trabajar en la misma carpeta que los archivos de datos y de trabajo, sin importar dónde esté esa carpeta en el disco duro. Primero quiero separar las etapas: - No habiendo encontrado una fórmula ya hecha para usar una ruta relativa en la función BUSCARV, descubrí que la función ActiveWorkbook.Path utilizada en una macro me permite obtener la ruta absoluta de la carpeta en la que trabajo. Hice que esa ruta se muestre en la celda A1. - Esta celda A1 contiene entonces C:\ruta. - Necesito la ruta completa de la matriz para insertarla en la función BUSCARV. Como el archivo que contiene la matriz está en la misma carpeta que el archivo en el que uso BUSCARV, basta con añadir la parte de la ruta que, por su parte, siempre será la misma: \[archivo.xls]hoja1'!$C$4:$N$499. Así que la concateno con el contenido de la celda A1. - En este punto tengo en la celda A2 la ruta completa de mi matriz, sea cual sea mi carpeta de trabajo: 'C:\ruta\[archivo.xls]hoja1'!$C$4:$N$499 (también tuve que añadir una comilla simple al inicio). - Luego sustituyo la ruta completa de la matriz en la función BUSCARV por A2, que contiene esa ruta. - En cuanto a asignar un nombre a la matriz, me gustaría, si no es problemático para este primer objetivo, olvidarlo, ya que me genera complicaciones.
      0