Función de búsqueda por elementos fila y columna

12/08/2008 - 15:40 por javivi | Informe spam
Muy Buenas,

Como jugar a hundir la flota. Me explico: tengo montada una función
que busca el elemento fila y elemento columna de una tabla que nombro
en excel y me devuelve el cruce entre ambas:


rojo verde amarillo
dia1
dia2 43
dia3

Poniendo =B(nombre_rango; "dia2";"verde") devuelve 43.

Esto lo hago con la función de más abajo, pero quisiera saber si ya
existe alguna construida en excel que haga lo mismo de forma tan
sencilla como la función que os muestro (rango, elemento_fila,
elemento_col), sin que tenga que utilizar una combinación de funciones
concidir, indirecto, etc que complican la función y al final tengo un
churro de función ilegible.

La cuestión es que esta función la utilizo bastante en un libro y
excel se cansa de pasar todos los datos por la función "B" y aparecen
refs.cuando se queda sin memoria. Por eso quería saber si conocéis de
alguna función ya diseñada en excel u otra que mejore la que os
presento.

Gracias por adelantado,

Javi


Public Function B(hoja As Range, ElementoFila As Variant, ElementoCol
As Variant) As Variant

Dim nfila As Integer
Dim ncol As Integer
'Dim BPrevio As Double

nfila = Application.WorksheetFunction.Match(ElementoFila,
hoja.Columns("A:A"), 0)
ncol = Application.WorksheetFunction.Match(ElementoCol,
hoja.Rows("1:1"), 0)

B = Application.WorksheetFunction.Index(hoja, nfila, ncol, 1)
If (Application.WorksheetFunction.IsNumber(B) = False Or
Application.WorksheetFunction.IsError(B) = True) Then
B = "ND"
Else
B = Application.WorksheetFunction.Index(hoja, nfila, ncol, 1)
End If

End Function
 

Leer las respuestas

#1 Héctor Miguel
12/08/2008 - 23:52 | Informe spam
hola, javier !

... tengo montada una funcion que busca el elemento fila y elemento columna
de una tabla que nombro en excel y me devuelve el cruce entre ambas:
rojo verde amarillo
dia1
dia2 43
dia3

Poniendo =B(nombre_rango; "dia2";"verde") devuelve 43.



estas usando vba para hacer llamados a funciones integradas de excel (o sea)
puedes usar las mismas funciones "directamente" en tus celdas (p.e.)
si suponemos que los datos que expones estuvieran en el rango [A1:D4]

=indice(a1:d4;coincidir("dia2";a1:a4;0),coincidir("verde";a1:d1;0))

esta formula no considero que se "va" como un "churro ilegible" (sin ambargo)...
agregar condicionantes (o atrapar errores) implican anidar otro tipo de funciones asi que...

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ el resto __
Esto lo hago con la función de más abajo, pero quisiera saber si ya existe alguna construida en excel
que haga lo mismo de forma tan sencilla como la función que os muestro (rango, elemento_fila, elemento_col)
sin que tenga que utilizar una combinación de funciones concidir, indirecto, etc que complican la función
y al final tengo un churro de función ilegible.

La cuestión es que esta función la utilizo bastante en un libro
y excel se cansa de pasar todos los datos por la función "B"
y aparecen refs.cuando se queda sin memoria.
Por eso quería saber si conocéis de alguna función ya diseñada en excel u otra que mejore la que os presento.

Gracias por adelantado,
Javi
Public Function B(hoja As Range, ElementoFila As Variant, ElementoCol As Variant) As Variant
Dim nfila As Integer
Dim ncol As Integer
'Dim BPrevio As Double
nfila = Application.WorksheetFunction.Match(ElementoFila, hoja.Columns("A:A"), 0)
ncol = Application.WorksheetFunction.Match(ElementoCol, hoja.Rows("1:1"), 0)
B = Application.WorksheetFunction.Index(hoja, nfila, ncol, 1)
If (Application.WorksheetFunction.IsNumber(B) = False Or Application.WorksheetFunction.IsError(B) = True) Then
B = "ND"
Else
B = Application.WorksheetFunction.Index(hoja, nfila, ncol, 1)
End If
End Function

Preguntas similares