Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Como copiar una fila a otra hoja, dependiendo del valor de una celda

1,804 views
Skip to first unread message

Anders

unread,
Feb 4, 2004, 4:21:11 AM2/4/04
to
Hola,
Estoy utilizando excel para crear un mini-base de datos.

Trabajo con un documento de cinco hojas. La primera
incluye todos los datos, mientras los cuatro siguientes
contienen una parte de los datos.

En cada fila en la primera hoja, una de las celdas
contiene el valor 0,1,2 o 3. Cada fila tiene que aparecer
también en una de las cuatro siguientes hojas, dependiendo
si la celda en cuestión contiene el valor 0,1,2 o 3.

Además, el valor 0,1,2 o 3 puede ir cambiando, así que
expresa el estado de una activiad (0= no iniciado, 1=
iniciado, 2= terminado, 3= anulado). Entonces, p.ej. si en
la primera hoja hay que cambiar el estado de una actividad
(una fila) de 0 a 1, esta fila que ya se ha copiado
automaticamente a la segunda hoja, se tiene que moverse
ahora a la tercera hoja.

¿Existe una forma sencilla de lograr lo arriba mencionado?
Es una función, una fórmula, o una tercera cosa?

Gracias por las sugerencias

Anders

Héctor Miguel

unread,
Feb 5, 2004, 2:47:14 AM2/5/04
to
hola, Anders !

> ... documento de cinco hojas. La primera incluye todos los datos ... cuatro siguientes ... una parte ...
> ... cada fila en la primera hoja, una de las celdas contiene el valor 0,1,2 o 3.
> Cada fila tiene que aparecer ... en una de las cuatro siguientes hojas ... valor 0,1,2 o 3.
> Ademas, el valor 0,1,2 o 3 puede ir cambiando, así que ...
> ... si en la primer hoja hay que cambiar el estado de una ... fila de 0 a 1
> ... esta fila que ya se ha copiado automaticamente a la segunda hoja, tiene que moverse ... a la tercera hoja.
> ¿Existe una forma sencilla de lograr lo arriba mencionado? Es una funcion, una formula, o una tercera cosa?

[considerando que...] lo que necesitas hacer NO parece 'tan sencillo'... :))
[creo que...] solo queda... la 'tercera cosa' =>macros<= :((

para no tener que 'imaginar' las situaciones y operaciones que actualmente haces [y 'como' las haces]...
servira si proporcionas la siguiente informacion:
- ¿como se llaman las hojas?
- ¿cual es la celda [columna] que 'controla' el estado de...? =>y [de preferencia]... ¿cual es el rango?<=
- ¿'como' es que 'se cambia' el estado de esa fila? =>'manualmente'... 'por codigo'<=
- ¿hay algun 'identificador' UNICO que permita encontrar 'donde quedo' la fila [segun su 'estatus anterior']?
- ¿como se hace el pase 'automatico' actualmente? =>para no 'cruzar' codigos que pudieran 'interferirse'<=
- ¿como se 'agregan' [filas con] datos de operaciones nuevas? =>y como se 'eliminan' [si fuera el caso]<=

[tengo la -mala?- 'costumbre' de imaginar situaciones que podrian 'entorpecer' el funcionamiento de las macros] :((
=> ¿te serviria si [por codigo] se usan filtros avanzados para hacer los pases 'automaticos' a cada hoja?
[la ventaja seria que los datos anteriores serian reemplazados con los nuevos]
- ya sea por una accion 'a voluntad' como una macro [p.e. asignada a un boton o a un atajo de teclado]
- o... antes de cerrar el libro [etc.]
=> o podrias usar 'autofiltros' [por cada 'estatus'] y pasar 'manualmente' a cada hoja los 'resultados' [...]

¿comentas?
saludos,
hector.


Anders

unread,
Feb 17, 2004, 3:31:07 AM2/17/04
to
Hola Hector!
Acabo de volver de viaje, y no te he podido escribir hasta ahora. Gracias por tu respuesta - a ver si todavía vas mirando el tema (:-o

Estoy trabajando en un departamento internacional de una empresa española. El calendario de actividades se utiliza para tener una vista global y control del avance de la mayoria de las actividades del departamento (p.ej. el lanzamiento de producto X en país Y). Donde trabajé antes, teníamos este calendario en un base de datos. Lo que quiero construir es una versión simplificada de aquel base de datos.

Mira, las cinco hojas se titulan:
- Activity Table
- Not initiated
- Initiated
- Completed
- Cancelled

La columna H en la primera hoja de cálculo contiene el valor 0,1,2, o 3 - según el estado de la actividad.
Cada fila representa una actividad (menos la primera que indica el titulo de la columna - la columna H se titula "Activity Status").

Manualmente se cambia el valor de las celdas en la columna H. Como punto de partida el valor es "0" ya que no se ha iniciado la actividad. Según uno va iniciando ("1"), completando ("2"), o cancelando ("3") una actividad - uno pone 1,2 o 3 en la celda correspondiente de la actividad en la fila H.

El rango de columnas es A-N

El rango de filas - pues depende del número de actividades, pero me imagino que en un principio se meterán 100 actividades - y en seis meses habrán 300 actividades. Las actividades se agregan manualmente - es decir cada nueva actividad tendrá su fila, utilizando el rango A-N para describir varios parametros de la actividad (p.ej. la columna H describe el estado de la actividad, mientras la columna A indica el número de la actividad - 1,2,3,4,5, etc.)

Sé que si no se logra construir este mini-base de datos con cinco hojas, lo que haré será o bien enseñar / recordar a los demás que tienen que acordarse de ir poniendo cada actividad en la hoja "Not initiated", "Initiated", etc. según vayan avanzando - o simplemente utilizar la primera hoja y autofiltro, y nada más. Una tercera oportunidad que no quiero sugerir / eligir es que yo haga de administrador del documento con las obligaciones que supondría...

Bueno, si todavía estas allí, y me puedes ayudar, pues muchas gracias.

Si me explico mal, podría ser porque no soy español, o quizá no tiene nada que ver...

Un saludo
Anders


----- Héctor Miguel escribió: -----

Héctor Miguel

unread,
Feb 18, 2004, 2:39:35 AM2/18/04
to
hola, Anders !

> ... - a ver si todavia vas mirando el tema (:-o
=> pues... ¡ aqui estamos !!! ;-)

> ... las cinco hojas se titulan: - Activity Table - Not initiated - Initiated - Completed - Cancelled
> ... columna H en la primera ... contiene el valor 0,1,2, o 3 - segun el estado de la actividad.
> Cada fila representa una actividad (menos la primera que indica el titulo de la columna ...).
> Manualmente se cambia el valor de ... la columna H ... "0" ... no se ha iniciado ... "1" [...]


> El rango de columnas es A-N

> El rango de filas - pues depende del numero de actividades ... se agregan manualmente [...]
> ... si todavia estas alli, y me puedes ayudar ... Si me explico mal [...]

espero haber entendido 'cabalmente' :)
prueba con la siguiente macro 'completando' [o corrijiendo] previamente los siguientes 'supuestos':
1.- en la primer hoja [Activity Table] SOLO 'existen' los datos [de la base] en 'A1:N_x_fila'
=> si existen 'otros' datos... se puede 'adaptar' el codigo para que 'reconozca' SOLO la base de datos <=
la primer fila son los titulos y los datos se 'extienden' desde la fila 2 hasta ...?
2.- en las [4] hojas 'de control' por estatus...
'pones' un rango 'de criterios' [en sus rangos 'A1:A2'] como sigue:
a) en la celda 'A1' EL MISMO titulo que el titulo de la celda 'H1' de la hoja 'principal'
b) en la celda 'A2'... el 'valor del estatus' [segun cada hoja] => 'Not Initiated = 0... 'Initiated' = 1... [etc.]
3.- el codigo 'se encargara' de 'duplicar' los titulos A CADA HOJA en el rango 'A4:N4'
y... a partir de la fila 5 [en cada hoja 'de control'] 'filtrara' cada actividad [segun su estatus en la hoja 'principal']
=> toma nota de que SIEMPRE seran reemplazados los datos POR los nuevos 'estatus' de las actividades <=
[o sea... no tendras que 'preocuparte' por si se queda un dato 'anterior' en alguna hoja 'de control']
=> solo 'asegurarte' de que en la hoja 'principal'... cada estatus sea... 'el correcto' <= :))

¿comentas?
saludos,
hector.

=== en un modulo de codigo 'normal' ===
Sub Filter_Activities()
Dim Data_Range As String, Status_Sheet As Worksheet
Application.ScreenUpdating = False
With Worksheets("Activity Table")
Data_Range = .UsedRange.Address
For Each Status_Sheet In Worksheets(Array("Not Initiated", "Initiated", "Completed", "Cancelled"))
.Range(Data_Range).AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=Status_Sheet.Range("a1:a2"), _
CopyToRange:=Status_Sheet.Range("a4:n4")
Next
End With
End Sub


Anders

unread,
Feb 25, 2004, 6:29:26 AM2/25/04
to
Hola Héctor,
"A buenas horas" te escribo - muchas gracias por tu
respuesta - lo voy a mirar & probar, y ya te contactaré.
Un saludo
Anders

>-----Mensaje original-----

>.
>

0 new messages