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

#11 alfredoa4
27/03/2007 - 17:18 | Informe spam
On 26 mar, 22:41, "Héctor Miguel"
wrote:
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.- Ocultar texto de la cita -

- Mostrar texto de la cita -



Muchas gracias Hector por tu paciencia y por la breve explicacion,,
pero sigo intentano echar andar el codiguito,, sin aun poderlo
conseguir,, alguna idea de cual Žpudiera ser el error??? abusando de
tu paciencia crees posible me pudieras enviar esto por correo en breve
ejemplo???

saludos!!!!
Respuesta Responder a este mensaje
#12 alfredoa4
27/03/2007 - 17:24 | Informe spam
On 26 mar, 22:41, "Héctor Miguel"
wrote:
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.- Ocultar texto de la cita -

- Mostrar texto de la cita -



Perdon un comentario ,,, al principio del hilo comentabas que con esto
eliminabas el uso del combobox al hacer uso de una celda validada y
todo lo expuesto =),, ahora una pregunta si se usara un combobox en
lugar de la celda validada,, como quedaria el codigo????
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida