Foros del Web » Soporte técnico » Ofimática »

Macro que busque y resalte (color de relleno)

Estas en el tema de Macro que busque y resalte (color de relleno) en el foro de Ofimática en Foros del Web. buenas tardes amigo del foro quisiera hacer una macro que busque un datoen todo un libro y cuando lo encuentre resalte toda la fila donde ...
  #1 (permalink)  
Antiguo 13/07/2009, 11:50
 
Fecha de Ingreso: julio-2009
Mensajes: 1
Antigüedad: 14 años, 9 meses
Puntos: 0
Macro que busque y resalte (color de relleno)

buenas tardes amigo del foro quisiera hacer una macro que busque un datoen todo un libro y cuando lo encuentre resalte toda la fila donde se encuentra

Cita:
Dim valor As String, celda1 As String, celda2 As String
Dim inicio As String, largo1 As String
valor = InputBox("Ingrese Numero ")
largo1 = Len(valor)
Cells.Find(What:=valor, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate

celda1 = ActiveCell.Address
celda2 = 0

Do While celda2 <> celda1
inicio = InStr(ActiveCell, valor)
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With

Cells.FindNext(After:=ActiveCell).Activate
celda2 = ActiveCell.Address
Loop

End Sub
este solo busca en la hoja que se encuentra de lo contrario da un error 91 y solo resalta la celda activa y no toda la fila gracias de antemano

alguien??

Última edición por Rafaelon; 25/07/2009 a las 11:34
  #2 (permalink)  
Antiguo 14/01/2010, 21:42
 
Fecha de Ingreso: enero-2010
Mensajes: 7
Antigüedad: 14 años, 3 meses
Puntos: 0
De acuerdo Macro para buscar y filtrar

Buenas amigos; mi problema es el siguiente, tengo un libro con varias hojas y lo que quiero es que en la hoja uno pueda crear una macro que me busque palabras de una fila y me traiga toda la fila donde está esta palabra y me las pegue en la hoja uno,
Ejemplo:
En la fila 2 de la hoja2 tengo estos datos A3: ip, B3: ciudad, C3: sede, D3: contacto, lo que quiero es que pueda escribir la palabra que quiero me busque como sede y me mande toda la información de esa fila y me la pegue en la hoja1
Les agradezco me ayuden con este tema ya que no tengo mucha experiencia en macros.
  #3 (permalink)  
Antiguo 15/01/2010, 07:52
Avatar de ceSharp  
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 495
Antigüedad: 15 años, 5 meses
Puntos: 66
Respuesta: Macro que busque y resalte (color de relleno)

hola rafaelon,

lo cierto es que me ha costado bastante llegar a lo que pedías, pero casi que ha sido ya por 'mis c......' jejejejejeje
cópiate todo esto en tu módulo (borrando lo que ya tenias) y asigna la función buscar al botón que va a encontrar coincidencias en tus hojas
------------------------------------------------------
Dim valor As String, celda1 As String, celda2 As String
Dim inicio As String
Dim fila As String
Dim hoja As String
Dim totHojas As Integer
Dim algunaCoincidencia As Boolean
Dim i As Integer

Sub buscar()

hoja = "Hoja"

totHojas = ThisWorkbook.Sheets.Count

valor = InputBox("Ingrese Número")

If valor = "" Then
Exit Sub
End If

For i = 1 To totHojas
Sheets(hoja & i).Select
Call encontrarDato
Next

algunaCoincidencia = False
Exit Sub

End Sub



Sub encontrarDato()
On Error GoTo noEncontrado

Cells.Find(what:=valor, after:=ActiveCell, LookIn:=xlFormulas, lookat:=xlWhole, _
searchorder:=xlByRows, searchdirection:=xlNext, MatchCase:=False, _
searchformat:=False).Activate
'como ha encontrado uno ya tenemos alguna coincidencia
algunaCoincidencia = True

celda1 = ActiveCell.Address
celda2 = 0

Do While celda2 <> celda1
inicio = InStr(ActiveCell, valor)
fila = ActiveCell.Row
Rows(fila & ":" & fila).Select
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With

Cells.FindNext(after:=ActiveCell).Activate
celda2 = ActiveCell.Address
Loop
Exit Sub
noEncontrado:
'comprobamos si ya hemos visto todas las hojas
If i = totHojas And algunaCoincidencia = False Then
MsgBox ("No se han encontrado coincidencias")
Else
Exit Sub
End If

End Sub
----------------------------------------------------
ahora este código realiza una búsqueda exacta (antes no lo hacía; le ponias un uno y te marcaba todas las celdas que tuvieran un uno, aunque fuera un diez), marca toda la fila y además busca en todas las hojas que tenga el libro.

implementalo y nos cuentas a ver qué tal te va, ok?

salu2
  #4 (permalink)  
Antiguo 15/01/2010, 07:59
Avatar de ceSharp  
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 495
Antigüedad: 15 años, 5 meses
Puntos: 66
Respuesta: Macro que busque y resalte (color de relleno)

hola wgalvis,

tu macro es posible de hacer, pero ahora no tengo tiempo (los viernes salimos antes, como uno de tantos, jejejeje). Si puedes esperar hasta el lunes te la preparo y a media mañana la tendrás, ok?
aún así puedes seguir investigando por tu cuenta, si eres capaz de llegar a algo.

salu2
  #5 (permalink)  
Antiguo 15/01/2010, 08:05
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años
Puntos: 88
De acuerdo Respuesta: Macro que busque y resalte (color de relleno)

Hola! Rafaelon. Intenta con lo siguiente:

Código PHP:
Sub BuscaY_Resalta()
Dim Hoja As ObjectSearch_Text As StringCelda As RangeFirst_Cell As String

Search_Text 
InputBox("Ingrese número a localizar""Búsqueda en el Libro")
If 
Search_Text "" Then Exit Sub
Application
.ScreenUpdating False

For Each Hoja In ActiveWorkbook.Sheets
  Set Celda 
Hoja.Cells.Find(What:=Search_TextLookIn:=xlValues_
    LookAt
:=xlWhole)
  If 
Not Celda Is Nothing Then
    First_Cell 
Celda.Address(External:=True)
    Do
      
With Celda.EntireRow.Interior
        
.ColorIndex 6: .Pattern xlSolid: .PatternColorIndex xlAutomatic
      End With
      Set Celda 
Hoja.Cells.FindNext(Celda)
    
Loop Until First_Cell Celda.Address(External:=True)
  
End If
Next Hoja

Application
.ScreenUpdating True
End Sub 
COMENTARIOS:

1º) For Each Hoja In ActiveWorkbook.Sheets es quien asigna al objeto "Hoja" cada una de las hojas de tu libro.

2º) LookAt:=xlWhole te indica que se busca el texto como único contenido de la celda.

3º) El método Find no selecciona la celda encontrada sino que la asiga a la variable Celda.
De ese modo y sumado a "Application.ScreenUpdating=False" la ejecución es infinitamente más rápida.

Saludos, Cacho.
  #6 (permalink)  
Antiguo 15/01/2010, 09:05
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 4 meses
Puntos: 144
Respuesta: Macro que busque y resalte (color de relleno)

wgalvis23, cuando hagas una pregunta, abre un tema nuevo, por favor.

Te lo digo, porque has despistado a otros foreros, y has hecho que los compañeros ceSharp y mrocf, hayan contestado a una pregunta de hace más de 6 meses (seguramente Rafaelon ya tiene solucionada su duda).

Saludos.
  #7 (permalink)  
Antiguo 15/01/2010, 09:15
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años
Puntos: 88
Respuesta: Macro que busque y resalte (color de relleno)

¡Caramba!... ¡Es cierto!
La pregunta origen de este hilo tiene -ya- más de seis meses.

¡Gracias, amigo "3pies"!
  #8 (permalink)  
Antiguo 18/01/2010, 09:32
Avatar de ceSharp  
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 495
Antigüedad: 15 años, 5 meses
Puntos: 66
Respuesta: Macro que busque y resalte (color de relleno)

wgalvis, wgalvis....

ay que me hiciste estrujarme el cerebro más de la cuenta el viernes... claro que por mi culpa, por no mirar la fecha del post... pero bueno, siempre me gusta investigar y, sobre todo, aprender, y sin duda con la tarea del viernes aprendí algunas cosillas.

bueno, en cuanto a tu tarea ya la tengo lista. no sé lo puesto que estás en excel. por si acaso te lo indico paso a paso:

1) abres tu libro excel
2) pulsa Alt+F11 para abrir el código VBA
3) click derecho en 'Microsoft Excel Objetos' --> Insertar --> Módulo
4) pega todo esto en el módulo creado
'-------------------------------------------------
Dim hojas As Integer
Dim algunaCoincidencia As Boolean
Dim fila As Integer
Dim siguienteFila As Integer
Dim sede As String
Dim i As Integer
Sub buscarSede()

sede = InputBox("Introduzca la sede:")
hojas = ThisWorkbook.Sheets.Count

'buscamos en todas las hojas, menos en la primera que es donde
'van los resultados
For i = 2 To hojas
Sheets("Hoja" & i).Select
Call encontrarSede(i)

Next

End Sub

Sub encontrarSede(numHoja As Integer)
On Error GoTo noEncontrado

Dim celdaX As String

Cells.Find(what:=sede, after:=ActiveCell, LookIn:=xlFormulas, lookat:=xlWhole, _
searchorder:=xlByRows, searchdirection:=xlNext, MatchCase:=False, _
searchformat:=False).Activate

'como ha encontrado uno ya tenemos alguna coincidencia
algunaCoincidencia = True

celda1 = ActiveCell.Address
celda2 = 0

Do While celda2 <> celda1
If celdaX = "" Then
celdaX = celda1
Else
celdaX = celda2
End If

inicio = InStr(ActiveCell, valor)
fila = ActiveCell.Row
Rows(fila & ":" & fila).Select
'copiamos la fila entera
Selection.Copy
'y nos vamos a la hoja1 para pegar el resultado
Call pegarResultado
Sheets("Hoja" & numHoja).Select
Range(celdaX).Select
Cells.FindNext(after:=ActiveCell).Activate
celda2 = ActiveCell.Address
Loop

Exit Sub

noEncontrado:
'comprobamos si ya hemos visto todas las hojas
If i = hojas And algunaCoincidencia = False Then
MsgBox ("No se han encontrado coincidencias")
Else
Exit Sub
End If

End Sub
Sub pegarResultado()

If siguienteFila = 0 Then
siguienteFila = 4
End If
Dim salir As Boolean

'nos situamos en la hoja1 en la primera fila donde pegar resultados
Hoja1.Select
Do
If Range("A" & siguienteFila) = "" Then
Range("A" & siguienteFila).Select
Selection.PasteSpecial
salir = True
Else
siguienteFila = siguienteFila + 1
End If
Loop Until salir = True

End Sub
'---------------------------------------------------
5) crea un botón en tu Hoja1
6) click derecho sobre el botón --> Asignar Macro
7) en la siguiente ventana selecciona la macro 'buscarSede'

si no me he equivocado yo y tú has seguido estos pasos correctamente, al escribir el nombre de una sede en la ventana que sale al pulsar el botón debería de hacer lo que tu pides.

si tienes problemas para implementarlo ya sabes donde estamos.

salu2
  #9 (permalink)  
Antiguo 18/01/2010, 09:37
Avatar de ceSharp  
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 495
Antigüedad: 15 años, 5 meses
Puntos: 66
Respuesta: Macro que busque y resalte (color de relleno)

no me he dado cuenta de un detallito...
en esta parte del código VBA
------------------------
noEncontrado:
'comprobamos si ya hemos visto todas las hojas
If i = hojas And algunaCoincidencia = False Then
MsgBox ("No se han encontrado coincidencias")
Else
Exit Sub
End If
--------------------------------------------
es la forma de gestionar el error pero nunca va a saltar el mensaje porque la variable i nunca va a ser el total de hojas en esa función. hay que cambiar esa i por numHoja para que, en caso de no encontrar coincidencias, salte la alerta avisando.

salu2
  #10 (permalink)  
Antiguo 07/06/2010, 21:07
 
Fecha de Ingreso: enero-2010
Mensajes: 7
Antigüedad: 14 años, 3 meses
Puntos: 0
De acuerdo Respuesta: Macro que busque y resalte (color de relleno)

ceSharp muchas gracias por tu ayuda si que me sirvio, perdona por no contestar antes pero es que estaba un poco ocupado mil gracias.....
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:54.