UniversoExcelForo

Respuesta a consultas.
Fecha de creación: 09.Abril.2012

Fundadores: Wibly,Tyno,Servando,Sakkar,Rosendo2,RMaximo,Railar,Mcoronel,Ioyama,Igtelo,Hugotron,Drochar,Dedos,Alberto,Adolfo

No se pueden hacer consultas de Excel o VBA por mensaje privado.
Utiliza el botón buscar del foro y te ahorras tiempo para obtener "ayuda".

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje [Página 1 de 1.]

1RESUELTO Búsqueda de datos el 12/02/14, 05:51 pm

Aretradeser


En una hoja tengo datos en 13 columnas, todas ellas con sus correspondientes títulos, de "A1" a "M1". A través de un código se realiza una búsqueda en toda la hoja, a partir del dato introducido en un InputBox. Si lo encuentra, copia en la hoja2 todas las filas en las que se encuentre el dato buscado, tantas veces como apareza el mismo. Me gustaría modificar este código, para que:
1.- la búsqueda, únicamente se haga en la columna "G".
2.- al realizar la copia (en la hoja2) de las filas donde ha encontrado el dato; además, en la celda "C1" de esa misma hoja, me copie el dato buscado (el introducido previamente en el InputBox).

El código que utilizo es el siguiente:
Código:
Dim algunaCoincidencia As Boolean
Dim Fila As Integer
Dim sede As String
Dim i As Integer, uFila As Integer, uColumna As Integer
Dim Hoja As Worksheet
Dim Rango As Range
Sub BuscarSede()

sede = InputBox("Introduzca el texto de busqueda")
sede = "*" & sede & "*" 'Añadimos los caracteres comodin al principio y al final

For Each Hoja In ThisWorkbook.Sheets
   If Hoja.Name <> "Hoja2" Then 'Esta es la hoja de resultados
      Hoja.Activate
      EncontrarSede Hoja
   End If
Next

If algunaCoincidencia = False Then
   MsgBox ("No se han encontrado coincidencias")
End If

End Sub

Sub EncontrarSede(Hoja As Worksheet)
On Error GoTo salir

algunaCoincidencia = True

'Buscamos la última fila y columna de la hoja para acotar el rango
uFila = Hoja.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
uColumna = Hoja.Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column

'Acotamos el rango
Set Rango = Range(Hoja.Cells(1, 1), Hoja.Cells(uFila, uColumna))

For Each celda In Rango 'Buscamos en todo el rango
   If UCase(celda.Value) Like UCase(sede) Then 'Comparamos por parecido a
      On Error GoTo Hoja2Vacia
      
      'Buscamos primera fila vacía en Hoja2
      Fila = Hoja2.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 1
      
      'Copiamos la fila de la Hoja en la Hoja2
      Hoja.Rows(celda.Row).Copy Hoja2.Rows(Fila)
      
      'Hemos encontrado coincidencia
      algunaCoincidencia = True
   End If
Next
Exit Sub '-----------------------------------------------

Hoja2Vacia:
   Fila = 2
   Resume Next
salir:
End Sub

Gracias.

2RESUELTO Re: Búsqueda de datos el 13/02/14, 12:05 pm

tyno


Hola Aretradeser.
Paso un archivo de ejemplo con una macro que esta mas simplificada y creo que cumple con tu pedido. Cualquier cosa la modificamos. Saludos
Archivos
prueba buscar.zip
No tienes los permisos para descargar los archivos.
(16 KB)

3RESUELTO Re: Búsqueda de datos el 13/02/14, 08:00 pm

Aretradeser


tyno, es una buena solución. Cumple perfectamente lo solicitado. Me gustaría, que me indicases que parte del código debería cambiar de tu archivo, para que me empezase a copiar los resultados a partir de la celda "A3", por ejemplo, o cualquiera otra de esta misma columna; respetando, eso sí, que el dato a buscar, siga copiándose en la celda "C1".
Muchas gracias por tu ayuda.

4RESUELTO Re: Búsqueda de datos el 13/02/14, 10:41 pm

tyno


Hola Aretradeser.
Este es el código de la macro:

Private Sub CommandButton1_Click()
On Error Resume Next
sede = InputBox("Introduzca el texto de busqueda")
With Sheets("Hoja2")
.Range("a2:m65536") = ""
i = 1
nxt: rw = Range(Cells(i, 7), Cells(65536, 7)).Find(sede, lookat:=xlWhole).Row
If rw = i Then
.Range("c1") = sede
resultado = Application.CountA(.Range("g2:g65536"))
MsgBox "Resultados de la busqueda: " & resultado, vbOKOnly, "Busqueda Finalizada"
Exit Sub
Else
fl = .Range("a1:a65536").Find("").Row
For a = 1 To 13
.Cells(fl, a) = Cells(rw, a)
Next a
i = rw
GoTo nxt
End If

End With
End Sub

Si quieres que la búsqueda se realice a partir de la fila 3 entonces el valor de la variable "i" (i=1), tiene que ser 2 es decir siempre uno menos que la fila desde donde queremos que se haga la búsqueda de datos. Por eso actualmente esta en 1 porque la búsqueda se realiza a partir de la fila 2. No se si esto es lo que preguntabas.
Saludos

5RESUELTO Re: Búsqueda de datos el 14/02/14, 07:25 am

Aretradeser


Lo que pretendo es que los datos buscados se copien en la Hoja2, a partir de la celda "A3". Y que en esta copia se incluyan los títulos. No que se realice la búsqueda a partir de la celda "A3" de la Hoja1.
Gracias

6RESUELTO Re: Búsqueda de datos el 14/02/14, 08:37 am

tyno


En ese caso la linea  a modificar es esta:

fl = .Range("a1:a65536").Find("").Row

Tendría que ser fl = .Range("a2:a65536").Find("").Row.
Mismo principio que antes, la referencia tiene que ser uno menos desde donde queremos se inserten los datos en este caso. Saludos

7RESUELTO Re: Búsqueda de datos el 14/02/14, 02:30 pm

Aretradeser


Ahora, son esa mof¡dificación, sí empieza a copiar a partir de la celda "A3"; pero, no copia los títulos. Curioso, no!!!
En cualquier caso, muchísimas gracias; ya lo dejo puestos yo.

8RESUELTO Re: Búsqueda de datos el 14/02/14, 02:43 pm

Aretradeser


Ahora, con esa mof¡dificación, sí empieza a copiar a partir de la celda "A3"; pero, no copia los títulos. Curioso, no!!!
En cualquier caso, muchísimas gracias por tu trabajo y esfuerzo; ya lo dejo puestos yo.

9RESUELTO Re: Búsqueda de datos el 14/02/14, 03:52 pm

Aretradeser


tyno, una duda. Porqué en "Resultados de la búsqueda" cuenta siempre uno más de los datos encontrados.

10RESUELTO Re: Búsqueda de datos el 14/02/14, 05:02 pm

tyno


Se me ocurre que si has modificado los rangos, puede que se estén contando los rótulos de columnas:

resultado = Application.CountA(.Range("g2:g65536"))

En el archivo original como veras el conteo se hacia a partir de G2, porque en G1 esta el rotulo de la columna. Verifica si modificando ese rango cambia el resultado.

Saludos

Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

Permisos de este foro:
No puedes responder a temas en este foro.