Fechas y Horas duplicadas

Buenas días Expertos, solicito su ayuda para resolver lo siguiente:

Tengo una Hoja con las siguientes Columnas:

Proyecto, Visita, HoraVisita, JuntaAclara, HoraJ, ReanudaJ, ReanudaH, Apertura, HoraA, Fallo y HoraF.

Como podría hacerle cuando se ingrese una fecha y hora y si estas ya existe en cualquier columna, ambas fechas y horas se marquen en Rojo, y al modificar se quite la marca de Rojo.

Esta instrucción seria con las columnas JuntaAclaraciones, HoraJunta, ReanudaJunta, ReanudaHora, Apertura, HoraApertura, Fallo y HoraFallo. Les pongo un ejemplo:

JuntaAclara HoraJ ReanudaJ, ReanudaH Apertura HoraA Fallo HoraF

06-12-12 10:00 20-12-12 17:00 25-12-12 10:00 05-01-13 13:00

05-01-13 13:00 10-01-13 13:00 17-01-13 13:00 15-02-13 13:00

13-10-12 11:00 22-11-12 11:00 06-12-12 10:00 05-01-13 10:00

22-11-12 11:00 20-12-12 10:00 16-01-13 13:00 07-03-13 17:00

Les agradeceré infinitamente su ayuda.

Saludos Raúl.

1 Respuesta

Respuesta
1

Entiendo que si escribes una fecha en JuntaAclara y una hora en HoraJ, ese par de datos se busque en RanudaJ-ReanudaH, se busque en Apertura-HoraA y se busque en Fallo-HoraF, y si encuentra el par en cualquier de las 3, marque de rojo ambas.

Pregunta, también se debe buscar la pareja RanudaJ-ReanudaH, en las demás parejas, es decir, debo buscar todas las parejas contra todas las parejas o solamente la primera opción.

También me puedes decir en qué columnas se encuentras tus títulos y a partir de qué fila empiezan los datos.

Saludos. Dam

Suponiendo que tus datos están así:

<pre class="prettyprint" style="width: 631px; height: 120px;"> A B C D E F G H
1 JuntaAclara HoraJ ReanudaJ, ReanudaH Apertura HoraA Fallo HoraF
2 06/12/2012 10:00 20/12/2012 17:00 25/12/2012 10:00 05/01/2013 13:00
3 05/01/2013 14:00 10/01/2013 13:00 17/01/2013 13:00 15/02/2013 13:00
4 13/10/2012 11:00 22/11/2012 11:00 06/12/2012 10:00 05/01/2013 10:00
5 22/11/2012 11:00 20/12/2012 10:00 16/01/2013 13:00 07/03/2013 17:00</pre>

Instrucciones para worksheet
1. Abre tu hoja de excel
2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
3. Del lado izquierdo dice: VBAProject, abajo dale doble click a worksheet(tu hoja)
4. Del lado derecho copia la macro

Private Sub Worksheet_Change(ByVal Target As Range)
'compara fecha y hora
'por.dam
If Not Intersect(Target, Columns("B")) Is Nothing Then
    Application.EnableEvents = False
    For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
        If Target.Offset(0, -1) = Cells(i, "C") And _
            Target = Cells(i, "D") Then
            Target.Font.ColorIndex = 3
            Target.Offset(0, -1).Font.ColorIndex = 3
            Range(Cells(i, "C"), Cells(i, "D")).Font.ColorIndex = 3
        ElseIf Target.Offset(0, -1) = Cells(i, "E") And _
            Target = Cells(i, "F") Then
            Target.Font.ColorIndex = 3
            Target.Offset(0, -1).Font.ColorIndex = 3
            Range(Cells(i, "E"), Cells(i, "F")).Font.ColorIndex = 3
        ElseIf Target.Offset(0, -1) = Cells(i, "G") And _
            Target = Cells(i, "H") Then
            Target.Font.ColorIndex = 3
            Target.Offset(0, -1).Font.ColorIndex = 3
            Range(Cells(i, "G"), Cells(i, "H")).Font.ColorIndex = 3
        Else
            Target.Font.ColorIndex = 1
            Target.Offset(0, -1).Font.ColorIndex = 1
        End If
    Next
    Application.EnableEvents = True
End If
End Sub

Indicaciones:

1. Cada vez que modifiques la hora de la columna B, se realizará el comparativo, si encuentra una pareja igual, se pintara de rojo ambas parejas.

2. Si modificas una hora que ya está en rojo, y si no encuentra una pareja igual, se regresará a negro. Nota: solamente regresará a negro la primer pareja, es decir, la fecha y la hora de la columna A y B, pues, como ya cambiaste la hora ya no se puede rastrear cuál era su pareja duplicada.

Saludos. Dam

Si es lo que necesitas.

Buenos días Dam, antes que nada gracias por responder tan rapido.
Los títulos están en la fila 1 y los datos a partir de la fila 2
Las columnas A y B tienes datos del proyecto, y las columnas C (Publicación), la columna D
(Visita), la columna E (HoraVisita), la columna F (Numero de junta), estas no requieren ser marcadas.
Las columnas a marcar son las siguientes:
G H I J K L M N
JuntaAclara HoraJ ReanudaJ, ReanudaH Apertura HoraA Fallo HoraF

Efectivamente debe de buscar en todas las parejas arriba indicadas por ejemplo si ingreso una fecha y hora en la columna M (Fallo) y columna N (HoraF), y si encuentra esa pareja en las otras columnas lo indique y asi con cada una de las columnas a partir de la columna G
(JuntaAclara).


Es decir si ingresas datos en JuntaAclara - HoraJ busque en las otras columnas y marque en rojo la fecha repetida.

Lo mismo para ReanudaJ - ReanudaH busque en las otras columnas y marque en rojo la fecha repetida.
Y Así con Apertura - HoraA y finalmente Fallo – HoraF.
Es decir que no haya una sola fecha – hora duplicada, ya que un evento no se llevaría a cabo con mi consecuente despido.

Saludos desde México

Raúl Ortiz

Sólo para confirmar, entonces:

Ingresas una pareja en G-H y se tiene que comparar con I-J, K-L y M-N

Si cambias una pareja I-J, se tiene que comparar con G-H, K-L y M-N

Si cambias una pareja K-L, se tiene que comparar con G-H, I-J y M-N

Si cambias una pareja M-N, se tiene que comparar con G-H, I-J y K-L

¿Si son iguales se marcan de rojo y si no hay iguales deben estar en negro?

Buenas tardes Dam, efectivamente como lo expones es correcto.

No debe haber ninguna fecha - hora igual. en ninguna columna.

Saludos desde México.

Raúl

Te cambio la macro

Private Sub Worksheet_Change(ByVal Target As Range)
'compara fecha y hora
'por.dam
If Not Intersect(Target, Range("G:N")) Is Nothing Then
    ufila = ActiveCell.SpecialCells(xlLastCell).Row
    Application.EnableEvents = False
    For g = 2 To ufila
        For i = 2 To ufila
            If Cells(g, "G") = Cells(i, "I") And _
                Cells(g, "H") = Cells(i, "J") Then
                Cells(g, "G").Font.ColorIndex = 3
                Cells(g, "H").Font.ColorIndex = 3
                Range(Cells(i, "I"), Cells(i, "J")).Font.ColorIndex = 3
                Exit For
            ElseIf Cells(g, "G") = Cells(i, "K") And _
                Cells(g, "H") = Cells(i, "L") Then
                Cells(g, "G").Font.ColorIndex = 3
                Cells(g, "H").Font.ColorIndex = 3
                Range(Cells(i, "K"), Cells(i, "L")).Font.ColorIndex = 3
                Exit For
            ElseIf Cells(g, "G") = Cells(i, "M") And _
                Cells(g, "H") = Cells(i, "N") Then
                Cells(g, "G").Font.ColorIndex = 3
                Cells(g, "H").Font.ColorIndex = 3
                Range(Cells(i, "M"), Cells(i, "N")).Font.ColorIndex = 3
                Exit For
            Else
                Cells(g, "G").Font.ColorIndex = 1
                Cells(g, "H").Font.ColorIndex = 1
            End If
        Next
    Next
    For g = 2 To ufila
        For i = 2 To ufila
            If Cells(g, "I") = Cells(i, "G") And _
                Cells(g, "J") = Cells(i, "H") Then
                Cells(g, "I").Font.ColorIndex = 3
                Cells(g, "J").Font.ColorIndex = 3
                Range(Cells(i, "I"), Cells(i, "J")).Font.ColorIndex = 3
                Exit For
            ElseIf Cells(g, "I") = Cells(i, "K") And _
                Cells(g, "J") = Cells(i, "L") Then
                Cells(g, "I").Font.ColorIndex = 3
                Cells(g, "J").Font.ColorIndex = 3
                Range(Cells(i, "K"), Cells(i, "L")).Font.ColorIndex = 3
                Exit For
            ElseIf Cells(g, "I") = Cells(i, "M") And _
                Cells(g, "J") = Cells(i, "N") Then
                Cells(g, "I").Font.ColorIndex = 3
                Cells(g, "J").Font.ColorIndex = 3
                Range(Cells(i, "M"), Cells(i, "N")).Font.ColorIndex = 3
                Exit For
            Else
                Cells(g, "I").Font.ColorIndex = 1
                Cells(g, "J").Font.ColorIndex = 1
            End If
        Next
    Next
    For g = 2 To ufila
        For i = 2 To ufila
            If Cells(g, "K") = Cells(i, "G") And _
                Cells(g, "L") = Cells(i, "H") Then
                Cells(g, "K").Font.ColorIndex = 3
                Cells(g, "L").Font.ColorIndex = 3
                Range(Cells(i, "G"), Cells(i, "H")).Font.ColorIndex = 3
                Exit For
            ElseIf Cells(g, "K") = Cells(i, "I") And _
                Cells(g, "L") = Cells(i, "J") Then
                Cells(g, "K").Font.ColorIndex = 3
                Cells(g, "L").Font.ColorIndex = 3
                Range(Cells(i, "I"), Cells(i, "J")).Font.ColorIndex = 3
                Exit For
            ElseIf Cells(g, "K") = Cells(i, "M") And _
                Cells(g, "L") = Cells(i, "N") Then
                Cells(g, "K").Font.ColorIndex = 3
                Cells(g, "L").Font.ColorIndex = 3
                Range(Cells(i, "M"), Cells(i, "N")).Font.ColorIndex = 3
                Exit For
            Else
                Cells(g, "K").Font.ColorIndex = 1
                Cells(g, "L").Font.ColorIndex = 1
            End If
        Next
    Next
    For g = 2 To ufila
        For i = 2 To ufila
            If Cells(g, "M") = Cells(i, "G") And _
                Cells(g, "N") = Cells(i, "H") Then
                Cells(g, "M").Font.ColorIndex = 3
                Cells(g, "N").Font.ColorIndex = 3
                Range(Cells(i, "G"), Cells(i, "H")).Font.ColorIndex = 3
                Exit For
            ElseIf Cells(g, "M") = Cells(i, "I") And _
                Cells(g, "N") = Cells(i, "J") Then
                Cells(g, "M").Font.ColorIndex = 3
                Cells(g, "N").Font.ColorIndex = 3
                Range(Cells(i, "I"), Cells(i, "J")).Font.ColorIndex = 3
                Exit For
            ElseIf Cells(g, "M") = Cells(i, "K") And _
                Cells(g, "N") = Cells(i, "L") Then
                Cells(g, "M").Font.ColorIndex = 3
                Cells(g, "N").Font.ColorIndex = 3
                Range(Cells(i, "K"), Cells(i, "L")).Font.ColorIndex = 3
                Exit For
            Else
                Cells(g, "M").Font.ColorIndex = 1
                Cells(g, "N").Font.ColorIndex = 1
            End If
        Next
    Next
    Application.EnableEvents = True
End If
End Sub

Saludos.Dam

Hola Dam, antes que nada gracias por tu ayuda.

Al poner una fecha, me sale el siguiente mensaje:

Error de compilación No se ha definido la variable.

Como puedo corregir este error.

Saludos, Raúl.

¿Copiaste la macro completa?

¿Falla con cualquier fecha y hora en cualquier columna?

Revisa que la macro aparezca como te la envié, a veces pasa que cuando la copias, queda toda amontonada y debe quedar tal como te la envié, con sangrías y separación de líneas.

Si no es nada de lo anterior, puedes enviarme tu archivo con unos ejemplos y arreglo tu archivo.

Mi correo [email protected]
En el asunto escribe tu nombre de usuario y el título de esta pregunta.

Buenas noches Dam, ya te envíe el archivo

Saludos, Raúl

La macro está bien, tienes esta línea al principio de la macro:

Option Explicit

Comenta la línea o bórrala y la macro va a funcionar bien.

La pareja de fecha y hora, no se compara en la misma columna, ya que establecimos :

"Sólo para confirmar, entonces:
Ingresas una pareja en G-H y se tiene que comparar con I-J, K-L y M-N
Si cambias una pareja I-J, se tiene que comparar con G-H, K-L y M-N
Si cambias una pareja K-L, se tiene que comparar con G-H, I-J y M-N
Si cambias una pareja M-N, se tiene que comparar con G-H, I-J y K-L
¿Si son iguales se marcan de rojo y si no hay iguales deben estar en negro?"

Y tú confirmaste:

"efectivamente como lo expones es correcto."

Incluso en tus ejemplos no mencionaste el caso de que estuvieran en la misam columna.

Advertencia!

Como se comparan todas las fechas contra todas las fechas, entre más registros, más lento se hará el proceso, por otra parte, la ventaja es que tendrás una información integra.

Por favor, termina tus pruebas y si funciona la macro, podrías finalizar la pregunta.

Cualquier cambio deberás crear una nueva pregunta.

Saludos. Dam

Añade tu respuesta

Haz clic para o