Menudo lio.

22/08/2006 - 15:19 por Masters | Informe spam
Me gustaria saber como se llama un proceso dentro de otro o algo asi.
O sea:

1º Ejecuto una macro que coge el texto o número de la celda B1.
2º Y busca por toda la fila A1 el valor que coincida con B1.
3º Una vez hecho este proceso vuelve al 1º y continua con B2.

Es para buscar los valores para hacer la macro.

Preguntas similare

Leer las respuestas

#1 Masters
22/08/2006 - 16:32 | Informe spam
He montado una macro, pero me falla.
Lo que hace es:
Tengo 2 hojas con lo mismo.Pero en la hoja 2 esta continuemente
modificando.
La macro busca el contenido de una celda de toda una fila en la hoja 2
y selecciona toda la columna.
Luego va a la hoja 1 y busca el mismo valor en toda una fila y lo pega.

Sub Inserta()
Sheets("Hoja2").Select
Dim Celda As Range
For Each Celda In Range("A:A")
If Celda = "" Then Exit Sub
Celda.EntireRow.Select
Selection.Copy
Sheets("Hoja1").Select
Dim x As Range, i As Integer
Set x = Celda
Do Until x.Offset(i, 0).Text = Celda.Text
i = i + 1
Loop
x.Offset(i, 0).Activate < El fallo esta ahi.
ActiveSheet.Paste
Next
End Sub
Respuesta Responder a este mensaje
#2 Juan M
22/08/2006 - 16:40 | Informe spam
hola

"Masters" escribió el mensaje
Me gustaria saber como se llama un proceso dentro de otro o algo asi.
1º Ejecuto una macro que coge el texto o número de la celda B1.
2º Y busca por toda la fila A1 el valor que coincida con B1.
3º Una vez hecho este proceso vuelve al 1º y continua con B2.
Es para buscar los valores para hacer la macro.




se me ocuren un par de dudas:
una vez encontrado que debe hacer el codigo?
que ocurre si hay mas de una coincidencia?, o vale al encontrar la primera?
que tiene que ver el ejecutar un proceso dentro de otro?

De todas formas si buscas un valor dentro de un rango la macro es mas o
menos algo asi:

un saludo
juan

Inicio Codigo
Sub test()
Dim celda As Range
Dim c As Range

For Each celda In Range("B1:B100")
Set c = Range("A1:A1000").Find(celda.Value, _
LookIn:=xlValues, lookat:=xlWhole)
If c Is Nothing Then
MsgBox celda.Value & " NO esta en la lista"
Else
MsgBox celda.Value & " SI esta en la lista"
End If
Set c = Nothing
Next celda

End Sub
fin codigo
Respuesta Responder a este mensaje
#3 Masters
22/08/2006 - 17:05 | Informe spam
Cuando encuentra el codigo, copiado de la hoja 2 lo pega en el codigo
encontrado en la hoja 1.
No se repiten los codigos , hay un único código por cada fila.
Lo malo es un codigo nuevo en la hoja 2 que no lo encontrara en la hoja
1.
Pero lo que me interesa ahora es coger un codigo de la hoja 2 y
localizarlo en la hoja 1.
Para pegar.

Y no puedo establecer un rango, ira a lo largo de toda la fila del 1 al
infinito.


hola

>"Masters" escribió el mensaje
>Me gustaria saber como se llama un proceso dentro de otro o algo asi.
>1º Ejecuto una macro que coge el texto o número de la celda B1.
>2º Y busca por toda la fila A1 el valor que coincida con B1.
>3º Una vez hecho este proceso vuelve al 1º y continua con B2.
>Es para buscar los valores para hacer la macro.


se me ocuren un par de dudas:
una vez encontrado que debe hacer el codigo?
que ocurre si hay mas de una coincidencia?, o vale al encontrar la primera?
que tiene que ver el ejecutar un proceso dentro de otro?

De todas formas si buscas un valor dentro de un rango la macro es mas o
menos algo asi:

un saludo
juan

Inicio Codigo
Sub test()
Dim celda As Range
Dim c As Range

For Each celda In Range("B1:B100")
Set c = Range("A1:A1000").Find(celda.Value, _
LookIn:=xlValues, lookat:=xlWhole)
If c Is Nothing Then
MsgBox celda.Value & " NO esta en la lista"
Else
MsgBox celda.Value & " SI esta en la lista"
End If
Set c = Nothing
Next celda

End Sub
fin codigo
Respuesta Responder a este mensaje
#4 Juan M
22/08/2006 - 18:20 | Informe spam
Hola

el codigo que has posteado falla por que no tienes seleccionada la hoja
donde esta x
mas o menos lo que has hecho:

seleccionas la hoja 2
asignas x al valor de celda de la hoja 2
seleccionas la hoja1
buscas la coincidencia en la hoja 1
y aqui esta tu error, intentas activar la celda x dela hoja 2 que no esta
activa

He revisado el codigo y ahora creo que hace lo que qieres
mira a ver si esto te vale y comenta si falla en algo o hay algo que no hace
como quieres
Revisa los comentarios que hay dentro del codigo

un saludo
juan

inicio codigo
Sub test()
Dim Origen As Range
Dim Destino As Range
Dim celda As Range
Dim c As Range

'establece los rangos iniciales
With Worksheets("Hoja2")
Set Origen = .Range(.Range("B1"), .Range("B" & .Rows.Count).End(xlUp))
End With
With Worksheets("Hoja1")
Set Destino = .Range(.Range("A1"), .Range("A" & .Rows.Count).End(xlUp))
End With
'recorre todas las celdas del rango
For Each celda In Origen
'busca las coincidencias
Set c = Destino.Find(celda.Value, LookIn:=xlValues, lookat:=xlWhole)
If c Is Nothing Then
'no se encuentra en la lista y la añade
MsgBox celda.Value & " no se encuentra en la lista"
With Worksheets("Hoja1")
.Range("A" & .Rows.Count).End(xlUp).Offset(1, 0) = celda.Value
Set Destino = Destino.Resize(Destino.Rows.Count + 1, 1)
End With
Else
'se encuentra en la lista y pega toda la fila donde
'ha encontrado el valor
celda.Resize(1, 255).Copy Destination:=c
MsgBox celda.Value & " Esta en la lista"
End If
Set c = Nothing
Next celda
Set Origen = Nothing
Set Destino = Nothing
End Sub
Fin codigo

"Masters" escribió en el mensaje
>news:
Cuando encuentra el codigo, copiado de la hoja 2 lo pega en el codigo
encontrado en la hoja 1.
No se repiten los codigos , hay un único código por cada fila.
Lo malo es un codigo nuevo en la hoja 2 que no lo encontrara en la hoja
1.
Pero lo que me interesa ahora es coger un codigo de la hoja 2 y
localizarlo en la hoja 1.
Para pegar.
Y no puedo establecer un rango, ira a lo largo de toda la fila del 1 al
infinito.
Respuesta Responder a este mensaje
#5 Masters
22/08/2006 - 18:48 | Informe spam
He mirado y lo he ejecutado.
Y segun hemos estabo hablando funciona bien.
Pero los resultados no son optimos.

Durante la tarde he estado haciendolo, debe ser una secuencia muy
simple, y tu secuencia es nueva para mi y me he perdido.
Me refiero a los valores que has puesto.

Si en la hoja 1 pongo los valores del 1 al 200000.
Cuando ejecuto tu secuencia añade o suprime segun la base de origen.

Todo ok.

Ahora estoy buscando que en vez de insertar toda una columna, inserte
de la B a la P.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida