Buscar en varias hojas

22/03/2006 - 18:27 por luka | Informe spam
Hola a todos.
Tengo que buscar un valor en una fila y colorear dicha fila hasta una
columna determinada, eso lo se hacer en una hoja y con valores fijos, el
problema viene porque el libro tiene unas cuantas hojas, 40 mas o menos.

La mayoría de estas hojas son datos sobre los valores que se dan de
ciertos parámetros en todas las provincias españolas, con datos entre 10
y 18 columnas según las hojas. Un par de columnas a la derecha de la
última vienen las provincias ordenadas por el ranking correspondiente al
parámetro de la hoja.

Tengo que colorear la fila de una provincia en concreto desde la columna
2 hasta la ultima que tenga datos y la fila de la misma provincia en las
dos columnas del ranking.

Mas o menos sé (o creo saber) lo que tendría que hacer para conseguirlo,
pero no tengo ni idea de como plasmar eso en código (los metodos,
objetos, propiedades, etc.) se me resiste como luchador de sumo.

Esto es lo que creo que habría que hacer, a ver si me iluminais, tanto
en el planteamiento como en el código.


- Buscar la palabra Ranking en la primera hoja
- Si no está pasa a la siguiente
- Buscar la palabra Ranking en la segunda hoja
- Si está, ver en que columna está, (meter la columna en una variable)
- Buscar la provincia en el rango A1 hasta la columna del ranking-1y
fila 100 (realmente suele estar en las tres primeras columnas, pero
nuncas se sabe como lo van a mandar)
- Meter la fila en una variable
- Colorear la fila desde A hasta fila,columna del ranking - 1
- Buscar la provincia en la columna del Ranking
- Colorear la fila de esa provincia de esa columna y de la siguiente.
- Siguiente hoja.

Gracias por aguantar el roooollo.

Javier B.

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
23/03/2006 - 02:41 | Informe spam
hola, Javier !

1) ciertamente, la situacion que necesitas resolver [parece que]... 'se ve'... como si estuviera complidada -?-

2) si suponemos que 'los rankings' de una hoja... poco [o nada] 'tienen que ver' con los rankings de las otras...
existe [solo] la posibilidad, de que los formatos condicionales pudieran evitar [o ahorrar un poco de] el uso de codigos -?-
[considerando que tienes disponibles -solo- 3 opciones de formato diferente para cada celda] :-(

3) lo que si hace falta [creo]... son detalles mas... especificos [recuerda que los 'indeterminados' son confusos] :)) [p.e.]:
-> como saber [o de donde se toma] la provincia 'en concreto' que mencionas ?
-> que significa 'buscar la palabra ranking' ?
-> no se supone que para aprovechar los rankings, se deberia buscar una posicion correspondiente a 'cierta' provincia o dato ?

en tanto comentas los detalles que -de momento- siguen 'en el tintero' :D
saludos,
hector.

__ consulta original __
Tengo que buscar un valor en una fila y colorear dicha fila hasta una columna determinada
eso lo se hacer en una hoja y con valores fijos, el problema viene porque el libro tiene unas cuantas hojas, 40 mas o menos.
La mayoria de estas hojas son datos sobre los valores que se dan de ciertos parametros en todas las provincias espa#olas
con datos entre 10 y 18 columnas segun las hojas.
Un par de columnas a la derecha de la ultima vienen las provincias ordenadas por el ranking correspondiente al parametro de la hoja.
Tengo que colorear la fila de una provincia en concreto desde la columna 2 hasta la ultima que tenga datos
y la fila de la misma provincia en las dos columnas del ranking.
Mas o menos se (o creo saber) lo que tendria que hacer para conseguirlo, pero no tengo ni idea de como plasmar eso en codigo
(los metodos, objetos, propiedades, etc.) se me resiste como luchador de sumo.
Esto es lo que creo que habria que hacer, a ver si me iluminais, tanto en el planteamiento como en el codigo.
- Buscar la palabra Ranking en la primera hoja
- Si no esta pasa a la siguiente
- Buscar la palabra Ranking en la segunda hoja
- Si esta, ver en que columna esta, (meter la columna en una variable)
- Buscar la provincia en el rango A1 hasta la columna del ranking -1 y fila 100
(realmente suele estar en las tres primeras columnas, pero nunca se sabe como lo van a mandar)
- Meter la fila en una variable
- Colorear la fila desde A hasta fila,columna del ranking - 1
- Buscar la provincia en la columna del Ranking
- Colorear la fila de esa provincia de esa columna y de la siguiente.
- Siguiente hoja.
Respuesta Responder a este mensaje
#2 Juan
23/03/2006 - 11:18 | Informe spam
hola javier

en el planteamiento me parece que faltan datos
- Buscar la palabra Ranking en la primera hoja




en que rango hay qye buscar esa palabra

- Si está, ver en que columna está, (meter la columna en una variable)



almacenar en una variable el rango (celda)>> metodo find

- Buscar la provincia en el rango A1 hasta la columna del ranking-1y fila
100 (realmente suele estar en las tres primeras columnas, pero nuncas se
sabe como lo van a mandar)



que provincia? o donde tiene que buscar esa provincia?

- Colorear la fila desde A hasta fila,columna del ranking - 1
- Buscar la provincia en la columna del Ranking
- Colorear la fila de esa provincia de esa columna y de la siguiente.



una cosa como esta te puede servir
ws.Rows(c.Row).Interior.ColorIndex = 3

en tanto das mas datos, mira a ver si el siguiente codigote da alguna pista
para lo que quieres hacer
he colocado comentarios en cada linea para que veas lo que hace

si puedes, creo que tambien seria util ver un par de paginas de ejemplo

un saludo
juan

*****
en un modulo estandar del libro donde tienes las hojas

Sub colorfila()

Dim c As Range
Dim datos As Range
Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets
'bucle para recorrer todas las hojas del libro
Set datos = ws.Range("A1:C36")
'marca el rango donde quieres que busque la palabra ranking
Set c = datos.Find("ranking", LookIn:=xlValues)
'almacena la celda donde se encuentra la palabra ranking
If Not c Is Nothing Then
'comprueba que se ha asignado un rango a esa variable
ws.Rows(c.Row).Interior.ColorIndex = 3
'colorea toda la fila donde se encuentra la palabra ranking
' el 3 es el rojo
End If
Set c = Nothing
Set datos = Nothing
'elimina el valor de las variables
Next ws
Set ws = Nothing
End Sub
Respuesta Responder a este mensaje
#3 luka
23/03/2006 - 16:34 | Informe spam
Hola Juan y Hector Miguel.

Antes que nada gracias por responder. Es curioso como se ven las cosas
diferentes según en donde estés. Yo pensé que me había pasado con las
explicaciones y resulta que no eran suficientes. Se dan por sentadas
muchas cosas que el que las lee no tiene presente y no puede desarrollar
la respuesta.
Antes de leer vuestros correos ya había realizado el código y lo he
probado en el curro y funciona. Pensaba ponerlo para que me lo
corrigieseis, porque está hecho mas o menos como se realizan las
traducciones informáticas, palabra a palabra, y estoy seguro (mas que
seguro) que se puede optimizar
Os lo pongo a continuación, espero que seais benévolos.
Saludos
Javier B.
==Sub buscaprovincia()
Dim Provincia As String, Hoja As Worksheet
Provincia = InputBox("Ponga una provincia", "")
Application.ScreenUpdating = False
For Each Hoja In ThisWorkbook.Worksheets
a = Hoja.Name
With Worksheets(a).Range("A1:AZ100")
Set c = .Find("RANKING", LookIn:=xlValues)
If Not c Is Nothing Then
direccion = c.Address
Worksheets(a).Activate
columna = Range(direccion).Column
With Worksheets(a).Range("A1:B100")
Set d = .Find(Provincia, LookIn:=xlValues)
If Not d Is Nothing Then
direccion1 = d.Address
fila = Range(direccion1).Row
Cells(fila, 2).Resize(, columna - 3).Interior.ColorIndex = 5
End If
End With
With Worksheets(a).Cells(1, columna).Resize(100)
Set e = .Find(Provincia, LookIn:=xlValues)
If Not e Is Nothing Then
direccion2 = e.Address
fila = Range(direccion2).Row
Cells(fila, columna).Resize(, 2).Interior.ColorIndex = 5
End If
End With
End If
End With
Next Hoja
Application.ScreenUpdating = True
End Sub
==Juan escribió:
hola javier

en el planteamiento me parece que faltan datos
- Buscar la palabra Ranking en la primera hoja




en que rango hay qye buscar esa palabra

- Si está, ver en que columna está, (meter la columna en una variable)



almacenar en una variable el rango (celda)>> metodo find

- Buscar la provincia en el rango A1 hasta la columna del ranking-1y fila
100 (realmente suele estar en las tres primeras columnas, pero nuncas se
sabe como lo van a mandar)



que provincia? o donde tiene que buscar esa provincia?

- Colorear la fila desde A hasta fila,columna del ranking - 1
- Buscar la provincia en la columna del Ranking
- Colorear la fila de esa provincia de esa columna y de la siguiente.



una cosa como esta te puede servir
ws.Rows(c.Row).Interior.ColorIndex = 3

en tanto das mas datos, mira a ver si el siguiente codigote da alguna pista
para lo que quieres hacer
he colocado comentarios en cada linea para que veas lo que hace

si puedes, creo que tambien seria util ver un par de paginas de ejemplo

un saludo
juan

*****
en un modulo estandar del libro donde tienes las hojas

Sub colorfila()

Dim c As Range
Dim datos As Range
Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets
'bucle para recorrer todas las hojas del libro
Set datos = ws.Range("A1:C36")
'marca el rango donde quieres que busque la palabra ranking
Set c = datos.Find("ranking", LookIn:=xlValues)
'almacena la celda donde se encuentra la palabra ranking
If Not c Is Nothing Then
'comprueba que se ha asignado un rango a esa variable
ws.Rows(c.Row).Interior.ColorIndex = 3
'colorea toda la fila donde se encuentra la palabra ranking
' el 3 es el rojo
End If
Set c = Nothing
Set datos = Nothing
'elimina el valor de las variables
Next ws
Set ws = Nothing
End Sub



Respuesta Responder a este mensaje
#4 Juan
23/03/2006 - 18:01 | Informe spam
hola javier

a falta de lo que comente Hector Miguel, si el codigo funciona estupendo es
de lo que se trata facilitar las cosas, si quieres un codigo mas eficaz te
recuerdo un comentario que se recomienda mucho en el foro 'no es necesario
seleccionar o activar rangos y hojas para trabajar con ellos'.

despues de revisar todo el codigo te recomiendo activar la declaracion
expresa de variables (Option Explicit), aunque al principio es un poco
pesado al final hace que los codigos sean mas eficaces porque saben que
vaiables esta llamando en cada caso y te recuerdan su definicion y si es un
objeto aparecen desplegables que te indican propiedades y metodos aplicables
a los mismos.
te recomiendo un curso de vba de Eduardo Olaz que a mi me parece estupendo,
(que no te engañe el titulo vba para acces, y dale una oportunidad)

http://www.olaz.net/descargas/acces...tregas.htm

Es recomendable que las variables que has empleado para asignar direcciones
y rangos las inicialices o borres su valor
(c=nothing) para que no pueda arrastrar ningun valor a sitios donde no deban
estar

el empleo de with esta justificado si vas a hacer muchas operaciones dentro
de ese rango o conjunto, si solo vas a hacer una llamada es mejor (en mi
opinion emplearlo directamente)

With Hoja.range("A1:AZ100")
Set c = .Find("RANKING", LookIn:=xlValues)
estas, quiza mejor cambiarlas por
set c=Hoja.range("A1:AZ100").find("RANKING",Lookin:=xlvalues)

y asi en lo sucesivo

un saludo
juan

sin probar el codigo, te marco modificaciones que haria yo en el codigo,
(espero que si detectas un error sepas disculparme)


Sub buscaprovincia()
Dim Provincia As String, Hoja As Worksheet
Provincia = InputBox("Ponga una provincia", "")
Application.ScreenUpdating = False
For Each Hoja In ThisWorkbook.Worksheets
' a = Hoja.Name
'esta linea no es necesaria accedes a la hoja
'de otra manera
' With Worksheets(a).Range("A1:AZ100")
'mejor la que sigue
With Hoja.range("A1:AZ100")
Set c = .Find("RANKING", LookIn:=xlValues)
If Not c Is Nothing Then
direccion = c.Address
' Worksheets(a).Activate
'revisa el comentario
columna = Hoja.Range(direccion).Column
' With Worksheets(a).Range("A1:B100")
'revisa lo anterior
With Hoja.Range("A1:B100")
Set d = .Find(Provincia, LookIn:=xlValues)
If Not d Is Nothing Then
direccion1 = d.Address
'Ojo a estas dos instrucciones
fila = Hoja.Range(direccion1).Row
Hoja.Cells(fila, 2).Resize(, columna - 3).Interior.ColorIndex =
5
End If
End With
'Otra modificacion el la llamada a la hoja
With Hoja.Cells(1, columna).Resize(100)
Set e = .Find(Provincia, LookIn:=xlValues)
If Not e Is Nothing Then
direccion2 = e.Address
'mas de lo mismo en las dos siguientes
fila = Hoja.Range(direccion2).Row
Hoja.Cells(fila, columna).Resize(, 2).Interior.ColorIndex = 5
End If
End With
End If
End With
Next Hoja
Application.ScreenUpdating = True
End Sub
Respuesta Responder a este mensaje
#5 luka
24/03/2006 - 18:12 | Informe spam
Hola Juan
Gracias por los consejos. Se hace bastante duro para los que no somos
informáticos/programadores sacar el máximo provecho a las herramientas
de trabajo que tenemos.
Javier B.

Juan escribió:
hola javier

a falta de lo que comente Hector Miguel, si el codigo funciona estupendo es
de lo que se trata facilitar las cosas, si quieres un codigo mas eficaz te
recuerdo un comentario que se recomienda mucho en el foro 'no es necesario
seleccionar o activar rangos y hojas para trabajar con ellos'.

despues de revisar todo el codigo te recomiendo activar la declaracion
expresa de variables (Option Explicit), aunque al principio es un poco
pesado al final hace que los codigos sean mas eficaces porque saben que
vaiables esta llamando en cada caso y te recuerdan su definicion y si es un
objeto aparecen desplegables que te indican propiedades y metodos aplicables
a los mismos.
te recomiendo un curso de vba de Eduardo Olaz que a mi me parece estupendo,
(que no te engañe el titulo vba para acces, y dale una oportunidad)

http://www.olaz.net/descargas/acces...tregas.htm

Es recomendable que las variables que has empleado para asignar direcciones
y rangos las inicialices o borres su valor
(c=nothing) para que no pueda arrastrar ningun valor a sitios donde no deban
estar

el empleo de with esta justificado si vas a hacer muchas operaciones dentro
de ese rango o conjunto, si solo vas a hacer una llamada es mejor (en mi
opinion emplearlo directamente)

With Hoja.range("A1:AZ100")
Set c = .Find("RANKING", LookIn:=xlValues)
estas, quiza mejor cambiarlas por
set c=Hoja.range("A1:AZ100").find("RANKING",Lookin:=xlvalues)

y asi en lo sucesivo

un saludo
juan

sin probar el codigo, te marco modificaciones que haria yo en el codigo,
(espero que si detectas un error sepas disculparme)


> Sub buscaprovincia()
Dim Provincia As String, Hoja As Worksheet
Provincia = InputBox("Ponga una provincia", "")
Application.ScreenUpdating = False
For Each Hoja In ThisWorkbook.Worksheets
' a = Hoja.Name
'esta linea no es necesaria accedes a la hoja
'de otra manera
' With Worksheets(a).Range("A1:AZ100")
'mejor la que sigue
With Hoja.range("A1:AZ100")
Set c = .Find("RANKING", LookIn:=xlValues)
If Not c Is Nothing Then
direccion = c.Address
' Worksheets(a).Activate
'revisa el comentario
columna = Hoja.Range(direccion).Column
' With Worksheets(a).Range("A1:B100")
'revisa lo anterior
With Hoja.Range("A1:B100")
Set d = .Find(Provincia, LookIn:=xlValues)
If Not d Is Nothing Then
direccion1 = d.Address
'Ojo a estas dos instrucciones
fila = Hoja.Range(direccion1).Row
Hoja.Cells(fila, 2).Resize(, columna - 3).Interior.ColorIndex =
5
End If
End With
'Otra modificacion el la llamada a la hoja
With Hoja.Cells(1, columna).Resize(100)
Set e = .Find(Provincia, LookIn:=xlValues)
If Not e Is Nothing Then
direccion2 = e.Address
'mas de lo mismo en las dos siguientes
fila = Hoja.Range(direccion2).Row
Hoja.Cells(fila, columna).Resize(, 2).Interior.ColorIndex = 5
End If
End With
End If
End With
Next Hoja
Application.ScreenUpdating = True
End Sub




email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida