Excel Problema macro Cell find

Para Dante Amor

Hola dante Buen día

Tengo un problema a ver si me puedes ayudar, hice una macro de búsqueda con la cual al encontrar el "numero o rango" buscado corte toda la fila y la pegue en otra sección

Hasta ahí voy bien, el problema es que quiero que en lugar de estar buscando varias veces para que me arroje los resultados con el mismo numero, que de una vez me corte todas las celdas que contengan el mismo numero de búsqueda y las pegue en la sig hoja

Ejemplo:

102

102

101
Que las que dicen 102 en un solo movimiento las corte y pegue en la "hoja2"

Te dejo mi macro para que veas cual es mi falla o me orientes para poder realizar, agradecería mucho si al hacerlo me explicas el porque, ya que me gusta saber cual fue el fallo para en futuras ocasiones no tener que recurrir a esto, si no más bien yo mismo poder solucionar el problema

Sub Buscar2()
Buscardato = InputBox("No. De Orden")
Worksheets("registro").Select
Range("c1").Select
Set B = Cells.Find(What:=Buscardato, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False)

If Not B Is Nothing Then

B.EntireRow.Cut
Sheets("Hoja2").Select
Rows("1").Select
ActiveSheet.Paste
Range("G1:H1").Select
Selection.Copy
Sheets("Captura").Select
Range("I2").Select

Do While ActiveCell <> Empty
ActiveCell.Offset(1, 0).Select
Loop

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Else
MsgBox "No hay Más Registros", vbExclamation

End If

End Sub

Respuesta
1

No entiendo muy bien lo que necesitas.

Cells.Find, significa buscar en toda la hoja, además en el método Find, tienes el parámetro LookAt:=Xlpart, significa buscar parte dentro de la celda, es decir, si buscas un "102" y en la celda B15 tienes algo como esto: "Factura 91023", entonces va a encontrar un 102 y te va a copiar la fila 15. En otra celda, por ejemplo la D27 tienes algo como esto: "Calle primavera número 10286", también tienes un 102, entonces te va a copiar la fila 27.

Para copiar todo, se puede hacer de varias formas, con ciclo Do while, con un Autofiltro, con Filtro avanzado, con ciclo For; pero necesito saber en dónde quieres buscar en cuál columna, si el valor debe ser idéntico y si los datos están ordenados.

Otra cosa que no entiendo, es en dónde quieres pegar, ya que copias y pegas en la "hoja2", luego copias y pegas en la hoja "Captura".

Dependiendo de lo que necesites te puedo ayudar con el método de búsqueda.

Explica con un ejemplo real de lo que tienes y de lo que esperas como resultado, pega unas imágenes de tus hojas de excel, para que sea más fácil de explicar.

Sal u dos

Cells.Find, significa buscar en toda la hoja, además en el método Find, tienes el parámetro LookAt:=Xlpart, significa buscar parte dentro de la celda, es decir, si buscas un "102" y en la celda B15 tienes algo como esto: "Factura 91023", entonces va a encontrar un 102 y te va a copiar la fila 15. En otra celda, por ejemplo la D27 tienes algo como esto: "Calle primavera número 10286", también tienes un 102, entonces te va a copiar la fila 27.
Exacto esto que dices es lo que busco 

que todas las Celdas que tengan por ejemplo 102  , sea "Factura 91023","Calle primavera número 10286",
en un solo movimiento, me recorte toda la filas que contengan "102"  y la pegue en la hoja 2 , lo demas ya es un desglose que hice yo para otras cosas, eso no le des tanta importancia, solo es parte de mis pruebas que estoy haciendo 

No hay forma de cortar todos las filas que contengan el dato, ya que te aparece el error de excel: "No se puede ejecutar este comando en selecciones múltiples".

Por lo tanto, te anexo una opción para revisar fila por fila para ver si contiene el dato, si contiene el dato, entonces corta la fila y la pega en la hoja2.

Sub CortarPegar_1()
'Por.Dante Amor
    Set h1 = Sheets("registro")     'hoja origen
    Set h2 = Sheets("Hoja2")        'hoja destino
    h2.Cells.ClearContents          'limpia hoja destino
    '
    dato = InputBox("No. De Orden")
    If dato = "" Then Exit Sub
    '
    For i = 2 To h1.UsedRange.Rows(h1.UsedRange.Rows.Count).Row
        Set b = h1.Rows(i).Find(dato, lookat:=xlPart)
        If Not b Is Nothing Then
            j = j + 1
            h1.Rows(i).Cut h2.Rows(j)
        End If
    Next
    MsgBox "Datos cortados y pegados"
End Sub

La macro tiene el ciclo For desde la fila 2 hasta la última fila con datos de la hoja "registro".

Busca el dato en la fila, si lo encuentra corta la fila y la pega en la hoja2 en la fila j.

La fila j vale 0, pero le incremente 1 con j = j +1, entonces la primer fila la pega en la fila 1.

La siguiente fila la pega en la fila 2, y así sucesivamente.


.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

1 respuesta más de otro experto

Respuesta

Lo que pides es relativamente fácil, yo he hecho macros como la que pides y las instrucciones de búsqueda que se usan son Match y contar, si quieres te puedo enviar un ejemplo de como funciona la macro, básicamente es busca, localiza, cuenta duplicados, los selecciona, los corta y los envía a la hoja2.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas