copiar varias columnas de una hoja a otra mediante filtro

21/03/2007 - 21:45 por alfredoa4 | Informe spam
Hola a todos,, reciban un cordial,, saludo,, expongo mi gran problema
al cual agradecer mucho su gran ayuda
Tengo en una hoja de excel llamada MyData algo como esto:
las filas 1 a 4 tiene encabezados
A B C D E F . P Q R S T U
V W X Y Z AA AB AC AD ...
5 Bos 77 52 MB 74 52 MB 79 52
MB 75 51 MB 73 51 MB
6 Bos 77 52 MB 74 52 MB 79 52
MB 75 51 MB 73 51 MB
7 Bos 77 52 MB 74 52 MB 79 52
MB 75 51 MB 73 51 MB
8 Cir 66 44 AA 66 44 AA 66
44 AA 66 44 AA 66 44 AA
9 Cir 66 44 AA 66 44 AA 66
44 AA 66 44 AA 66 44 AA
10 Mty 99 88 MX 99 88 MX 99 88
MX 99 88 M X 99 88 MX
11 Mty 99 88 MX 99 88 MX 99 88
MX 99 88 M X 99 88 MX
12 Mty 99 88 MX 99 88 MX 99 88
MX 99 88 M X 99 88 MX

Ahora en otra hoja de excel llamada Resultados tengo un combobox con
un boton,, este boton lo que hace es actualizar los datos del combobox
basados en valores unicos de un rango de la columna F,, el codigo para
este boton es el siguiente:

Private Sub CommandButton1_Click()
Dim everyCell, singleCell As Range
Dim noDuplicates As New Collection
Dim Item

Set everyCell = Sheets("MyData").Range("F5:F201")
On Error Resume Next

For Each singleCell In everyCell
noDuplicates.Add singleCell.Value, CStr(singleCell.Value)
Next singleCell

On Error GoTo 0

ComboBox1.Clear
For Each Item In noDuplicates
ComboBox1.AddItem Item
Next Item
End Sub

Ahora aqui el problema donde pido su amable ayuda,, el valor escogido
en el combobox seria para tomar el filtro de mis datos y copiar los
datos de las columnas y pegarlas en mi hoja resultados,, ahora bien lo
que quiero hacer es que al escoger el valor primero me ponga en un
titulo en este caso "Costos" y lugo me copia los datos de la columna
p,q,r despues en donde terminar estos datos me ponga el titulo "Renta"
y me copia la columna s,t,u, luego donde terminan estos datos me ponga
otro titulo "Local" y me copia la columna v,w,x, luego nuevamente me
ponga otro titulo "Telefono" y me copia la columna y,z,aa y por ultimo
otro titulo "Otros" y me copie las columnas ab, ac, ad

El siguiente ejemplo creo puede ser mas especifico de lo que se quiere

Si yo seleccion en mi combobox el valor Bos, quisiera me devolviera
los siguiente:

a b c
7 Costs
8 77 52 MB
9 77 52 MB
10 77 52 MB
11 Rent
12 74 52 MB
13 74 52 MB
14 74 52 MB
15 Local
16 79 52 MB
17 79 52 MB
18 79 52 MB
19 Telephone
20 75 51 MB
21 75 51 MB
22 75 51 MB
23 Other
24 73 51 MB
25 73 51 MB
26 73 51 MB

Y el mismo proceso si escogiera otro valor del combobox,, alguien por
favor me pudiera ayudar???!!!

Preguntas similare

Leer las respuestas

#6 alfredoa4
23/03/2007 - 16:46 | Informe spam
On 22 mar, 17:34, "Héctor Miguel"
wrote:
hola, alfredo !

>>> b) asigna/define/crea/... un nombre para ese rango [p.e. Listado], seleccionando primero la celda 'AG5', con [+/-] la siguiente formula:
>>> =desref($ag$5,,,coincidir("zzzzz",$ag:$ag)-4,) <= excel completara los rangos con el nombre de la hoja ;)

> ... seguramente algo estoy haciendo mal en estos pasos porque no me funciona...
> Mi excel esta en ingles
> 1) me pongo en la celda 'ag5' de mi hoja llamada 'Mydata'

2) para crear el nombre .. voy a mi barra de menus en la opcion Insert / Name / Define

> Aqui me aparece para poner el nombre en nuestro caso 'Listado' en la parte de abajo de esta pantalla ahi algo que dice 'Refers to:'
> que es donde pongo/copio tu formula propuesta y le doy ok. [...]

si tu excel esta en ingles... cambia la formula con la que defines el nombre:
de: -> =desref($ag$5,,,coincidir("zzzzz",$ag:$ag)-4,)
a: -> =offset($ag$5,,,match("zzzzz",$ag:$ag)-4,)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.



Nuevamente muchisimas gracias,, hasta aqui resuelto el problema..
Pero ahora tengo otro problema,, a la hora de escoger un valor mi
lista de valores que hemos creado (reportes, a2) se ejecuta el codigo,
pero me regresa todos registros que tenemos es decir no esta haciendo
ningun tipo de filtro y ademas esta empezando copiar los registros
desde una columna que no seria la correspondiente,, en ambos casos
tendria que salir algo asi,,
tenemos en nuestra hoja myData en la columna f4 los datos/valores por
los que deberiamos filtrar o sea a la hora de escoger en un valor en
mi hoja 'Resultados("a2")' deberia copiarme solo aquellos registros
que sean ese valor,, por ejemplo:
Si yo seleccion el valor Bos, me deberia copiar/devolver apartir de
p5,q5,r5 debajo el titulo correspondiente y copiar s5,t5,u5,, etc, al
final tendriamos algo asi como lo de abajo, que es lo que
corresponderia solamente a bos. Si escogieramos otro valor se borra
lo que se tiene y se actualizaria la informacion solo por lo uno
selecciono

a b c
7 Costs
8 77 52 MB
9 77 52 MB
10 77 52 MB
11 Rent
12 74 52 MB
13 74 52 MB
14 74 52 MB
15 Local
16 79 52 MB
17 79 52 MB
18 79 52 MB
19 Telephone
20 75 51 MB
21 75 51 MB
22 75 51 MB
23 Other
24 73 51 MB
25 73 51 MB
26 73 51 MB

Ahora bien,, es donde pido tu amable ayuda nuevamente,, que es lo que
se deberia cambiar o si me pudieras poner como quedaria el codigo para
que me lo filtrar solo por el valor dado y que empieze a copiar a
partir de la columna p????
El codigo hace lo que necesitamos solo es ajustar apartir de donde se
debe empezar a copiar y que solo devulva los datos por el filtro(a2)

Nuevamente te agradezco muchisimo tu ayuda,, porfa me podrias
ayudar ???

Saludos!!!
Respuesta Responder a este mensaje
#7 Héctor Miguel
23/03/2007 - 22:58 | Informe spam
hola, alfredo !

... hasta aqui resuelto el problema... ahora tengo otro problema
...a la hora de escoger un valor mi lista de... (reportes, a2) se ejecuta el codigo pero
... regresa todos registros que tenemos es decir no esta haciendo ningun tipo de filtro
... ademas esta empezando copiar los registros desde una columna que no seria la correspondiente [...]
... en... myData en la columna f4 los datos/valores por los que deberiamos filtrar
... a la hora de escoger en un valor en mi hoja 'Resultados("a2")' deberia copiarme solo aquellos registros
... Si yo seleccion el valor Bos, me deberia copiar/devolver apartir de p5,q5,r5 debajo el titulo correspondiente [...]
... Si escogieramos otro valor se borra lo que se tiene y se actualizaria la informacion solo por lo uno selecciono [...]
... que es lo que se deberia cambiar o... como quedaria el codigo > para que me lo filtrar solo por el valor dado
y que empieze a copiar a partir de la columna p????
El codigo hace lo que necesitamos solo es ajustar apartir de donde se debe empezar a copiar y que solo devulva los datos por el filtro (a2)



1) [segun yo] la propuesta del primer mensaje 'hace' [+/- exactamente] lo que solicitas... 'tal-cual' :))
el unico 'detalle' era que tu excel es en ingles... y la formula propuesta era en castellano :-((

2) [recapitulando]... lo siguiente es lo que debiera existir en cada hoja [MyData y Resultados]...

[MyData]
a) en la hoja de calculo...
- 'libre' la columna 'AG'
- un nombre definido [funciones en ingles] con la formula: -> =offset($ag$5,,,match("zzzzz",$ag:$ag)-4,)
b) en el modulo de codigo de 'esa' hoja:
Private Sub Worksheet_Deactivate()
Range(Range("f4"), Range("f65536").End(xlUp)).AdvancedFilter _
Action:=xlFilterCopy, CopyToRange:=Range("ag4"), Unique:=True
Range("ag4").Sort Key1:=Range("ag5"), Order1:=xlAscending, Header:=xlYes
End Sub

[Resultados]
a) una celda 'validada' [A2 ???] por lista usando como origen el nombre definido en el punto a anterior... [Listado ???]
b) en el modulo de codigo de 'esa' hoja:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Col As Byte: Application.ScreenUpdating = False
If Target.Address <> "$A$2" Then Exit Sub Else Range("a7:c1000").ClearContents
With Worksheets("mydata"): If .AutoFilterMode Then .Cells.AutoFilter
.Range("f4").AutoFilter Field:=1, Criteria1:=Range("a2")
For Col = 10 To 22 Step 3
Range("a65536").End(xlUp).Offset(1) = _
Application.Choose(((Col - 1) / 3) - 2, "Costs", "Rent", "Local", "Phone", "Others")
With .AutoFilter.Range
With .Offset(1, Col).Resize(.Rows.Count - 1, 3)
.Copy Range("a65536").End(xlUp).Offset(1)
End With: End With: Next: .Range("f4").AutoFilter
End With: x = UsedRange.Rows.Count
End Sub

[resultados de lo anterior ?]...
[MyData] se filtra por la columna 'F' [F4] y se obtienen los 'unicos' a partir de la celda 'AG5' <= por codigo
[Resultados] 'comanda' el filtro por la celda 'validada' [A2 ???]
-> 'partiendo' de MyData!F4... se desplaza 10 columnas [llegando a iniciar en 'P'] en grupos de 3 columnas
el resto... es historia :))

comentas que de lo anterior no esta donde debe estar o no esta fucionando ?
saludos,
hector.
Respuesta Responder a este mensaje
#8 alfredoa4
26/03/2007 - 18:57 | Informe spam
On 23 mar, 15:58, "Héctor Miguel"
wrote:
hola, alfredo !

> ... hasta aqui resuelto el problema... ahora tengo otro problema
> ...a la hora de escoger un valor mi lista de... (reportes, a2) se ejecuta el codigo pero
> ... regresa todos registros que tenemos es decir no esta haciendo ningun tipo de filtro
> ... ademas esta empezando copiar los registros desde una columna que no seria la correspondiente [...]
> ... en... myData en la columna f4 los datos/valores por los que deberiamos filtrar
> ... a la hora de escoger en un valor en mi hoja 'Resultados("a2")' deberia copiarme solo aquellos registros
> ... Si yo seleccion el valor Bos, me deberia copiar/devolver apartir de p5,q5,r5 debajo el titulo correspondiente [...]
> ... Si escogieramos otro valor se borra lo que se tiene y se actualizaria la informacion solo por lo uno selecciono [...]
> ... que es lo que se deberia cambiar o... como quedaria el codigo > para que me lo filtrar solo por el valor dado
> y que empieze a copiar a partir de la columna p????
> El codigo hace lo que necesitamos solo es ajustar apartir de donde se debe empezar a copiar y que solo devulva los datos por el filtro (a2)

1) [segun yo] la propuesta del primer mensaje 'hace' [+/- exactamente] lo que solicitas... 'tal-cual' :))
el unico 'detalle' era que tu excel es en ingles... y la formula propuesta era en castellano :-((

2) [recapitulando]... lo siguiente es lo que debiera existir en cada hoja [MyData y Resultados]...

[MyData]
> a) en la hoja de calculo...
- 'libre' la columna 'AG'
- un nombre definido [funciones en ingles] con la formula: -> =offset($ag$5,,,match("zzzzz",$ag:$ag)-4,)
> b) en el modulo de codigo de 'esa' hoja:
Private Sub Worksheet_Deactivate()
Range(Range("f4"), Range("f65536").End(xlUp)).AdvancedFilter _
Action:=xlFilterCopy, CopyToRange:=Range("ag4"), Unique:=True
Range("ag4").Sort Key1:=Range("ag5"), Order1:=xlAscending, Header:=xlYes
End Sub

[Resultados]
> a) una celda 'validada' [A2 ???] por lista usando como origen el nombre definido en el punto a anterior... [Listado ???]
> b) en el modulo de codigo de 'esa' hoja:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Col As Byte: Application.ScreenUpdating = False
If Target.Address <> "$A$2" Then Exit Sub Else Range("a7:c1000").ClearContents
With Worksheets("mydata"): If .AutoFilterMode Then .Cells.AutoFilter
.Range("f4").AutoFilter Field:=1, Criteria1:=Range("a2")
For Col = 10 To 22 Step 3
Range("a65536").End(xlUp).Offset(1) = _
Application.Choose(((Col - 1) / 3) - 2, "Costs", "Rent", "Local", "Phone", "Others")
With .AutoFilter.Range
With .Offset(1, Col).Resize(.Rows.Count - 1, 3)
.Copy Range("a65536").End(xlUp).Offset(1)
End With: End With: Next: .Range("f4").AutoFilter
End With: x = UsedRange.Rows.Count
End Sub

[resultados de lo anterior ?]...
[MyData] se filtra por la columna 'F' [F4] y se obtienen los 'unicos' a partir de la celda 'AG5' <= por codigo
[Resultados] 'comanda' el filtro por la celda 'validada' [A2 ???]
-> 'partiendo' de MyData!F4... se desplaza 10 columnas [llegando a iniciar en 'P'] en grupos de 3 columnas
el resto... es historia :))

comentas que de lo anterior no esta donde debe estar o no esta fucionando ?
saludos,
hector.



Hola Hector,, te agradezco tu amable paciencia,, pero en estos dias he
estado intentando una y mil veces tratar de recrear todos y cada uno
de los pasos que estan aqui,, pero no por nada lo echo andar,, de mil
formas he intentado pero no lo logro,,, una u otra vez me da el mismo
problema..
A la hora de escoger un valor de la celda de lista en la hoja
Resultados corre el codigo pero sin aplicar ningun tipo de filtro y
empezando a copiar desde otra columna que no es la indicado,,
Por favor me podrias comentar que pudiera estar mal,, sera mi
excel,,,???? algo que no este tomando en cuenta a parte de todos estos
pasos??? ,, crees que me podrias enviar un miniejemplito a mi
correo???

Nuevamente te agradezco tu amable ayuda y atencion,,, Saludos!!!
Respuesta Responder a este mensaje
#9 alfredoa4
26/03/2007 - 23:39 | Informe spam
On 26 mar, 10:57, wrote:
On 23 mar, 15:58, "Héctor Miguel"
wrote:





> hola, alfredo !

> > ... hasta aqui resuelto el problema... ahora tengo otro problema
> > ...a la hora de escoger un valor mi lista de... (reportes, a2) se ejecuta el codigo pero
> > ... regresa todos registros que tenemos es decir no esta haciendo ningun tipo de filtro
> > ... ademas esta empezando copiar los registros desde una columna que no seria la correspondiente [...]
> > ... en... myData en la columna f4 los datos/valores por los que deberiamos filtrar
> > ... a la hora de escoger en un valor en mi hoja 'Resultados("a2")' deberia copiarme solo aquellos registros
> > ... Si yo seleccion el valor Bos, me deberia copiar/devolver apartir de p5,q5,r5 debajo el titulo correspondiente [...]
> > ... Si escogieramos otro valor se borra lo que se tiene y se actualizaria la informacion solo por lo uno selecciono [...]
> > ... que es lo que se deberia cambiar o... como quedaria el codigo > para que me lo filtrar solo por el valor dado
> > y que empieze a copiar a partir de la columna p????
> > El codigo hace lo que necesitamos solo es ajustar apartir de donde se debe empezar a copiar y que solo devulva los datos por el filtro (a2)

> 1) [segun yo] la propuesta del primer mensaje 'hace' [+/- exactamente] lo que solicitas... 'tal-cual' :))
> el unico 'detalle' era que tu excel es en ingles... y la formula propuesta era en castellano :-((

> 2) [recapitulando]... lo siguiente es lo que debiera existir en cada hoja [MyData y Resultados]...

> [MyData]
> > > a) en la hoja de calculo...
> - 'libre' la columna 'AG'
> - un nombre definido [funciones en ingles] con la formula: -> =offset($ag$5,,,match("zzzzz",$ag:$ag)-4,)
> > > b) en el modulo de codigo de 'esa' hoja:
> Private Sub Worksheet_Deactivate()
> Range(Range("f4"), Range("f65536").End(xlUp)).AdvancedFilter _
> Action:=xlFilterCopy, CopyToRange:=Range("ag4"), Unique:=True
> Range("ag4").Sort Key1:=Range("ag5"), Order1:=xlAscending, Header:=xlYes
> End Sub

> [Resultados]
> > > a) una celda 'validada' [A2 ???] por lista usando como origen el nombre definido en el punto a anterior... [Listado ???]
> > > b) en el modulo de codigo de 'esa' hoja:
> Private Sub Worksheet_Change(ByVal Target As Range)
> Dim Col As Byte: Application.ScreenUpdating = False
> If Target.Address <> "$A$2" Then Exit Sub Else Range("a7:c1000").ClearContents
> With Worksheets("mydata"): If .AutoFilterMode Then .Cells.AutoFilter
> .Range("f4").AutoFilter Field:=1, Criteria1:=Range("a2")
> For Col = 10 To 22 Step 3
> Range("a65536").End(xlUp).Offset(1) = _
> Application.Choose(((Col - 1) / 3) - 2, "Costs", "Rent", "Local", "Phone", "Others")
> With .AutoFilter.Range
> With .Offset(1, Col).Resize(.Rows.Count - 1, 3)
> .Copy Range("a65536").End(xlUp).Offset(1)
> End With: End With: Next: .Range("f4").AutoFilter
> End With: x = UsedRange.Rows.Count
> End Sub

> [resultados de lo anterior ?]...
> [MyData] se filtra por la columna 'F' [F4] y se obtienen los 'unicos' a partir de la celda 'AG5' <= por codigo
> [Resultados] 'comanda' el filtro por la celda 'validada' [A2 ???]
> -> 'partiendo' de MyData!F4... se desplaza 10 columnas [llegando a iniciar en 'P'] en grupos de 3 columnas
> el resto... es historia :))

> comentas que de lo anterior no esta donde debe estar o no esta fucionando ?
> saludos,
> hector.

Hola Hector,, te agradezco tu amable paciencia,, pero en estos dias he
estado intentando una y mil veces tratar de recrear todos y cada uno
de los pasos que estan aqui,, pero no por nada lo echo andar,, de mil
formas he intentado pero no lo logro,,, una u otra vez me da el mismo
problema..
A la hora de escoger un valor de la celda de lista en la hoja
Resultados corre el codigo pero sin aplicar ningun tipo de filtro y
empezando a copiar desde otra columna que no es la indicado,,
Por favor me podrias comentar que pudiera estar mal,, sera mi
excel,,,???? algo que no este tomando en cuenta a parte de todos estos
pasos??? ,, crees que me podrias enviar un miniejemplito a mi
correo???

Nuevamente te agradezco tu amable ayuda y atencion,,, Saludos!!!- Ocultar texto de la cita -

- Mostrar texto de la cita -



Hola nuevamente,,, una pregunta dentro de este codigo que pusiste

Private Sub Worksheet_Change(ByVal Target As Range)
> Dim Col As Byte: Application.ScreenUpdating = False
> If Target.Address <> "$A$2" Then Exit Sub Else Range("a7:c1000").ClearContents
> With Worksheets("mydata"): If .AutoFilterMode Then .Cells.AutoFilter
> .Range("f4").AutoFilter Field:=1, Criteria1:=Range("a2")
> For Col = 10 To 22 Step 3
> Range("a65536").End(xlUp).Offset(1) = _
> Application.Choose(((Col - 1) / 3) - 2, "Costs", "Rent", "Local", "Phone", "Others")
> With .AutoFilter.Range
> With .Offset(1, Col).Resize(.Rows.Count - 1, 3)
> .Copy Range("a65536").End(xlUp).Offset(1)
> End With: End With: Next: .Range("f4").AutoFilter
> End With: x = UsedRange.Rows.Count
> End Sub



En donde figuran estos datos

Range("a65536").End(xlUp).Offset(1)...
.Copy
Range("a65536").End(xlUp).Offset(1)...
que pasa si se modifica el rango "a65536" a algun otro por decir algo
a un rango "a201" o "a501",, etc..????

Mi pregunta se refiere a que al modificar este dato a la hora de
correr la casilla validada me devuelve completamente otro tipo de
datos,, es como si estuviera moviendo/quitando Datos...??? y la ultima
este codigo tuviera algo que ver si en un momento dado yo moviera la
referencia de la casilla del codigo??? es decir tu me comentabas que
en la hoja "mydata" verificara que la celda ag5 estuviera vacia y aqui
correr las instrucciones,, tendria algo que ver si lo muevo a la celda
ap5???

Nuevamente mil gracias,, Saludos!!!
Respuesta Responder a este mensaje
#10 Héctor Miguel
27/03/2007 - 06:41 | Informe spam
hola, alfredo !

... una pregunta dentro de este codigo que pusiste
Private Sub Worksheet_Change(ByVal Target As Range)
> Dim Col As Byte: Application.ScreenUpdating = False
> If Target.Address <> "$A$2" Then Exit Sub Else Range("a7:c1000").ClearContents
> With Worksheets("mydata"): If .AutoFilterMode Then .Cells.AutoFilter
> .Range("f4").AutoFilter Field:=1, Criteria1:=Range("a2")
> For Col = 10 To 22 Step 3
> Range("a65536").End(xlUp).Offset(1) = _
> Application.Choose(((Col - 1) / 3) - 2, "Costs", "Rent", "Local", "Phone", "Others")
> With .AutoFilter.Range
> With .Offset(1, Col).Resize(.Rows.Count - 1, 3)
> .Copy Range("a65536").End(xlUp).Offset(1)
> End With: End With: Next: .Range("f4").AutoFilter
> End With: x = UsedRange.Rows.Count
> End Sub

En donde figuran estos datos
Range("a65536").End(xlUp).Offset(1)...
.Copy
Range("a65536").End(xlUp).Offset(1)...
que pasa si se modifica el rango "a65536" a algun otro por decir algo a un rango "a201" o "a501",, etc..????
... al modificar este dato a la hora de correr la casilla validada me devuelve completamente otro tipo de datos [...]



==> [teoricamente ?]... nada ! [asumiendo que a partir de la celda "a201" O "a501" no existen mas datos] -?-
[por si crees que hacer referencia a la fila 65536 pudiera ser mas 'tardado']...
se trata solo de tomar como punto de partida la celda mas alejada [conocida o supuesta] SIN datos

este codigo tuviera algo que ver si en un momento dado yo moviera la referencia de la casilla del codigo???
es decir tu me comentabas que en la hoja "mydata" verificara que la celda ag5 estuviera vacia y aqui correr las instrucciones
tendria algo que ver si lo muevo a la celda ap5???



[definitivamente]... SI !!!
si los supuestos con los que se preparan las propuestas son diferentes de la 'realidad' [asunciones a falta de los detalles verdaderos]...
le toca a quien expuso la consulta SIN los detalles apropiados... componer/enmendar/corregir/... donde corresponda :-((

si en la realidad no es posible usar la columna 'AG'... es necesario modificar las referencias a dicha columna 'sugerida/supuesta/..'
p.e. a: ...

Private Sub Worksheet_Deactivate()
Range(Range("f4"), Range("f65536").End(xlUp)).AdvancedFilter _
Action:=xlFilterCopy, CopyToRange:=Range("ap4"), Unique:=True
Range("ap4").Sort Key1:=Range("ap5"), Order1:=xlAscending, Header:=xlYes
End Sub

Y ADEMAS... modificar la referencia en el nombre que se define para el listado de 'unicos' [+/- a lo siguiente]
-> =offset($ap$5,,,match("zzzzz",$ap:$ap)-4,)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida