Una de expertos

17/04/2007 - 00:13 por alfredoa4 | Informe spam
Hola que tal buenas tardes, reciban un cordial saludo!!

Hace unas semanas Hecto me hizo el favor de darme estos pasos para
poder copiar varias columnas en base a un filtro,, estos paso que me
hizo favor de darme copia columnas de 3 en 3 una de bajo de otra, en
base a un filtro y pone unos titulos entre ellos.

Ahora bien por lo que recurre nuevamente a ustedes es siguiendo con la
misma idea

¿como copiar de 3 columnas en 3 con su respectivo titulo una debajo de
la otra (dentro de este mismo codigo)pero sin tomar en cuenta el
filtro?

Tratando de ser un poco mas explicito necesito copiar al final de lo
que ya hizo el codigo las columna AH a la columna AM apartir de la
fila 5 (las primeras 4 columnas continen encabezados) igual con sus
respectivos titulos pero sin tomar en cuenta el filtro,, un breve
ejemplo:

F G H I J K J... AH AI AJ AK AL AM
5 BOS 0 1 2 3 4 5... 6 7 8 9 10 11
6 BOS 0 1 2 3 4 5... 6 7 8 9 10 11
7 BOS 0 1 2 3 4 5... 6 7 8 9 10 11
8 GUA A C D E F G... K L M N O P
9 GUA A C D E F G... K L M N O P
10 Q R S T U V
11 Q R S T U V
12 Q R S T U V
13 Q R S T U V
14 Q R S T U V
15 Q R S T U V


Lo que deberia salir seria lo siguiente:

Titulo1
0 1 2
0 1 2
0 1 2
Titulo 2
3 4 5
3 4 5
3 4 5
...
Titulo 6
6 7 8
6 7 8
6 7 8
K L M
K L M
Q R S
Q R S
Q R S
Q R S
Q R S
Q R S
Titulo 7
9 10 11
9 10 11
9 10 11
N O P
N O P
T U V
T U V
T U V
T U V
T U V
T U V

como se daran cuenta los datos de titulo 1, titulo2 hasta titulo 5
(que es donde llegan) copia unicamente los datos en base al filtro
seleccionado ,, en este caso Bos y los titulos 6 y 7 copia todo lo
que alla en sus respectivas columnas sin tomar en cuenta el filtro,,

Ojala me haya explicado,, por favor alguien me pudiera ayudar a
terminar el codigito???

De antemano muchas gracias,,, Saludos!!!!



-> puedes evitar la necesidad del combobox [como objeto incrustado] y
su codigo de 'relleno' [entre otras cosas] si...
a) asegurate que en tu hoja 'mydata' tienes libre la columna 'AG' para
extraer por filtros avanzados los 'unicos' de la columna 'F'
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 ;)
c) usa [menu] datos / validacion / lista / formula y estableces
como origen de la lista 'el nombre' -> =listado
[p.e. en la celda 'A2' de la hoja 'reportes'] <= es la que uso en
el codigo de ejemplo
-> sustituye al combo/objeto y el evento '_change' de esa hoja
realiza las acciones que solicitas :))
OJO: se requiere excel 2000 en adelante para que se dispare el
evento en listas de validacion que se toman de rangos <= OJO
d) asegurate que la celda 'A6' en tu hoja de reportes NO esta
'vacia' [para que el codigo se pueda 'mover' de ahi en
adelante] :))
copia/pega las siguientes lineas en el modulo de codigo de cada hoja
y...
si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
[MyData]
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
[Reportes]
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("PRORRATEO"): 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


1) los filtros avanzados los 'maneja' el codigo [tu solo asegurate que
la columna 'AG' de la hoja 'mydata' esta libre] ;)
2) la creacion del nombre [p.e. Listado] es en la misma hoja 'mydata'
seleccionando primero la celda 'AG5' [se llena por codigo]
a) creas el nombre 'estando parado' en la celda 'AG5' de la hoja
'mydata' con la formula propuesta...
b) vas a la hoja de reportes y en la celda 'A2' aplicas reglas de
validacion por lista usando el nombre que creaste en el paso anterior

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
18/04/2007 - 05:50 | Informe spam
hola, alfredo !

como copiar de 3 columnas en 3 con su respectivo titulo una debajo de la otra
(dentro de este mismo codigo) pero sin tomar en cuenta el filtro?
... necesito copiar al final de lo que ya hizo el codigo las columna AH a la columna AM apartir de la fila 5
(las primeras 4 columnas continen encabezados) igual con sus respectivos titulos pero sin tomar en cuenta el filtro [...]



1) en el codigo que estas usando hay dos lineas donde podrias intercalar las instrucciones que necesitas, las lineas son:

End With: End With: Next: .Range("f4").AutoFilter
End With: x = UsedRange.Rows.Count

2) en el medio de dichas lineas... agrega las siguientes instrucciones:

Range("a65536").End(xlUp).Offset(1) = "Titulo6"
.Range(.Range("ah5"), .Range("ah65536").End(xlUP)).Resize(, 3).Copy _
Range("a65536").End(xlUp).Offset(1)
Range("a65536").End(xlUp).Offset(1) = "Titulo7"
.Range(.Range("ak5"), .Range("ak65536").End(xlUP)).Resize(, 3).Copy _
Range("a65536").End(xlUp).Offset(1)

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

__ resto de la consulta __
F G H I J K J... AH AI AJ AK AL AM
5 BOS 0 1 2 3 4 5... 6 7 8 9 10 11
6 BOS 0 1 2 3 4 5... 6 7 8 9 10 11
7 BOS 0 1 2 3 4 5... 6 7 8 9 10 11
8 GUA A C D E F G... K L M N O P
9 GUA A C D E F G... K L M N O P
10 Q R S T U V
11 Q R S T U V
12 Q R S T U V
13 Q R S T U V
14 Q R S T U V
15 Q R S T U V


Lo que deberia salir seria lo siguiente:
Titulo1
0 1 2
0 1 2
0 1 2
Titulo 2
3 4 5
3 4 5
3 4 5
...
Titulo 6
6 7 8
6 7 8
6 7 8
K L M
K L M
Q R S
Q R S
Q R S
Q R S
Q R S
Q R S
Titulo 7
9 10 11
9 10 11
9 10 11
N O P
N O P
T U V
T U V
T U V
T U V
T U V
T U V

como se daran cuenta los datos de titulo 1, titulo2 hasta titulo 5 (que es donde llegan)
copia unicamente los datos en base al filtro seleccionado en este caso Bos
y los titulos 6 y 7 copia todo lo que alla en sus respectivas columnas sin tomar en cuenta el filtro
Respuesta Responder a este mensaje
#2 alfredoa4
18/04/2007 - 16:31 | Informe spam
On 17 abr, 22:50, "Héctor Miguel"
wrote:
hola, alfredo !

> como copiar de 3 columnas en 3 con su respectivo titulo una debajo de la otra
> (dentro de este mismo codigo) pero sin tomar en cuenta el filtro?
> ... necesito copiar al final de lo que ya hizo el codigo las columna AH a la columna AM apartir de la fila 5
> (las primeras 4 columnas continen encabezados) igual con sus respectivos titulos pero sin tomar en cuenta el filtro [...]

1) en el codigo que estas usando hay dos lineas donde podrias intercalar las instrucciones que necesitas, las lineas son:

End With: End With: Next: .Range("f4").AutoFilter
End With: x = UsedRange.Rows.Count

2) en el medio de dichas lineas... agrega las siguientes instrucciones:

Range("a65536").End(xlUp).Offset(1) = "Titulo6"
.Range(.Range("ah5"), .Range("ah65536").End(xlUP)).Resize(, 3).Copy _
Range("a65536").End(xlUp).Offset(1)
Range("a65536").End(xlUp).Offset(1) = "Titulo7"
.Range(.Range("ak5"), .Range("ak65536").End(xlUP)).Resize(, 3).Copy _
Range("a65536").End(xlUp).Offset(1)

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

__ resto de la consulta __
F G H I J K J... AH AI AJ AK AL AM
5 BOS 0 1 2 3 4 5... 6 7 8 9 10 11
6 BOS 0 1 2 3 4 5... 6 7 8 9 10 11
7 BOS 0 1 2 3 4 5... 6 7 8 9 10 11
8 GUA A C D E F G... K L M N O P
9 GUA A C D E F G... K L M N O P
10 Q R S T U V
11 Q R S T U V
12 Q R S T U V
13 Q R S T U V
14 Q R S T U V
15 Q R S T U V


Lo que deberia salir seria lo siguiente:
Titulo1
0 1 2
0 1 2
0 1 2
Titulo 2
3 4 5
3 4 5
3 4 5
...
Titulo 6
6 7 8
6 7 8
6 7 8
K L M
K L M
Q R S
Q R S
Q R S
Q R S
Q R S
Q R S
Titulo 7
9 10 11
9 10 11
9 10 11
N O P
N O P
T U V
T U V
T U V
T U V
T U V
T U V

como se daran cuenta los datos de titulo 1, titulo2 hasta titulo 5 (que es donde llegan)
copia unicamente los datos en base al filtro seleccionado en este caso Bos
y los titulos 6 y 7 copia todo lo que alla en sus respectivas columnas sin tomar en cuenta el filtro





Hola Hector,, nuevamente muchisimas gracias,, agradezco mucho tu
ayuda,, las lineas funcionan perfectamente,,
solo una ultima cosa,, algunas de estas columnas tienen una formula,,
como quedarian las lineas para copiarlos como valores???

Saludos!!!
Respuesta Responder a este mensaje
#3 alfredoa4
18/04/2007 - 16:37 | Informe spam
On 17 abr, 22:50, "Héctor Miguel"
wrote:
hola, alfredo !

> como copiar de 3 columnas en 3 con su respectivo titulo una debajo de la otra
> (dentro de este mismo codigo) pero sin tomar en cuenta el filtro?
> ... necesito copiar al final de lo que ya hizo el codigo las columna AH a la columna AM apartir de la fila 5
> (las primeras 4 columnas continen encabezados) igual con sus respectivos titulos pero sin tomar en cuenta el filtro [...]

1) en el codigo que estas usando hay dos lineas donde podrias intercalar las instrucciones que necesitas, las lineas son:

End With: End With: Next: .Range("f4").AutoFilter
End With: x = UsedRange.Rows.Count

2) en el medio de dichas lineas... agrega las siguientes instrucciones:

Range("a65536").End(xlUp).Offset(1) = "Titulo6"
.Range(.Range("ah5"), .Range("ah65536").End(xlUP)).Resize(, 3).Copy _
Range("a65536").End(xlUp).Offset(1)
Range("a65536").End(xlUp).Offset(1) = "Titulo7"
.Range(.Range("ak5"), .Range("ak65536").End(xlUP)).Resize(, 3).Copy _
Range("a65536").End(xlUp).Offset(1)

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

__ resto de la consulta __
F G H I J K J... AH AI AJ AK AL AM
5 BOS 0 1 2 3 4 5... 6 7 8 9 10 11
6 BOS 0 1 2 3 4 5... 6 7 8 9 10 11
7 BOS 0 1 2 3 4 5... 6 7 8 9 10 11
8 GUA A C D E F G... K L M N O P
9 GUA A C D E F G... K L M N O P
10 Q R S T U V
11 Q R S T U V
12 Q R S T U V
13 Q R S T U V
14 Q R S T U V
15 Q R S T U V


Lo que deberia salir seria lo siguiente:
Titulo1
0 1 2
0 1 2
0 1 2
Titulo 2
3 4 5
3 4 5
3 4 5
...
Titulo 6
6 7 8
6 7 8
6 7 8
K L M
K L M
Q R S
Q R S
Q R S
Q R S
Q R S
Q R S
Titulo 7
9 10 11
9 10 11
9 10 11
N O P
N O P
T U V
T U V
T U V
T U V
T U V
T U V

como se daran cuenta los datos de titulo 1, titulo2 hasta titulo 5 (que es donde llegan)
copia unicamente los datos en base al filtro seleccionado en este caso Bos
y los titulos 6 y 7 copia todo lo que alla en sus respectivas columnas sin tomar en cuenta el filtro





Hola Hector,, nuevamente muchas gracias,, las lineas han funcionado
perfectamente,, solo un detalle ver si me puedes ayudar,, como
quedarian estas lineas para que los copie/pegue como valores?????

Mil gracias,, Saludos!!!!
Respuesta Responder a este mensaje
#4 alfredoa4
18/04/2007 - 16:43 | Informe spam
On 16 abr, 17:13, wrote:
Hola que tal buenas tardes, reciban un cordial saludo!!

Hace unas semanas Hecto me hizo el favor de darme estos pasos para
poder copiar varias columnas en base a un filtro,, estos paso que me
hizo favor de darme copia columnas de 3 en 3 una de bajo de otra, en
base a un filtro y pone unos titulos entre ellos.

Ahora bien por lo que recurre nuevamente a ustedes es siguiendo con la
misma idea

¿como copiar de 3 columnas en 3 con su respectivo titulo una debajo de
la otra (dentro de este mismo codigo)pero sin tomar en cuenta el
filtro?

Tratando de ser un poco mas explicito necesito copiar al final de lo
que ya hizo el codigo las columna AH a la columna AM apartir de la
fila 5 (las primeras 4 columnas continen encabezados) igual con sus
respectivos titulos pero sin tomar en cuenta el filtro,, un breve
ejemplo:

F G H I J K J... AH AI AJ AK AL AM
5 BOS 0 1 2 3 4 5... 6 7 8 9 10 11
6 BOS 0 1 2 3 4 5... 6 7 8 9 10 11
7 BOS 0 1 2 3 4 5... 6 7 8 9 10 11
8 GUA A C D E F G... K L M N O P
9 GUA A C D E F G... K L M N O P
10 Q R S T U V
11 Q R S T U V
12 Q R S T U V
13 Q R S T U V
14 Q R S T U V
15 Q R S T U V


Lo que deberia salir seria lo siguiente:

Titulo1
0 1 2
0 1 2
0 1 2
Titulo 2
3 4 5
3 4 5
3 4 5
...
Titulo 6
6 7 8
6 7 8
6 7 8
K L M
K L M
Q R S
Q R S
Q R S
Q R S
Q R S
Q R S
Titulo 7
9 10 11
9 10 11
9 10 11
N O P
N O P
T U V
T U V
T U V
T U V
T U V
T U V

como se daran cuenta los datos de titulo 1, titulo2 hasta titulo 5
(que es donde llegan) copia unicamente los datos en base al filtro
seleccionado ,, en este caso Bos y los titulos 6 y 7 copia todo lo
que alla en sus respectivas columnas sin tomar en cuenta el filtro,,

Ojala me haya explicado,, por favor alguien me pudiera ayudar a
terminar el codigito???

De antemano muchas gracias,,, Saludos!!!!

-> puedes evitar la necesidad del combobox [como objeto incrustado] y
su codigo de 'relleno' [entre otras cosas] si...
a) asegurate que en tu hoja 'mydata' tienes libre la columna 'AG' para
extraer por filtros avanzados los 'unicos' de la columna 'F'
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 ;)
c) usa [menu] datos / validacion / lista / formula y estableces
como origen de la lista 'el nombre' -> =listado
[p.e. en la celda 'A2' de la hoja 'reportes'] <= es la que uso en
el codigo de ejemplo
-> sustituye al combo/objeto y el evento '_change' de esa hoja
realiza las acciones que solicitas :))
OJO: se requiere excel 2000 en adelante para que se dispare el
evento en listas de validacion que se toman de rangos <= OJO
d) asegurate que la celda 'A6' en tu hoja de reportes NO esta
'vacia' [para que el codigo se pueda 'mover' de ahi en
adelante] :))
copia/pega las siguientes lineas en el modulo de codigo de cada hoja
y...
si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
[MyData]
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
[Reportes]
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("PRORRATEO"): 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

1) los filtros avanzados los 'maneja' el codigo [tu solo asegurate que
la columna 'AG' de la hoja 'mydata' esta libre] ;)
2) la creacion del nombre [p.e. Listado] es en la misma hoja 'mydata'
seleccionando primero la celda 'AG5' [se llena por codigo]
a) creas el nombre 'estando parado' en la celda 'AG5' de la hoja
'mydata' con la formula propuesta...
b) vas a la hoja de reportes y en la celda 'A2' aplicas reglas de
validacion por lista usando el nombre que creaste en el paso anterior




hhhhhh
Respuesta Responder a este mensaje
#5 Héctor Miguel
18/04/2007 - 18:07 | Informe spam
hola, alfredo !

... solo un detalle... como quedarian estas lineas para que los copie/pegue como valores?



1) para las lineas que copian 'dentro del bucle'...

With .Offset(1, Col).Resize(.Rows.Count - 1, 3)
.Copy Range("a65536").End(xlUp).Offset(1)
End With: End With: Next: .Range("f4").AutoFilter

modifica la segunda linea a lo siguiente:

.Copy
Range("a65536").End(xlUp).Offset(1).PasteSpecial Paste:=xlValues

2) para las lineas 'agregadas'... modifica tambien la que hace el copy/paste y quedarian +/- asi:

Range("a65536").End(xlUp).Offset(1) = "Titulo6"
.Range(.Range("ah5"), .Range("ah65536").End(xlUP)).Resize(, 3).Copy
Range("a65536").End(xlUp).Offset(1).PasteSpecial Paste:=xlValues
Range("a65536").End(xlUp).Offset(1) = "Titulo7"
.Range(.Range("ak5"), .Range("ak65536").End(xlUP)).Resize(, 3).Copy
Range("a65536").End(xlUp).Offset(1).PasteSpecial Paste:=xlValues

3) finalmente, cancelas el 'estatus' de copiando/pegando en la penultima linea:

End With: x = UsedRange.Rows.Count: Application.CutCopyMode = False

saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida