Comparar dos columnas de diferentes hojas y colorear

Por lo que he leído creo que tu podrías ayudarme. Tengo dos temas que necesito. El primero comparar dos columnas en un excel de diferente hoja y las que coincidan pintar el fondo de la celda`. ¿Podrías orientarme con el macro?
Y la segunda es, tengo una tabla de personas, y debo de contar los días y horas que trabajan al cabo del año. Contando con que todos trabajan y hacen sus horas.. Pero no se como hacerlo, no se por donde empezar..

1 Respuesta

Respuesta
1
Según te has expresado es difícil darte una solución, te explico para que tú después me aclares:
1º Evaluamos 2 Col de diferentes hojas en el mismo Libro (hasta aquí entendido) ahora me dices que las que coincidan...(coincidan en qué, en posición, en valor, si la col de la Hoja1 contiene los datos de la col de la Hoja2 o al revés que los valores de la col de la hoja2 estén en la col de la hoja1, tienen que estar en la misma celda si el valor María esta en la col A fila 5 de la Hoja1 y María esta en la Col A pero en la fila 100 de la Hoja2, para ti coinciden o no.) Que hoja es la que quieres cambiar el color de la celda Hoja1 o la Hoja2
2º Como tienes tu tabla distribuida columnas de nombres apellidos, horas, fechas, meses años ... Y que formato tienen las celdas de fechas (14/08/2009  14-agosto-2009 14-08-09 en fin que formato has empleado. Y las horas que formato tienen 08.00 08:00 08,00 que formato tienen las celdas que ocupan las fechas y las horas...
Necesitamos todos esos datos para poder comenzar a trabajar sin ellos es imposible realizar cualquier calculo.
>Un saludo
>Julio
Buenas,
Ante todo gracias por ayudarme...
Respecto a colorear te diré tengo un libro en la primera hoja, "semana 34"tengo una serie de referencias en la columna D (nunca se repiten todas son diferentes). En la hoja lanzamientos tengo en la columna C otras referencias que seguro que están en la hoja de la semana 34. Necesito un macro que me recorra la columna D de la hoja semana 34 comparándola con la columna C de lanzamientos y cuando encuentre la referencia la coloree en verde.
Estoy en una oficina y necesito controlar de alguna manera la cantidad de gente que tengo y tendré durante el año, para traer trabajo suficiente a nuestro centro como para que no nos falte ni nos sobre... por eso tengo un excel que he ido haciendo según he necesitado, pero es un poco chapuza y cada día ocupa más.. He pensado intentar hacer una Access para incluir al personal, con una rutina que me controle los cambios de turno cada 4 semanas, los activos y pasivos de cada turno ( quienes son y cuantos por día, por semana y por meses)
El excel, tengo todos los trabajadores de planta divididos en dos grupos (por que son dos turnos). En la tabla los he puesto todos y he metido
todas la fechas laborables por cada uno de ellos
, indicando el horario que hacen( cada 4 semanas cambia de M a T) y
he puesto el horario según el turno (ejemplo cuando es M: 1º hora inicio: 06:00;2ªhorafin 14:00;hora inicio real( se copia de la primera, y si es diferente la pongo a mano y horafinreal ( lo mismo) y para finalizar horas totales a trabajadas.)
A continuación tengo una columna en la que sale por defecto sin inidencias (desplegable con los motivos más comunes por los que una persona falta: enfermo, baja, familiar enfermo, vacaciones, permiso, no ha venido, otros, llega más tarde ), o sea puedo contar con esa persona, si no me anoto motivo y descripción
consultas que saco de estos datos: cuanta gente tengo esta tarde( sin incidencias, el 20/08/2009,en T= 25)
Cuantos tendré el 20/11/2009 filtro los sin incidencias de ese día y por cada turno.
Una persona se ha jubilado, borro la entrada pero me queda el registro anterior.
En access, he puesto:
TABLA LISTA con los campos CÓDIGO(numero), NOMBRE(TEXT), APELLIDOS(TEXT)
TABLA TURNO: ID NUMERO, HORAINICIO(HORA/FECHA;06:00), HORAFIN (HORA/FECHA 14:00 ) DESCRIPCIÓN (TEXT y he introducido todos los registros que existen M, MF (mañana fija.. no rota) T, TF(tarde fija), C (central), N (noche))
TABLA FICHAR: CÓDIGO(Numero), TURNO(numero), HORAINICIOREAL(hora/fecha), HORAFINREAL(hora/fecha), DESCRIPCIÓN(text, y he introducido todos los que tengo en excel), MOTIVO(MEMO)
Y hay estoy con access.. por que he leído que no puedo poner el campo horas totales en la tabla fichar... que eso es el resultado de un evento.. al igual que el contar días de vacaciones realizados ( pueden ser en diferentes fechas, el filtrado por turnos y día.. etc
no se si te servirá la explicación o te habré liado más...
Muchas gracias otra vez
Vale en relación a la primera cuestión es fácil coloreamos la Col DE de la Hoja semana 34.
Respecto a la segunda consulta te darás cuenta que es relativa a Access y no a Excel, además el puñetero problema que tiene Access es que no te muestra horas cuando son mayores de 24:00 se las queda en memoria pero si por ejemplo la suma de horas es de 28:30 en el campo solo te mostrará 04:30 aunque el programa internamente si lleva la cuenta de que son 28:30, si al campo con 04:30 le restas por ejemplo 20:00 te muestra 08:30. Por ello cuando tengo que realizar sumas con horas mayores de 24:00 o bien me exporto la tabla a Excel o bien hago la base directamente en Excel.
En tu caso imagino que tienes campos en la tabla de fichar que recoge la Hora llegada y la Hora salida y en la tabla donde recoges los días de vacaciones tendrás Día inicio Día Final. Si estas tablas las exportas a Excel podremos trabajar en ellas para hacer los cálculos del total de horas trabajadas y días que han tomado de vacaciones.
>En la próxima contestación te pongo la macro de colorear.
>Un saludo
>Julio
Lo que me gustaría seria seguir con el excel que tengo... pero sin tener que entrar el calendario a mano, sin repetir cada registro cada día laboral colocando el turno en cada momento... quiero decir si tengo 100 personas por 220 días laborables 2200 registros a entrar..
Yo trabajo en una hoja de calculo y me va super bien. ¿Pero hacer esto cada año? Tu que opinas como puedo hacerlo...
Si quieres te lo envío para que lo entiendas..
Gracias de nuevo
Llevo años trabajando en cuestiones similares (cuadrante de trabajo) y siempre he utilizado el Access. Una base de datos bien estructurada es mucho mejor para llevar control de horarios, vacaciones y días laborales. Tan solo el problema (relativo) en lo referente a la suma de horas de más de 24:00, por otro lado cuando el personal cambia de turno con una simple consulta de actualización lo tienes hecho... etc etc.
Además teniendo las tablas en Access siempre tengo la posibilidad de trabajar con Excel para temas puntuales.
Según lo tienes en Excel, yo hubiese empleado 12 hojas una para cada mes y en cada un tener todos los datos de cada empleado turno, horario, hora de entrada de salida días libres y vacaciones, total son 100 filas por mes y para manejarlo es mucho más fácil añadiendo las hojas de resumen para el tema que me interesara en cada momento ( control de vacaciones, total de horas realizadas, bajas, ausencias...)
Deberás en algún momento decidir que hacer con el calendario del año que viene y pensarlo bien para llevar un control que no te suponga excesivo trabajo y sobre todo seguridad que los datos que extraes son correctos y no dan posibilidades de error (fallo de fórmulas, errores de macros por no prever posibles situaciones etc.)
Ayudarte en esto tiene que ser en base a que tengas decidido claramente que hacer y como estructurarlo. Si quieres me pones un correo y comenzamos a verlo.
>Un saludo
>Julio
Buenas Julio,
Primero decirte que lo siento, pero he tenido problemillas con mis niñas y he tendido que dejar y todo.
Al final he decidido seguir con el archivo con el que trabajamos y pegarme la gran currada de meter todos los registros a mano para poder seguir trabajando con la información que necesito guardar del año que viene, y con la calma intentar mejorarlo en todo lo posible para que el año que viene me sea más fácil.
Si quieres me pasas email y te envío el archivo que ya he acabado, para que entiendas lo que quiero mejorar...
Por cierto puedes pasarme como colorear las celdas de distintas hojas, ¿cuándo encuentra el mismo registro?
Gracias
Pues siento los problemas que has tenido y el trabajo que has decidido hacer pero en algún momento tenías que hacerlo, en fin ya lo tienes.
Respecto al correo no doy el correo en la web si quieres me pones tu uno y te solicito el archivo y de paso te pongo la macro de colorear en él y te lo devuelvo al correo.
>Un saludo
>Julio
Mi correo es [email protected]
Ya te lo he solicitado
Buenas julio te he enviado el excel para colorear.
Estoy intentado aclararme con un ejemplo que he encontrado pero no condigo entenderlo del todo bien y no me funciona:
Sub comparaCol()
'macro para comparar columnas de hojas diferentes y colorear
Dim fila, ctrol As Integer
fila = 4
'suponemos que se comparan las col E de la hoja activa y la de LANZAMIENTOS
ActiveSheet.Range("E7").Select
'recorre la col E hasta una celda vacía, presuponiendo que será el final.
While ActiveCell.Value <> ""
'recorre la col B de "lanzamientos"
        While ctrol = 0
        'controla si no será la última fila de lanzamientos
            If Sheets("lanzamientos").Cells(fila, 2) = "" Then
                ctrol = 1
            If ActiveCell.Value = Sheets("lanzamientos").Cells(fila, 2) Then
                    ActiveCell.Interior.ColorIndex = 4
                    ctrol = 1
            Else
                fila = fila + 1
            End If
        Wend
        ActiveCell.Offset(1, 0).Select
        fila = 2
        ctrol = 0
        Wend
End Sub
Esta macro realiza dos bucles:
While activeCell.valu<>""
Realiza el ciclo hasta que la celda activa sea blanco (vacía)
Y el otro ciclo realiza la comprobación de la hoja lanzamientos mientras que la variable ctrol sea igual a 0, y pones en la primera instrucción:
If Sheets("lanzamientos").Cells(fila, 2) = "" Then
                ctrol = 1
Si la hoja lanzamientos rango B4 (4 de fila y 2 de columna) es blanco
me pones la variable ctrol con valor 1
Ahora dices que si la celda activa tiene el mismo valor que la hoja lanzamientos celda B4, cambia el color al 4 en la celda activa y me pones la variable ctrol con valor 1, pero si esto no se cumple
Else
Me pasas la variable fila al valor que tenía (4) + 1 osea, 5
Finalizas las condiciones, y vuelve el bucle a comprobar si la variable ctrol es igual a 0 como esto no lo has modificado se repite.
Cual es el problema que no has definido la variable ctrol antes de empezar las instrucciones con un valor que debería de ser 0 y si las condiciones se cumplen la pasas a valor 1 y se escapa del bucle.
Pruebalá así:
Sub comparaCol()
'macro para comparar columnas de hojas diferentes y colorear
Dim fila, ctrol As Integer
fila = 4
ctrol=0
'suponemos que se comparan las col E de la hoja activa y la de LANZAMIENTOS
ActiveSheet.Range("E7").Select
'recorre la col E hasta una celda vacía, presuponiendo que será el final.
While ActiveCell.Value <> ""
'recorre la col B de "lanzamientos"
        While ctrol = 0
        'controla si no será la última fila de lanzamientos
            If Sheets("lanzamientos").Cells(fila, 2) = "" Then
                ctrol = 1
            If ActiveCell.Value = Sheets("lanzamientos").Cells(fila, 2) Then
                    ActiveCell.Interior.ColorIndex = 4
                    ctrol = 1
            Else
                fila = fila + 1
            End If
        Wend
        ActiveCell.Offset(1, 0).Select
        fila = 2
        ctrol = 0
        Wend
End Sub
A ver ahora si te funciona.
>Un saludo
>Julio
No me funciona, creo que sobra un if... o hay que cerrarlo. Pero he probado ha cerrar y da error en las dos posibilidades que veo.
No obstante he adaptado un código que me ha gustado mucho y estoy parada... te enseño lo que tengo y que si que va:
Sub Find()
Application.ScreenUpdating = False
Dim comparerange As Variant, x As Variant, y As Variant, selec As Variant, ref As Variant
Set selec = ActiveSheet.Range("f7:f381")' busco una palabra que equivale a la ultima celda no vacia..no me acuerdo como era???
Set comparerange = Sheets("lanzamientos").Range("e4:e200")' mismo caso que arriba
        For Each x In selec
            For Each y In comparerange
                    If x = ("65017190") Then
                        x.Interior.ColorIndex = 18
                        x.Offset(0, 1).Interior.ColorIndex = 18
                        x.Offset(0, -2).Value = ref ' he creado esta variable por que necestio que me busque su valor en la hoja anterior y me pegue , si no esta vacia el contenido de la columna k de esa misma fila ,en la columa L de la pagina activa)
                   
                    ElseIf x = y Then
                        x.Interior.ColorIndex = 4
                        x.Offset(0, 1).Interior.ColorIndex = 4
                    End If
            Next y
        Next x
End Sub
Me has enseñado lo que tienes que si va, entonces que hago yo...
Aclarame esto
>Un saludo
>Julio
Te lo había anotado en el código que me funciona. Hay un punto donde me pierdo.. como puedo ir a otra página mirar en esa coger un dato de esa y luego volver a la de origen y pegar el dato en la fila donde estaba dos columnas a la derecha. ¿Cómo se guarda una ubicación y como se puede llamar a una función dentro de otra?
De todos modos muchas gracias por toda tu ayuda y la paciencia que has tenido, dado el poco tiempo que paso delante del ordenador.. gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas