Necesito una macro que me muestre las fechas de los días Sábados y domingos según el mes que yo quiera

Alguien me podría ayudar con una macro para que me genere las fechas como muestro en la imagen, al escribir por ejemplo en la celda B2 (noviembre) me genere hacia abajo las fechas de los días sábados y domingos de ese mes nada mas.

Gracias y espero que alguien sepa como solucionarlo.

1 respuesta

Respuesta
1

H o l a : Te anexo la macro

Sub Sab_y_Dom()
'Por.Dante Amor
    Range("B3:B" & Range("B" & Rows.Count).End(xlUp).Row + 3).ClearContents
    elmes = 0
    mes = LCase(Range("B2"))
    For i = 1 To 12
        m = LCase(Format(DateSerial(Year(Date), i, 1), "mmmm"))
        If m = mes Then
            elmes = i
            Exit For
        End If
    Next
    '
    If elmes = 0 Then
        MsgBox "El nombre del mes no es correcto"
        Exit Sub
    End If
    '
    k = 3
    For d = 1 To 31
        dia = Weekday(DateSerial(Year(Date), elmes, d))
        Select Case dia
            Case 1, 7
                Cells(k, "B") = DateSerial(Year(Date), elmes, d)
                Cells(k, "B").NumberFormat = "[$-F800]dddd, mmmm dd, yyyy"
                k = k + 1
        End Select
    Next
End Sub

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Te anexo la macro con un cambio para obtener el último día del mes

Sub Sab_y_Dom()
'Por.Dante Amor
    Range("B3:B" & Range("B" & Rows.Count).End(xlUp).Row + 3).ClearContents
    elmes = 0
    mes = LCase(Range("B2"))
    For i = 1 To 12
        m = LCase(Format(DateSerial(Year(Date), i, 1), "mmmm"))
        If m = mes Then
            elmes = i
            Exit For
        End If
    Next
    '
    If elmes = 0 Then
        MsgBox "El nombre del mes no es correcto"
        Exit Sub
    End If
    '
    k = 3
    For d = 1 To Day(DateSerial(Year(Date), elmes + 1, 1) - 1)
        dia = Weekday(DateSerial(Year(Date), elmes, d))
        Select Case dia
            Case 1, 7
                Cells(k, "B") = DateSerial(Year(Date), elmes, d)
                Cells(k, "B").NumberFormat = "[$-F800]dddd, mmmm dd, yyyy"
                k = k + 1
        End Select
    Next
End Sub

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Gracias amigo Dante si funciona bien la macro pero me gustaría si es posible  que se ejecutara automáticamente la macro al presionar la tecla enter , ya que tengo que ejecutarla manualmente.

Pon la siguiente macro en los eventos de tu hoja

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Target.Address(False, False) <> "B2" Then Exit Sub
    If Target.Count > 1 Then Exit Sub
    '
    Range("B3:B" & Range("B" & Rows.Count).End(xlUp).Row + 3).ClearContents
    elmes = 0
    mes = LCase(Range("B2"))
    For i = 1 To 12
        m = LCase(Format(DateSerial(Year(Date), i, 1), "mmmm"))
        If m = mes Then
            elmes = i
            Exit For
        End If
    Next
    '
    If elmes = 0 Then
        MsgBox "El nombre del mes no es correcto"
        Exit Sub
    End If
    '
    k = 3
    For d = 1 To Day(DateSerial(Year(Date), elmes + 1, 1) - 1)
        dia = Weekday(DateSerial(Year(Date), elmes, d))
        Select Case dia
            Case 1, 7
                Cells(k, "B") = DateSerial(Year(Date), elmes, d)
                Cells(k, "B").NumberFormat = "[$-F800]dddd, mmmm dd, yyyy"
                k = k + 1
        End Select
    Next
End Sub

Sigue las Instrucciones para poner la macro en los eventos de worksheet

  1. Abre tu libro 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. En el panel del lado derecho copia la macro

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

¡Gracias! Amigo dante quedo perfecta la macro.

Por ahí subí otra pregunta a ver si también me podrías ayudar.

Saludos...

ATENTAMENTE.

Luis Enrique

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas