¿Macro que busque un valor en 7 hojas y lo devuelva en H1 en forma de lista de un campo especifico?

Tengo una BD compuesta por 8 Hojas... Necesito de su ayuda para realizar una macro que me busque un valor en hoja 2 a la 8 y me devuelta TODOS los valores encontrados en H1, C5... Es urgente

1 respuesta

Respuesta
1

H o l a:

Para concluir la macro, me puedes decir:

1. En dónde vas a capturar el valor a buscar.

2. En cada una de las hojas (2 a la 8), en cuál columna hay que buscar el valor.

3. Si se encuentran varios datos, qué dato o datos son los que se tienen que leer.

4. En dónde quieres poner el resultado de la búsqueda, supongo que en la hoja1 quieres el resultado, pero en cuáles celdas, tienes que especificar en cuáles celdas. Por ejemplo: de la hoja2 a la hoja8, la columna "H", de la fila dónde se encontró el valor, se tiene que poner en la hoja1 en la columna "C", en la siguiente fila vacía.


Si se te dificulta explicar con ejemplos cómo lo quieres, entonces pon una imagen de alguna de tus hojas 2 a 8, y en otra imagen pon el resultado cómo lo quieres de la hoja1.

S aludos

Si Gracias por tu ayuda.... voy a buscar un valor especifico en Hoja 1  celda B2... y ese valor que me lo busque en todas las filas y todas las columnas de la hoja 2,3,4,5,6,7 y 8 ... despues de que encuentre el valor buscado... me coloque la fila completa en la Hoja 1 en celda C4 me los ponga ordenados... para nada mas mandar imprimir esa hoja y no andar filtrando dato por dato ni copy/paste.... te agradeceria si me ayudaras pues no tengo muchas nociones en excell.... gracias Dante Amor y gran saludo

 H o l a:

te anexo la macro

Sub BuscarDato()
'Por.Dante Amor
    Set h1 = Sheets(1)
    u = h1.UsedRange.Rows(h1.UsedRange.Rows.Count).Row
    If u < 4 Then u = 4
    h1.Rows(4 & ":" & u).ClearContents
    '
    j = 4
    n = 8
    If Sheets.Count < 8 Then n = Sheets.Count
    For i = 2 To n
        Set r = Sheets(i).Cells
        Set b = r.Find(h1.[B2], lookat:=xlWhole)
        If Not b Is Nothing Then
            ncell = b.Address
            Do
                'detalle
                Sheets(i).Rows(b.Row).Copy
                h1.Rows(j).PasteSpecial xlValues
                j = j + 1
                Set b = r.FindNext(b)
            Loop While Not b Is Nothing And b.Address <> ncell
        End If
    Next
    MsgBox "Proceso terminado"
End Sub

Sigue las Instrucciones para un botón y ejecutar la macro

  1. Abre tu libro de Excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo
  4. En el panel del lado derecho copia la macro
  5. Ahora para crear un botón, puedes hacer lo siguiente:
  6. Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
  7. Elige una imagen y con el Mouse, dentro de tu hoja, presiona click y arrastra el Mouse para hacer grande la imagen.
  8. Una vez que insertaste la imagen en tu hoja, dale click derecho dentro de la imagen y selecciona: Tamaño y Propiedades. En la ventana que se abre selecciona la pestaña: Propiedades. Desmarca la opción “Imprimir Objeto”. Presiona “Cerrar”
  9. Vuelve a presionar click derecho dentro de la imagen y ahora selecciona: Asignar macro. Selecciona: BuscarDato
  10. Aceptar.
  11. Para ejecutarla dale click a la imagen.

Disculpa, ya pude correr la macro, batalle un poco, pero me copea todos los datos de la fila A de todas las hojas, el proceso que quisiera llevar es este:

1. En celda B2 Hoja 1, colocar un valor a buscar.

2. Que me busque el dato en todas las hojas a partir de A2 en todas.

3. Me copie los datos encontrados en C4 Hoja 1.

No se si se pueda, sino se puede pues entiendo, o podra hacerse esto con un filtro avanzado?

Gracias Dante Amor.

No entiendo.

Si la macro encuentra 20 datos, ¿quieres qué los 20 datos se pongan todos juntos dentro de la celda C4?

Mejor explícame con algunas imágenes.

En una imagen pon la hoja1, en la celda B2 tienes que poner un ejemplo.

En la imagen2 pon la hoja2, en la hoja2 debe existir el mismo dato que pusiste en la hoja1 celda B2.

En la imagen3 pon la hoja3 en la hoja3 debe existir el mismo dato que pusiste en la hoja1 celda B2.

En la imagen4 pon la hoja1 con el resultado que esperas, es decir, tienes que poner qué quieres de la hoja2 y qué quieres de la hoja3, ya que en esas hojas tienes el dato que se está buscando.

Creo que mi navegador no soporta las imágenes, pero espero explicarme mejor...

En la hoja 1 voy a buscar el dato.

Después ese dato se tiene que encontrar en las demás hojas.

E independientemente la ubicación del dato, quiero que me lo valla agregando en la hoja 1 a partir de la celda C4, algo así...

Valor buscado... 46583994

Puede que en la hoja 2 encuentres algo así

A B C D

1 Si No 46583994

2

3

Y me lo copiaría en la hoja 1 así tal cual

Si No 46583994

Y en la hoja 3 lo encuentre así.

A B C D

1

2

3 No 46583994 Si

Entonces los datos copiados serian a partir de la C4 de hoja uno y quedarían así

A B C D E

1

2

3

4 Si No 46583994

5 No 46583994 Si

Espero que me entiendas en el ejemplo, y los demás datos que encuentre que me los valla pegando en la siguiente fila...

Espero poderme haber explicado.

Saludos Cordiales y Gracias Dante Amor

¿Lo qué quieres decir es que el primer dato se pegue en la celda C4 y el siguiente en la celda C5?

Pero sigo sin entender qué datos son los que se tienen que copiar, sin imágenes no entiendo cómo tienes los datos en la hoja 2 y en la hoja 3.

Esto "No 46583994 Si", lo tienes en una sola celda, ¿o cómo lo tienes?

La verdad es difícil entender lo que quieres.


Envíame tu archivo con 4 hojas.

La hoja1, solamente con el dato 46583994 en la celda B2.

La hoja2 con ejemplos del dato 46583994

La hoja3 con ejemplos del dato 46583994

Y la hoja4 el resultado que esperas en la hoja1.

Y otra cosa, en la hoja2 pueden existir varias veces este dato 46583994, en diferentes lugares, si es así, entonces en tu archivo que me vas a enviar lo pones varias veces, procura utilizar ejemplos reales, para que la macro que voy a generar trabaje de acuerdo a lo que tienes.


Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Saul Castro Escobar” y el título de esta pregunta.

Listo Dante Amor ya te lo envie a tu e-mail.

Saludos

Te anexo la macro actualizada:

Sub BuscarDato()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Set h1 = Sheets(1)
    u = h1.UsedRange.Rows(h1.UsedRange.Rows.Count).Row
    If u < 4 Then u = 4
    h1.Range("A4:I" & u).ClearContents
    '
    j = 4
    n = Sheets.Count
    For i = 2 To n
        Set h = Sheets(i)
        Set r = h.Cells
        Set b = r.Find(h1.[B2], lookat:=xlWhole)
        If Not b Is Nothing Then
            ncell = b.Address
            Do
                'detalle
                c = h.Cells(b.Row, Columns.Count).End(xlToLeft).Column
                h.Range(h.Cells(b.Row, "A"), h.Cells(b.Row, c)).Copy
                h1.Cells(j, "C").PasteSpecial xlValues
                j = j + 1
                Set b = r.FindNext(b)
            Loop While Not b Is Nothing And b.Address <> ncell
        End If
    Next
    Application.ScreenUpdating = True
    MsgBox "Proceso terminado"
End Sub

sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas