Macro para que se generen diferentes textos en una columna respecto a la fecha actual

Hola, tengo una tabla en la cual me aparecen diversas fechas en la columna F en el formato “m/aaaa” y me gustaría tener una macro que me mostrara en la columna H diversos textos dependiendo a la fecha actual.

Basándonos en la fecha actual, si el valor de la fecha es mayor por 1 mes o igual al mes actual, debe aparecer el texto “PRIORIDAD” en la fila correspondiente de la fecha en la columna H. Si la fecha es menor a la fecha actual, deberá aparecer el texto “URGENTE” y si no cae en ninguna de estas condiciones, no debe aparecer nada.

Por ejemplo:

Hoy es 04/09/2014 y la fecha en la columna F es 9/2014, el texto en la columna H debería ser “PRIORIDAD” o si la fecha es 10/2014 (un mes mayor) también debe aparece “PRIORIDAD”, si la fecha fuera menor (8/2014, 7/2014, etc.) debería aparecer “URGENTE” en la columna H de esa fila, si la fecha fuera 11/2014, 12/2014 no debe aparecer nada.

Ojala mi explicación no sea confusa. De antemano gracias.

1 Respuesta

Respuesta
1

Esta sería la macro para las filas de la columna F y poner el resultado en la columna H

Sub fechas()
'Por.Dante Amor
    For i = 1 To Range("F" & Rows.Count).End(xlUp).Row
        m0 = Year(Date) & Format(Month(Date), "00")
        mes = Month(Date)
        m1 = Year(Cells(i, "F")) & Format(Month(Cells(i, "F")), "00")
        m2 = Year(Cells(i, "F")) & Format(Month(DateSerial(Year(Cells(i, "F")), mes + 1, 1)), "00")
        If m1 = m0 Or m1 = m2 Then
            Cells(i, "H") = "PRIORIDAD"
        ElseIf m1 < m0 Then
            Cells(i, "H") = "URGENTE"
        Else
            Cells(i, "H") = ""
        End If
    Next
End Sub

También debe funcionar cuando la fecha actual es diciembre o enero, para que calcule el mes anterior y el mes siguiente.

Hola,

Tengo algunos problemas con la macro, por ejemplo, cuando la fecha es 10/2012 debería ser “URGENTE” pero aparece “PRIORIDAD”  y en la primera fila donde no hay nada aparece “URGENTE” cuando debería de aparecer “ ”.

También quería saber porque cuando intento agregar este código en un macro más grande me marca error en esta fila:

m1 = Year(Cells(i, "F")) & Format(Month(Cells(i, "F")), "00")

Espero puedas ayudarme.

Saludos

Disculpa, te cambio la macro, utiliza esta

Sub fechas()
'Por.Dante Amor
    m1 = Year(Date) & Format(Month(Date), "00")
    mx = Month(Date)
    m2 = Year(Date) & Format(Month(DateSerial(Year(Date), mx + 1, 1)), "00")
    For i = 1 To Range("F" & Rows.Count).End(xlUp).Row
        If Cells(i, "F") = "" Then
            Cells(i, "H") = ""
        Else
            m3 = Year(Cells(i, "F")) & Format(Month(Cells(i, "F")), "00")
            If m3 = m1 Or m3 = m2 Then
                Cells(i, "H") = "PRIORIDAD"
            ElseIf m3 < m1 Then
                Cells(i, "H") = "URGENTE"
            Else
                Cells(i, "H") = ""
            End If
        End If
    Next
End Sub

Si te marca error, dime qué error te aparece.

Hola,

Disculpa las molestias, pero cuando corro la macro en un libro cualquiera me funciona perfecto, pero si la trato de correr dentro de otra macro me marca error de: "No coinciden los tipos" en esta fila:

m3 = Year(Cells(i, "F")) & Format(Month(Cells(i, "F")), "00")

Es probable que no tengas un dato en cells(i, "F") tipo fecha, a lo mejor se ve como fecha pero puede ser solamente texto.

Si es texto deberás pasar ese texto a tipo fecha

Por ejemplo si tienes este texto:

9/2014

Utiliza esta macro, pero este es un ejemplo, no conozco cómo tienes los datos o si son texto o tienen espacios, el caso es que tus datos no están siendo reconocidos como fecha y por eso envía el error.

Si puedes primero convertir tus datos a fecha y luego ejecutas la macro.

Esta macro convierte a fecha si tienes un texto 9/2014

Sub fechas()
'Por.Dante Amor
    m1 = Year(Date) & Format(Month(Date), "00")
    mx = Month(Date)
    m2 = Year(Date) & Format(Month(DateSerial(Year(Date), mx + 1, 1)), "00")
    For i = 1 To Range("F" & Rows.Count).End(xlUp).Row
        If Cells(i, "F") = "" Then
            Cells(i, "H") = ""
        Else
            If IsDate(Cells(i, "F")) Then
                m3 = Year(Cells(i, "F")) & Format(Month(Cells(i, "F")), "00")
            Else
                datos = Split(Cells(i, "F"), "/")
                mes = datos(0)
                año = datos(1)
                m3 = año & Format(mes, "00")
            End If
            If m3 = m1 Or m3 = m2 Then
                Cells(i, "H") = "PRIORIDAD"
            ElseIf m3 < m1 Then
                Cells(i, "H") = "URGENTE"
            Else
                Cells(i, "H") = ""
            End If
        End If
    Next
End Sub

Hola, probé esta nueva macro pero nada...

Me marca error aquí: "año = datos(1)" y me dice "Subíndice fuera de intervalo"

También intente agregando esto a mi macro, antes de correr la que me enviaste, pero tampoco se pudo:

 Columns("F:F"). NumberFormat = "m/yyyy"

Habrá algo más que pueda hacer, porque como sices, supongo que son los datos en la fila F los que están causando el problema

De antemano gracias

Supongo que algunos datos son fechas y en otros datos son texto, habría que arreglar primero tus datos, pero no con formato, hay que pasar toda la columna a fecha, pero tendría que analizar dato por dato para ver qué tiene y cómo se puede pasar a fecha.

En la macro ya puse esto:

If IsDate(Cells(i, "F")) Then

significa que si el dato es fecha, que lo trate como fecha, si no es fecha entonces trata de convertirlo a fecha, pero no pudo convertirlo.

Cuando se detiene la macro dime en qué fila se detuvo y dime qué tienes en la celda de la fecha para ver cómo se resuelve.

O envíame tu archivo para revisar todos los dato. Recuerda poner tu nombre en el asunto.

Te envié el archivo con la corrección a la fecha, si de ahí en adelante puedes avanzar no olvides valorar la respuesta, de lo contrario coméntame qué cuál es la columna que necesitas para la fecha.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas