Variable para matriz en VB

Hola, la pregunta es sobre VB.
Tengo una celda en una hoja de Excel donde hay la dirección de una matriz ( por ejemplo: Hoja2!B10:C16 )
En una macro capturo el valor de esta celda dentro de una variable, que creo que lo puedo hacer así: ActiveCell = dirección
Ahora necesito hacer un BuscarV ( en VB creo que seria vlookup ) con esta matriz, que siempre es distinta, usando la variable.
¿Tenéis idea como puedo hacerlo?
Muchas gracias de antemano.
P.D: he encontrado una pregunta/respuesta muy parecida, pero la variable se usa para el primer argumento de la función BuscarV, no para la mátriz
http://www.todoexpertos.com/categorias/tecnologia-e-internet/software-y-aplicaciones/microsoft-excel/respuestas/452270/consulta-de-visual-basic-excel

1 respuesta

Respuesta
1
Creo que es más fácil si tienes en una celda el nombre de la hoja y en otra el rango, lo puedes extraer incluso de la que tienes actualmente. De esta forma si tienes por ejemplo en la hoja activa en la celda D1 = Hoja2 y en la celda D2 = B10:C10 entonces podrías hacer algo como esto:
Dim r, s As String
Dim r1 As Range
s = Worksheets("Sheet1").Range("D1")
r = Worksheets("Sheet1").Range("D2")
Set r1 = Worksheets(s).Range(r)
m = Application.WorksheetFunction.VLookup(dato, r1, 3, False)
Hola Tapopz,
Muchas gracias por tu solución, me ha sido de gran ayuda. Me he deado cuenta, que tengo que trabajar con hojas que están en otros archivos y no consigo añadir la instrucción que me hace falta... lo que yo he creado, que no funciona, es lo siguiente:
Dim r, s, t As String
Dim r1 As Range
s = Worksheets("Sheet1").Range("D1")
r = Worksheets("Sheet1").Range("D2")

t = Worksheets("Sheet1").Range("D3")

¿Qué iría en la instrucción File ( que me la he inventado ) para que funiconara?
Muchas gracias!
Set r1 = File(t).Worksheets(s).Range(r)
m = Application.WorksheetFunction.VLookup(dato, r1, 3, False)
En ese caso el dato del libro y hoja donde se encuentra el rango debe estar en el formato:
f = "[Archivo.xls]HojaX!"
Quedaría entonces:
m = Application.WorksheetFunction.VLookup(dato, f & r1, 3, False)
Hola Tavopz,
Lo siento pero ahora no te he seguido,
Los datos que tengo:
B2=[prova2.xls]Hoja2! (archivo donde tengo el rango)
B3=Hoja2 (hoja donde tengo el rango)
B4=$A$2:$B$5 (rango)
B5=audi (dato)
La macro:
Dim archivo, hoja, rango, dato As String
Dim r1 As Range
archivo = Worksheets("Hoja1").Range("B2")
hoja = Worksheets("Hoja1").Range("B3")
rango = Worksheets("Hoja1").Range("B4")
dato = Worksheets("Hoja1").Range("B5")
Set r1 = Worksheets(hoja).Range(rango)
m = Application.WorksheetFunction.VLookup(dato, archivo & r1, 2, False)
Cells(6, 2) = m
Con esto, se queda atascado en m = Application... Por no coincidir los tipos
¿Tienes idea de por que pasa?
Muchas gracias!
Tienes razón, estuve investigando al respecto y encontré que no puedes hacer el vlookup si el archivo donde está el rango de búsqueda no se encuentra abierto (es decir, debes abrir el archivo antes de buscar en él).
Dado esto, no sé si esta sea la mejor alternativa, puedes usar algo como esto:
With Workbooks("Prova.xls").Sheets(2)
   m = Application.WorksheetFunction.VLookup( dato, .Range(B4), 2, False) 
End With

Espero que esto funcione. Si no, entonces te recomendaría que en lugar de hacer esto desde VBA, hagas la fórmula en una celda y desde el código VBA sólo tomes el valor del resultado de dicha celda. Sería mucho más fácil.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas