Función de Búsqueda en VBA

19/12/2006 - 14:01 por javivi | Informe spam
Buenos días,

Existe programada entre las funciones de VBA de excel una función de
búsqueda que haga de forma más eficiente lo programado por mi en la
siguiente función a partir de dos funciones de excel.

Busca el elemento fila y columna (strings) de un rango que yo defina,
pero se ralentiza mucho el cálculo (necesita mucha memoria si tiene
que hacer la búsqueda muchas veces).

Javivi




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 = ""
Else
B = Application.WorksheetFunction.Index(hoja, nfila, ncol, 1)
End If

End Function
 

Leer las respuestas

#1 zz
19/12/2006 - 20:35 | Informe spam
crea un formulario

e inserta

1 textbox llamado textbox1
un listbox llamado listbox1
y un commandbutton llamado commandbutton1

y pega este codigo

Option Compare Text

Private Sub find_in_all_sheets()
Dim c As Range, i As Integer
Set c = Cells.Find(TextBox1.Text, LookIn:=xlValues)
For Each c In ActiveSheet.UsedRange' para que no busque en toda la hoja

If c.Value = TextBox1 Then
i = 0
ListBox1.AddItem "Value: " & "'" & TextBox1 & "'" & " Found in cell :" &
Replace(c.Address, "$", ""), i
ListBox1.Column(2, i) = (Replace(c.Address, "$", ""))
i = i + 1
End If
me.caption="Resultados para : " & TextBox1
Next
End Sub

Private Sub CommandButton1_Click()
ListBox1.Clear
TextBox1 = ""
End Sub

Private Sub ListBox1_Click()
Dim i As Integer
i = ListBox1.ListIndex
With ActiveSheet
.Range(ListBox1.Column(2, i)).Activate
End With
End Sub

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal
Shift As Integer)
If KeyCode = 13 Then
find_in_all_sheets
Else
Exit Sub
End If
End Sub

Private Sub UserForm_Initialize()
me.caption="Buscar"
ListBox1.ColumnHeads = True
ListBox1.ColumnCount = 2
End Sub



espero que te sirva

zz [MX]
cuasi-musico,semi-poeta y loco


"javivi" wrote in message
news:
Buenos días,

Existe programada entre las funciones de VBA de excel una función de
búsqueda que haga de forma más eficiente lo programado por mi en la
siguiente función a partir de dos funciones de excel.

Busca el elemento fila y columna (strings) de un rango que yo defina,
pero se ralentiza mucho el cálculo (necesita mucha memoria si tiene
que hacer la búsqueda muchas veces).

Javivi




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 = ""
Else
B = Application.WorksheetFunction.Index(hoja, nfila, ncol, 1)
End If

End Function

Preguntas similares