MACRO para búsqueda y reemplazo BREVE

Estoy tratando de hacer una MACRO que funcione a la opción "búsqueda y reempazo" (crtol+b), con la diferencia que solo coloque en una casilla el nombre de la columna (ejemplo la búsqueda lo hace en la columna "G") y el dato a buscar es "2222" (celda "G donde se pone el dato, coloreado de naranja)

El resultado es la celda "G8" que es "GI-001-0002222" coloreado de naranja.

PROBLEMA

1) Que solo busca el 1er dato que coincide no busca los demás datos

2) Tengo que apretar el botón "BUSCAR" para que funcione la MACRO, quisiera que funcione con solo digitar el dato (ya sea numero o palabra) y luego darle enter, sin necesidad de dar click al botón "BUSCAR"

3) Que la MACRO coloree de "naranja" el dato que coincida con mi búsqueda cuando yo apreté la tecla "Esc"

Esta es la MACRO que por favor modifiques

Sub BUSQUEDA()
Cells.Find(What:="*" & Range("G1").Text & "*", After:=Cells(3, Range(Range("F1") & "1").Column), LookIn:=xlValues, LookAt _
        :=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate
End Sub

aqui esta la imagen

Anexo que envío el archivo "EJEMPLO BÚSQUEDA COLUMNA.xls"

1 respuesta

Respuesta
1

Haber si entendí,

Quieres poner un dato en la celda G1, ¿correcto?

Ese dato buscarlo en la columna G, de la fila 4 hacia abajo, ¿correcto?

Si encuentro el dato, ¿qué hago?

Si encuentro varios datos iguales, ¿qué hago?

Y a qué te refieres con esto: "el dato que coincida con mi búsqueda cuando yo apreté la tecla "Esc" ???

Te anexo la macro

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Target.Address(False, False) = "G1" Then
        If Target.Count > 1 Then Exit Sub
        Set r = Range("G4:G" & Range("G" & Rows.Count).End(xlUp).Row)
        Set b = r.Find(Target, LookIn:=xlFormulas, lookat:=xlPart)
        If Not b Is Nothing Then
            r.Interior.ColorIndex = xlNone
            b.Select
            b.Interior.ColorIndex = Target.Interior.ColorIndex
        End If
    End If
End Sub

Saludos.Dante Amor

La búsqueda lo realiza a través del dato que se digita en la celda "G!" y la columna donde buscar la da la celda "F!" (en el ejemplo de la imagen por coincidencia la cela de búsqueda "G1" coincide con la columna de búsqueda (osea columna "G")

Como espero que funcione

1) Dígito el dato en la celda "G1" (ya sea numero o palabra)

2) Terminado de digitar el dato y al presionar enter se ejecute la MACRO sin usar el botón "BUSQUEDA"

3) AL COMENZAR LA BÚSQUEDA

3.1) si hay solo un dato, al dar "escape" lo coloree de naranja

3.2) si hay varias datos coincidentes:

3.2.1) encuentra primer dato, lo colorea o mejor dicho lo resalta para fijarme que dato encontró, si es el dato que busco, al dar "escape" la celda encontrada queda coloerada de naranja igual que opción (3.1)

3.2.2) me pregunta si deseo continuar la búsqueda

3.2.3) si es así, me ubicara en la 2da coincidencia, si no es dato que espero. Doy enter, para seguir buscando

3.2.4) continua con la 3ra coincidencia y así sucesivamente hasta terminar

3.2.5) pintando cuando de "escape" en las celdas que yo escoja

3.2.6) en caso que ya no desee continuar la búsqueda finalizar dando "doble escape"

Quisiera que funcione así, envíe el archivo de ejemplo a tu yahoo

Saludos, JOHNMOR41, LIMA PERÚ

No existe el evento doble escape.

¿Puedo poner una ventana que te pregunte si es el dato o no? Si presionas "SI" ahí se queda, si presionas "No" sigue con la siguiente búsqueda.

Perfecto, me parece muy bien las preguntas para continuar o parar la MACRO, esa es la idea, que la búsqueda continué, hasta que decida que los datos encontrados son suficientes y por favor que queden coloreados.

Saludos, JOHNMOR41

También estoy de acuerdo con la opción que das para continuar la búsqueda

Prueba con esta macro

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Target.Address(False, False) = "G1" Then
        If Target.Count > 1 Then Exit Sub
        Set r = Range("G4:G" & Range("G" & Rows.Count).End(xlUp).Row)
        Set b = r.Find(Target, LookIn:=xlFormulas, lookat:=xlPart)
        If Not b Is Nothing Then
            ncell = b.Address
            Do
                r.Interior.ColorIndex = xlNone
                b.Select
                b.Interior.ColorIndex = Target.Interior.ColorIndex
                If MsgBox("Es el dato", vbQuestion + vbYesNo) = vbYes Then
                    Exit Sub
                End If
                Set b = r.FindNext(b)
            Loop While Not b Is Nothing And b.Address <> ncell
            MsgBox "Ya no hay más coincidencias"
        Else
            MsgBox "No existen datos"
        End If
    End If
End Sub

La MACRO la copie pero no se puede ejecutar, como vez en la imagen, la MACRO esta copiada en el MODULO 1, En la venta superior recuadro izquierdo dice "(General)" y donde debe ir el nombre de la MACRO recuadro derecho dice "Worksheet_Change"

Al dar clic al botón "flecha derecha color verde" para ejecutar la MACRO. Sale la ventana de MACRO pero vacía.

Anexo te envío el archivo "EJEMPLO BÚSQUEDA COLUMNA BREVE dam.xls" a tu correo.

Como corrijo este problema

Saludos, JOHNMOR41

Solamente tienes que poner el valor a buscar en la celda G1. Ya no necesitas el botón. Ya no necesitas la macro en el módulo.

La macro tiene que estar en los eventos de la hoja.

Saludos. Dante Amor

Hola Dante Amor por error puse mi comentario en otra pregunta (Aplicar Change(ByVal Target As Range) con varios rangos), con las disculpas a todos los usuarios que seguimos tus respuestas, bueno, el problema es el siguiente:

Hola Dante la macro esta funcionando así:

*****************************************************

1) Escribo el dato a buscar y doy enter

2) Encuentra el 1er dato coincidente, y pregunta ¿es el dato? (si o no)

3) Si escojo "no" continua con 2da dato coincidente y pregunta ¿es el dato? (si o no) 

4a) si escojo "si", colorea el dato encontrado (osea 2da coincidencia) y para la búsqueda (fin MACRO)

En el punto (4) esta el problema, yo quiero que siga buscando coincidencias, espero la MACRO continué.

Espero que el punto (4) funcione así:

**********************************************

4b) si escojo "si" colorea el 2do dato encontrado y pregunta ¿DESEA CONTINUAR BÚSQUEDA? (si o no)

5) Si escojo "si" busca 3ra dato coincidente y pregunta ¿es el dato? (si o no) 

6) Si escojo "no" continua con 4ta dato coincidente y pregunta ¿es el dato? (si o no) 

7) Si escojo "si" colorea el 4to dato encontrado y pregunta ¿DESEA CONTINUAR BÚSQUEDA? (si o no)

8) Si escojo "no" para la búsqueda (fin MACRO)

9) Puede pasar que también termine los datos coincidentes o no hay ninguno, espero un aviso "NO HAY DATOS COINCIDENTES" (fin MACRO)

Muchas gracias Dante Amor, saludos, JOHNMOR41

Te anexo la macro actualizada

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Target.Address(False, False) = "G1" Then
        If Target.Count > 1 Then Exit Sub
        Set r = Range("G4:G" & Range("G" & Rows.Count).End(xlUp).Row)
        Set b = r.Find(Target, LookIn:=xlFormulas, lookat:=xlPart)
        r.Interior.ColorIndex = xlNone
        If Not b Is Nothing Then
            ncell = b.Address
            Do
                b.Select
                If MsgBox("Es el dato " & b.Value, vbQuestion + vbYesNo) = vbYes Then
                    b.Interior.ColorIndex = Target.Interior.ColorIndex
                    If MsgBox("Desea continuar", vbQuestion + vbYesNo) = vbNo Then
                        Exit Sub
                    End If
                End If
                Set b = r.FindNext(b)
            Loop While Not b Is Nothing And b.Address <> ncell
            MsgBox "Ya no hay más coincidencias"
        Else
            MsgBox "No existen datos"
        End If
    End If
End Sub

Saludos.Dante Amor

Recuerda valorar la respuesta.

Ahora si funciona a la perfeccion, solo una ayuda mas al lado izquierdo del casillero "G1" osea la celda "F1" yo queria que esta celda sirva de guia para hacer la busqueda osea aqui ponia el nombre de la columna en la que queria que funcione la macro, ejemplo si queria usar la MACRO para buscar coincidencias en el nombre de los articulos en "F1" escribia la letra "B" (la columna "B" contiene los nombres de los articulos) entonces el celda "G1" pondria una o varias palabras por decir en "G1" escribo "X 1GL" y la busqueda de coincidencias lo haria en esa columna, este cambio lo puedes añadir.

La otra alternativa aunque creo que sea mas dificil pero que estoy convencido que para ti no hay imposibles, es que simplemente la celda "G1" sea movida a la celda "B1" y la macro detecte por defecto que la busqueda la tiene que realizar en la columna donde esta ubicada, es decir que cuando la celda de "busqueda" estaba en "G1" la busqueda la hacia en la columna "G" y ahora que la celda de busqueda se movio a la celda "B1" la columna de busqueda es la "B".

por favor haz esta ultima modificacion, saludos, JOHNMOR 41

Valora esta respuesta y crea una nueva pregunta con la nueva petición.

Si lo deseas, al final del título de la nueva pregunta puedes poner que va dirigida a Dante Amor.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas