Inicio > Microsoft Excel > tavopz > variable para matriz en VB

variable para matriz en VB

Experto:
Usuario:
Fecha: 25/07/2008
Valoración: (5,00 sobre 5) Categoría: Microsoft Excel
15/07/2008
pupinet, usuario preguntando en Microsoft Excel
Usuario
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 = direccion
Ahora necesito hacer un BuscarV ( en VB creo que seria vlookup ) con esta matriz, que siempre es distinta, usando la variable.
Teneis 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
15/07/2008
pupinet, experto respondiendo en Microsoft Excel
Experto
Hola,
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)

Espero que te sea de utilidad.
 
Saludos, Tavopz
Visita: www.colombia2011.org
16/07/2008
pupinet, usuario preguntando en Microsoft Excel
Usuario
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 estan 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")

 
Que iria 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)

 
17/07/2008
pupinet, experto respondiendo en Microsoft Excel
Experto
Hola,
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)

Saludos, Tavopz
17/07/2008
pupinet, usuario preguntando en Microsoft Excel
Usuario
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 què pasa?
Muchas gracias!
21/07/2008
pupinet, experto respondiendo en Microsoft Excel
Experto
Hola,
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.
 
Saludos, Tavopz
25/07/2008
pupinet, usuario preguntando en Microsoft Excel
Usuario
Muchissimas gracias por tu ayuda. Fantástico!
Enlaces patrocinados