Macro para filtrar datos y pegar valores en otra celda

28/09/2009 - 07:39 por andrea | Informe spam
Hola, es la primer vez que les escribo, estuve leyendo bastante esta
pagina y me resulta muy completa. Mi motivo por el cual les escribo es
el siguiente. Necesito urgente terminar una planilla en excel 2003
para el trabajo. La planilla consta de dos hojas llamadas "RESUMEN" y
"DISTR HS". en la primera tengo un listado de personas con las tareas
realizadas por cada dia del mes (los nombres en la columna A se van
repitiendo por cada dia (son alrededor de 400 filas por mes) en la
columna B estan las horas trabajadas por dia. En la hoja DISTR HS
figuran los nombres (solo una vez), el total de las hs mensuales y en
la columna F el VALOR HORA. Lo que necesito es pegar de una hoja a
otra el valor de cada hora para cada empleado. p.ej.

Hoja DISTR HS
A C F
Ramon 213 hs 10,5
Lorenzo 186 hs 9,6 etc

En la hoja RESUMEN
Cada vez que en la columna A figure el nombre Ramon que me copie el
valor 10,5 en la celda correspondiente en la columna E p.ej.

A E
Ramon 10,5
Ramon 10,5
Lorenzo 9,6
Ramon 10,5
Lorenzo 9,6
Lorenzo 9,6 etc.

Ya que luego necesito sacar totales segun la tarea que realizaron
durante el mes. Espero me haya explicado bien y se pueda entender el
trabajo que necesito realizar. Agradezco anticipado toda la ayuda que
me puedan ofrecer. Gracias
 

Leer las respuestas

#1 Juan M
28/09/2009 - 18:21 | Informe spam
Hola Andrea,

Seguro que hay más cosas detrás de tu consulta y que el código que te
propongo se puede optimizar mucho más, si se pudieran emplear filtros,
agrupaciones u otro tipo de arreglo de datos.

El código, pégalo en un módulo estándar:

Sub copiaPega()

Dim i As Long
Dim celda As Range
Dim RangoBusqueda As Range

With Worksheets("DISTR HS")
Set RangoBusqueda = .Range("A2:A" & _
Range("A" & .Rows.Count).End(xlUp).Row)
End With

i = 2

Do While Worksheets("Resumen").Range("A" & i) <> ""
Set celda = RangoBusqueda.Find( _
Worksheets("Resumen").Range("A" & i), _
LookIn:=xlValues, lookat:=xlWhole)
Worksheets("Resumen").Range("E" & i) = celda.Offset(, 5)
i = i + 1
Loop

End Sub

Un saludo,
Juan

"andrea" escribió
On 28 sep, 04:42, "Juan M" wrote:
"andrea" escribió





> Hola, es la primer vez que les escribo, estuve leyendo bastante esta
> pagina y me resulta muy completa. Mi motivo por el cual les escribo es
> el siguiente. Necesito urgente terminar una planilla en excel 2003
> para el trabajo. La planilla consta de dos hojas llamadas "RESUMEN" y
> "DISTR HS". en la primera tengo un listado de personas con las tareas
> realizadas por cada dia del mes (los nombres en la columna A se van
> repitiendo por cada dia (son alrededor de 400 filas por mes) en la
> columna B estan las horas trabajadas por dia. En la hoja DISTR HS
> figuran los nombres (solo una vez), el total de las hs mensuales y en
> la columna F el VALOR HORA. Lo que necesito es pegar de una hoja a
> otra el valor de cada hora para cada empleado. p.ej.

> Hoja DISTR HS
> A C F
> Ramon 213 hs 10,5
> Lorenzo 186 hs 9,6 etc

> En la hoja RESUMEN
> Cada vez que en la columna A figure el nombre Ramon que me copie el
> valor 10,5 en la celda correspondiente en la columna E p.ej.

> A E
> Ramon 10,5
> Ramon 10,5
> Lorenzo 9,6
> Ramon 10,5
> Lorenzo 9,6
> Lorenzo 9,6 etc.

> Ya que luego necesito sacar totales segun la tarea que realizaron
> durante el mes. Espero me haya explicado bien y se pueda entender el
> trabajo que necesito realizar. Agradezco anticipado toda la ayuda que
> me puedan ofrecer. Gracias

Hola Andrea,

En la exposición que haces no queda claro porque necesitas copiar todas
las
veces el valor de cada persona con sus horas, ese valor ya lo tienes en la
otra hoja. Emplea la hoja resumen para hacer los totales. Puedes emplear
una
tabla dinámica para realizar todos esos totales.

Si de todas formas quieres hacerlo con macros, la pregunta es ¿cual sería
el
criterio para pegar los valores en su correspondiente nombre, solo su
existencia?
¿Siempre sería el mismo valor para cada vez que exista Ramon o Lorenzo?
eso
significaría que en la hoja DSTR HS solo hay valores únicos.
En tal caso podrías emplear funciones de búsqueda Buscarv,
indice/coincidir...

Comentas los detalles?

Un saludo,
Juan- Ocultar texto de la cita -

- Mostrar texto de la cita -




Hola Juan, en realidad necesito pasar los valores de las horas tantas
veces se repita el nombre porque en otra columna de la hoja RESUMEN
tengo las tareas realizadas que son varias por dia, luego al pegar
esos valores necesito filtrar el gasto total de cada tarea realizada
en el mes. p.ej. La tarea Manten. General sumaria todos los valores de
las distintas personas que hicieron esa tarea. Esto es porque en otra
planilla me suma los gastos totales de cada tarea realizada en el
mes. Espero haberme explicado y agradezco tu pronta respuesta. Saludos

Preguntas similares