Rangos en VBA: tabla doble entrada

27/01/2008 - 19:11 por Mnilo | Informe spam
Buenas tardes:

Estoy intentando crear una función que busque en tablas de doble entrada a
partir de indicarle
1 el nombre de la tabla
2 el nombre a buscar en la columna de la izquierda de dicha tabla
3 el nombre a buscar en la fila superior de dicha tabla

El principal problema es que puedo usar la función en una hoja y la tabla a
buscar puede estar en otra hoja, esto da algún problema con los rangos.

os adjunto el código que he desarrollado hasta el momento, el problema surge
cuando asigno "Set = FilaSupeior" y "Set ColumnaIzda", la asignación
resultante es "nothing" y el código no funciona, he probado algunas otras
cosas y nada funciona.

Agradezco por adelantado vuestra ayuda, adjunto debajo el código tal cual
está hasta ahora.


Function BuscarEnTabla(NombreTabla As String, DatoColumnaIzda As Variant,
DatoFilaSuperior As Variant) As Variant

Dim RangoTabla As Range
Dim FilaSuperior As Range
Dim ColumnaIzda As Range


Set RangoTabla =
worksheets(Range(NombreTabla).Parent.Name).Range(NombreTabla)
Set FilaSuperior = RangoTabla.Range(Cells(1, 1), Cells(1,
RangoTabla.Columns.Count))
Set ColumnaIzda = RangoTabla.Range(Cells(1, 1), Cells(RangoTabla.Rows.Count,
1))

BuscarEnTabla = WorksheetFunction.Index(RangoTabla, _
WorksheetFunction.Match(DatoFilaSuperior, _
FilaSuperior, _
0), _
WorksheetFunction.Match(DatoColumnaIzda, _
ColumnaIzda, _
0))

End Function

Preguntas similare

Leer las respuestas

#1 Ivan
28/01/2008 - 01:02 | Informe spam
hola,

no se exactamente lo que debe devolver la funcion, pero suponiendo que
sea el contenido de la celda interseccion de la columna y la fila que
contengan los datos buscados, mira a ver si te puede vbaler algo asi,
que a mi parece funcionarme (para buscar en otra hoja, se haria igual
que con cualquier otra funcion => bien escribiendo el nombre de la
hoja & ! & rango o seleccionando directamente el rango en la hoja
correspondiente)

pegalo en un modulo normal (en el editor de VBa => menu 'Insertar' =>
'Modulo' a secas o normal/standard etc, pero NO de clase => en la
ventana resultante debes pegar el codigo

'-
Public Function BuscarEnTabla2( _
RangoTabla As Range, _
DatoC As Variant, _
DatoF As Variant) As Variant
Dim f As Long, c As Integer
With RangoTabla
With .CurrentRegion
If Application.CountIf(.Columns(1), DatoC) > 0 Then _
f = .Columns(1).Find(DatoC, .Cells(1), xlValues, _
xlWhole).Row
If Application.CountIf(.Rows(1), DatoF) > 0 Then _
c = .Rows(1).Find(DatoF, .Cells(1), xlValues, _
xlWhole).Column
End With
If f > 0 And c > 0 Then BuscarEnTabla2 = _
.Parent.Cells(f, c).Value
End With
End Function
'-

nota: le he recortado el nombre a las variables por recortar espacio
en el foro

espero te ayude
Un saludo
Ivan
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida