Arrojar varios datos desde un criterio de búsqueda

Lo que necesito es:
Yo tengo una columna (A1) con varios nombres de "Clientes", estos en algunos casos están repetidos y al frente en B1 tienen un # que es la factura de un producto "X", lo que quiero es buscar cualquier cliente en una celda de otra hoja y que al frente me aparezcan todas las facturas que corresponden a este cliente...

3 Respuestas

Respuesta
1
Disculpa la tardanza en mi respuesta, la única manera de lograr lo que pretendes en una hoja de calculo es a través de una tabla dinámica, esta opción la encuentras en la pestaña "Datos" debes tener un titulo para cada lista de datos, es decir, para la columna A en A1 la nombras "Clientes", para la columna B en B1 la nombras Facturas, para crearla simplemente sigues los pasos que te pide el asistente, cuando te toque colocar los datos en sección de filas primero colocas "Clientes", en la misma sección de filas después del campo clientes seleccionas "Facturas" usas los filtros para seleccionar al cliente que requieras y enseguida te aparecen todas las facturas relacionadas, si esta base de datos estará incrementándose no selecciones los campos actuales, amplia la selección no importa que en las demás filas no existan datos, después cuando ingreses datos solo actualizas la tabla dinámica y esta considerara los datos nuevos.
Espero haber sido explicito y que esto te ayude, cualquier duda me la comentas y no olvides valorar la respuesta
Respuesta
1
Haz lo siguiente:
Sopongamos que en la hoja1 tienes toda esa información, con una cabecera en la fila 1 (cliente, factura y teléfono) de A1 hasta C1, pues bien, copia esta cabecera en la hoja2 desde B1 hasta D1.
En la hoja2, celda A1 escribe el criterio de búsqueda tal cual lo tienes en hoja1, por ejemplo "cliente" y A2 lo dejas para escribir la palabra a buscar.
Hazte un botón para asignarle la siguiente macro:
Private Sub CommandButton1_Click()
With Worksheets("hoja2").Range("A1")
Sheets("hoja1").Range("A1:C1000").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range( _
"A1:A2"), CopyToRange:=Range("B1:D1"), Unique:=True
End With
End Sub
Con esto buscarás todas las coincidencias que empiecen por la celda A2.
Si no sabes el nombre y solo conoces una parte de él, introduce el texto en A2 con * delante y detrás: *...* y te mostrará todos los clientes que contengan en su nombre lo que has escrito.
Todo esto también lo puedes hacer cambiando la palabra nombre de A1 por otra consulta de búsqueda, por ejemplo, "ciudad" y en A2 escribes la ciudad.
Gracias, entendiste muy bien y pregunta y la macro funciona perfectamente, si tienes de pronto una fórmula te lo agradecería mucho...
Gracias...!
Si te sirvió el código que te puse, por favor, finaliza la pregunta.
En cuanto a lo de "... si tengo una fórmula", ¿te refieres a una fórmula en la hoja excel que haga lo mismo y no necesites Visual Basic?
La hay, pero sería algo más engorroso, creo que esto te irá mejor y más rápido.
Respuesta
1
No estoy seguro de entender tu pregunta. Si tienes en una hoja los clientes (repetidos) con sus facturas en el orden que sea. Pongamos un ejemplo sencillo:
Jose 12
Luis 14
Juan 54
Jose 54
Juan 67
Jose 87
Seleccionas la columna A, donde están los nombres y en Datos / Filtro marcas autofiltro. Con ello te aparecerá una flechita en la primera celda indicando que hay un desplegable. Lo abres y seleccionas el cliente que quieras. Con ello queda visible el nombre del cliente y las facturas que tenga. En nuestro ejemplo si escoges Juan:
Juan 54
Juan 67
Ahora copias las celdas que ves que siempre estarán juntas y las pegas donde quieras. Si vuelves a seleccionar Todos volverás a ver la lista completa.
¿Es eso lo que necesitas?
Si entendiste mi pregunta y al principio había pensado en eso pero lo que realmente necesito es un buscador en una hoja a parte en el que por medio de una fórmula o macro introduzca el nombre o lo elija de una lista desplegable y solo me aparezca el nombre con sus respectivas facturas.
Gracias...
Te hecho el código para que la búsqueda esté en la hoja 2 y los datos en la hoja 1, columnas A y B (con una fila de cabecera). Para que te funcione necesitas un botón en la hoja 2 con el siguiente código. Entiendo que sabes como crear el botón y asociarle el código.
Private Sub CommandButton1_Click()
'Al pulsar el botón busca en la hoja 1 los nombres que coinciden con lo que hay en A2 y copia
'el valor de la columna 2 correspondiente
Dim j As Integer, i As Integer, maxi As Integer
Dim ref As String
Me.Columns("C:C").Clear
ref = Me.Range("A2").Value
maxi = ThisWorkbook.Worksheets("Hoja1").Cells(1, 1).End(xlDown).Row
j = 2
For i = 2 To maxi
If ThisWorkbook.Worksheets("Hoja1").Cells(i, 1).Value = ref Then
Me.Cells(j, 3).Value = ThisWorkbook.Worksheets("Hoja1").Cells(i, 2).Value
j = j + 1
End If
Next
End Sub
Además en un modulo necesitas el código que a partir de la lista de nombres tdela hoja 1 columna A. te extrae los no duplicados y los sitúa en A2 como una lista desplegable para escoger.
Sub ExtraeLista()
' Extrae la lista sin duplicados desde A1 hasta F1 en la hoja1
Dim r As Range, s As Range
Set r = Range(Cells(1, 1), Cells(1, 1).End(xlDown))
Set s = Range("F1")
r.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("F1"), Unique:=True
Set s = Range(Cells(1, 6), Cells(1, 6).End(xlDown))
ActiveWorkbook.Names.Add Name:="Minombre", RefersTo:=s
Call GeneraLista
End Sub
Sub GeneraLista()
'Genera en la hoja 2 celda A2
Worksheets("Hoja2").Activate
Range("A2").Select
Rows("2:2").RowHeight = 19
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=Minombre"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub
Tienes que ejecutar por tanto la macro ExtraLista lo primero. Luego puedes presionar seleccionar el valor y presionar botón tantas veces como quieras. La macro o bien la ejecutas desde los menús, o la asocias a una pulsación de teclas o incluso puedes hacer otro botón en la hoja 1.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas