BuscarV Buscar y Condicionar búsqueda

Por favor si me pueden ayudar con esto:
Tengo un Hoja1
Nombre a Buscar celda C2
COL(A) COL(B)
Descripción Cantidad
Y otra Hoja2 con la siguiente matriz
                                                                Nombres a buscar
                                       Nombre1     Nombre2       Nombre3      Nombre4
Descripcion                     Cantidad     cantidad       cantidad      Cantidad
Materia1 1 0 0
Materia2 2 1 0 1
Materia3 1 2 0
Materia4 0 3 1 0
En la celda Hoja1!C2 quiero poner el nombre a buscar (Nombre1, Nombre2, Nombre3..). Y de forma automática se completen los campos Descripción y Cantidad, que se buscarán en la Hoja2! Matriz, que corresponda a la Celda (C2) con la condición que solo aparezcan cuando sean diferentes de CERO o celda vacía
    Ejemplo:
Resultados en la Hoja1
Nombre a buscar: Nombre1 Nombre a buscar: Nombre2
Descripción Cantidad Descripción Cantidad
Materia1 1 Materia2 1
Materia2                              2                               Materia4              3                               Materia3                              1                                                      
Espero haberme explicado bien, gracias por su tiempo amigos
Nota: como hacen para pegar imágenes en los mensajes

1 Respuesta

Respuesta
1
Añade un botón a tu hoja 1 y en el evento click debes agregar esto
Dim nombre As Variant
Hoja1.Activate
Dim C As Integer
Dim F As Integer
Dim i As Long
nombre = Trim(Range("C2").Value)
If Len(nombre) = 0 Then Exit Sub
Range("A3", "C65536").Clear
Hoja2.Activate
On Error Resume Next
ActiveSheet.Range("A1").Select
ActiveSheet.Cells.Find(What:=nombre, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
C = Selection.Column
ActiveSheet.Range("A1").FormulaR1C1 = "=COUNTA(R[2]C:R[65535]C)"
F = 2
For i = 3 To ActiveSheet.Range("A1").Value + 2
    If ActiveSheet.Cells(i, C).Value > 0 Then
    F = (F + 1)
    Hoja1.Range("A" & F).Value = ActiveSheet.Cells(i, 1).Value
    Hoja1.Range("B" & F).Value = ActiveSheet.Cells(i, C).Value
    End If
DoEvents
Next
Hoja2.Activate
ActiveSheet.Range("A1").Value = ""
Hoja1.Activate
MsgBox "Terminado", vbInformation
Ok, esto no dará problemas siempre y cuando dispongas los datos de la siguiente forma ( me base en tu modelo):
en hoja1  puse los rotulos de campos como sigue: A2="Descripción"   B2="Cantidad"  C2= el valor que bsucaras
en hoja2, la matriz de datos considere lo sgte:
A2=Descripción  B1=nombre1  B2 cantidad  C1=nombre2  C2=Cantidad   , etc, etc
Bien la macro toma el valor buscado, lo busca en la matriz y luego te devuelve todo lo que sea mayor a cero considerando la posición de la columna en donde se encuentra el nombre buscado, recorrerá fila a fila la matriz considerando el total de registros que existen en columna A, desde la celda A3 hacia abajo, por lo cual es importante que en tu matriz de datos, siempre existe la descripción ej=Materia1, Materia2, etc, etc.
Bueno, me comentas si te da algún problema de ejecución
y si todo anda bien, pues nada ams te pediría cerrar la pregunta
Bye
Mna gracias y perdona, es que tenia problema con mis ocnexiones
Pruebo el macro y te dijo.
Muchas gracias por la ayuda
Ok. Si la respuesta fue satisfactoria, entonces te pediría que
En cuanto escriba el código y lo pruebe te respondo y te digo como me fue
Gracias y saludo
Solo dejmae probarlo
Ok

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas