Obtener numero de semana, día y mes en celdas separadas con macro de una fecha cualquiera

Quisiera que me ayudaran con una MACRO, que pueda separar el numero de la semana, día y mes de una fecha cualquiera por celda y que sea indefinido (pues son varias fechas), no lo quiero con formulas ya que hace que el archivo sea pesado (y no lo quiero guardar en excel tipo binario) muchas gracias por su ayuda.

1 Respuesta

Respuesta
2

H o l a:

Te anexo un par de macro para que revises cuál te funciona mejor.

Según tu imagen, la fecha la tienes en la columna D, y quieres la semana en la A, el mes en la B y el día en la C.

Macro1, el número de semana se considera empezando la semana en domingo, si quieres que el número se considere empezando la semana en lunes, cambia en esta línea de la macro el número 1 por un número 2

.Formula = "=WEEKNUM(RC[3],1)"

Sub Semana1()
'Por.Dante Amor
    u = Range("D" & Rows.Count).End(xlUp).Row
    With Range("A2:A" & u)
        .Formula = "=WEEKNUM(RC[3],1)"
        .Value = .Value
    End With
    With Range("B2:B" & u)
        .Formula = "=month(RC[2])"
        .Value = .Value
    End With
    With Range("C2:C" & u)
        .Formula = "=day(RC[1])"
        .Value = .Value
    End With
    Columns("A:C").NumberFormat = "General"
    MsgBox "Fin"
End Sub

Macro2:

De igual forma si quieres que se considere empezando en lunes, cambia el número 1 por el 2 en esta línea:

Cells(i, "A") = WorksheetFunction.WeekNum(Cells(i, "D"), 1)

Sub Semana2()
'Por.Dante Amor
    For i = 2 To Range("D" & Rows.Count).End(xlUp).Row
        Cells(i, "A") = WorksheetFunction.WeekNum(Cells(i, "D"), 1)
        Cells(i, "B") = Month(Cells(i, "D"))
        Cells(i, "C") = Day(Cells(i, "D"))
    Next
    Columns("A:C").NumberFormat = "General"
    MsgBox "Fin"
End Sub

F e l i z   A ñ o   N u e v o . Recuerda valorar la respuesta. G r a c i a s

Gracias Dante por tu pronta respuesta y las dos macros me funcionan a la perfección pero, ¿no habrá forma de que la macro se ejecute sola y no tenga que añadir un botón?

H o l a:

Para que se ejecute en automático, tiene que ocurrir un "Evento", puede ser cuando abres el libro o cuando modificas una celda de la columna D. Si quieres que se ejecute cuando se abra el libro. Pon la siguiente macro en los eventos de tu libro:

Private Sub Workbook_Open()
'Por.Dante Amor
    Semana1
End Sub

Te anexo la macro1 actualizada, cambia "Hoja1" por el nombre de tu hoja.

Sub Semana1()
'Por.Dante Amor
    Set h1 = Sheets("Hoja1")
    u = h1.Range("D" & Rows.Count).End(xlUp).Row
    With h1.Range("A2:A" & u)
        .Formula = "=WEEKNUM(RC[3],1)"
        .Value = .Value
    End With
    With h1.Range("B2:B" & u)
        .Formula = "=month(RC[2])"
        .Value = .Value
    End With
    With h1.Range("C2:C" & u)
        .Formula = "=day(RC[1])"
        .Value = .Value
    End With
    h1.Columns("A:C").NumberFormat = "General"
End Sub

Instrucciones para poner la macro en los eventos ThisWorkbook

  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 ThisWorkbook
  4. Del lado derecho copia la macro

Si quieres que se ejecute cuando modificas una fecha de la columna D, entonces pon lo siguiente en los eventos de tu hoja.

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Columns("D")) Is Nothing Then
        Semana1
    End If
End Sub

De igual forma utiliza la macro semana1 actualizada.


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. Del lado derecho copia la macro

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas