Buenas tardes, estoy buscando una macro que me busque el valor que coloco en la celda A1 en toda la columna C, y que cuando lo encuentre se pare encima de la celda donde esta el valor. No quiero ningún cuadro imputbox ni nada, sólo la macro a la cual le asignaré un botón. ¿Es posible? Gracias
La siguiente rutina se ejecutará al ingresar un valor en A1 (no necesitas del botón- si lo preferís escribime nuevamente para el ajuste) Entrá al editor, seleccioná con clic derecho el objeto HOJA que corresponda (del panel a tu izquierda) y allí copiá esto: Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(False, False) = "A1" Then 'controla el cambio en A1 Set busco = ActiveSheet.Range("C:C").Find(Target.Value, LookIn:=xlValues, lookat:=xlWhole) 'busca ese dato en col C If Not busco Is Nothing Then busco.Select 'si la búsqueda no quedó vacía es que lo encontró y lo selecciona Set busco = Nothing End If End Sub Saludos y no dejes de comentarme si esto resolvió tu consulta.
Buenas tardes Elsa Matilde, muy buena tu respuesta, la ejecute y funcionó a la perfección pero no fui claro al hacer la pregunta. Ahora que trate de ajustarla a mi necesidades no pude. Además de que me busque el valor, necesito que me selecciones las cinco celdas adyacentes a la derecha, me las copie a partir de la celda b5 de la hoja 3 y sino lo encontró me ubique en la celda B2 de la hoja 2. Gracias por tu tiempo.
Tu consulta requería que '... cuando lo encuentre se pare encima de la celda donde esta el valor...' y eso es exactamente lo que hace. Lamento que no expliquen de entrada lo que realmente quieren, nos evitaría pérdida de tiempo a unos y otros. Bien, aquí va entonces con el agregado: Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(False, False) = "A1" Then 'controla el cambio en A1 Set busco = ActiveSheet.Range("C:C").Find(Target.Value, LookIn:=xlValues, lookat:=xlWhole) 'busca ese dato en col C If Not busco Is Nothing Then fila = busco.row range("C" & fila & ":H" & row).copy destination:=sheets("Hoja3").range("B5") (ver*) else 'si no encontró el dato sheets("Hoja2").range("B2").select end if Set busco = Nothing End If End Sub Nota (*) : ajustá el nombre de las col si no corresponde a C:H Si debe copiar en la primer fila libre a partir de B5, previamente deberás guardar en una variable esa fila: filibre = sheets("Hoja3"). Range("B65536").end(xlup). Row +1 y luego copiar los datos a partir de esa celda. En esa línea, en lugar de Range("B5") colocá: Cells(filibre, 2)
Buenas noches Elsa, te cuento que cuando encuentra el dato tengo problemas con esta liena: Range("C" & fila & ":H" & Row).Copy Destination:=Sheets("Hoja3").Range("B5") y sino lo encuentra tengo problemas con esta otra linea Sheets("Hoja2").Range("B2").Select Saludos
Pedime el ejemplo al correo que encontrarás en mi sitio (o dejame el tuyo aquí). No olvides tu alias o motivo de consulta
Buenas noches Elsa, disculpa que abuse de tu amabilidad, he tratado de hacerlo funcionar a mis necesidades pero me arroja el mismo error en la misma parte. Ya cuando no lo encuentra el valor me quedo bueno, el problema persiste es cuando encuentra el valor, se interrumpe la acción y me saca el error ´1004´ en tiempo de ejecución: error en el método select de la clase Range. No se cómo solucionarlo o que es lo que esta mal. Te subrayo la fila del error. Gracias por tu amable atención. Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(False, False) = "A8" Then 'controla el cambio en A1 Sheets("hoja2").Select Set busco = ActiveSheet.Range("c:c").Find(Target.Value, LookIn:=xlValues, lookat:=xlWhole) 'busca ese dato en col C If Not busco Is Nothing Then fila = busco.Row ActiveCell.Offset(1, 5).Select Application.CutCopyMode = False Selection.Copy Sheets("Hoja3").Select Range("B7").Select ActiveSheet.Paste Application.CutCopyMode = False Else 'si no encontró el dato Sheets("Hoja2").Range("B6").Select ActiveCell.EntireRow.Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove ActiveCell.Offset(0, 0).Select ActiveCell.FormulaR1C1 = "=TODAY()" ActiveCell.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False ActiveCell.Offset(0, 1).Select End If Set busco = Nothing End If End Sub
Probá con esta sintaxis, considerando que la hoja3 ya está seleccionada: Activesheet.range("B7").select Seguramente cuando avances te dará error en esta otra línea: Sheets("Hoja2").range("B6").select Lo correcto aquí sería: Sheets("Hoja2").select activesheet.range("B6").select Sdos