Code Library

M · UDF

fnLastWeekday

Última ocorrência de um dia da semana num mês.

Categoria: Data e horaTipo: UDFVersão: v1.1Fonte: Paulo André Jesus — OfficeTuningAtualizado em: 25/09/2026
Documentação completa na Function Library →

Sintaxe

fnLastWeekday(Ano as number, Mes as number, DiaDaSemana as number) as nullable date

Argumentos

NomeTipoObrigatórioDescrição
AnonumberSimAno.
MesnumberSimMês, de 1 a 12.
DiaDaSemananumberSim0 = segunda ... 6 = domingo.

Retorno

nullable date

Código completo

let
    fnLastWeekday = (Ano as number, Mes as number, DiaDaSemana as number) as nullable date =>
        let
            vUltimoDia = Date.EndOfMonth(#date(Ano, Mes, 1)),
            // Dias a voltar a partir do último dia do mês (0 a 6); 0 = segunda ... 6 = domingo
            vDesloc = Number.Mod(Date.DayOfWeek(vUltimoDia, Day.Monday) - DiaDaSemana + 7, 7)
        in
            // Dia fora de 0-6 → null
            if not List.Contains({0 .. 6}, DiaDaSemana) then null
            else Date.AddDays(vUltimoDia, -vDesloc),

    Documentacao = [
        Documentation.Name = "fnLastWeekday",
        Documentation.Description = "Última ocorrência de um dia da semana num mês.",
        Documentation.LongDescription = "DiaDaSemana vai de 0 (segunda) a 6 (domingo), a mesma numeração de Date.DayOfWeek(data, Day.Monday). Retorna null quando DiaDaSemana está fora de 0-6.",
        Documentation.Category = "Data e hora",
        Documentation.Author = "Paulo André Jesus",
        Documentation.Version = "1.1",
        Documentation.Examples = {
            [Description = "Última sexta-feira de março de 2025", Code = "fnLastWeekday(2025, 3, 4)", Result = "#date(2025, 3, 28)"],
            [Description = "Última segunda-feira de novembro de 2024", Code = "fnLastWeekday(2024, 11, 0)", Result = "#date(2024, 11, 25)"],
            [Description = "Último domingo de fevereiro de 2026", Code = "fnLastWeekday(2026, 2, 6)", Result = "#date(2026, 2, 22)"]
        }
    ]
in
    Value.ReplaceType(fnLastWeekday, Value.ReplaceMetadata(Value.Type(fnLastWeekday), Documentacao))

Exemplos

fnLastWeekday(2025, 3, 4)
// #date(2025, 3, 28)  última sexta-feira de março

fnLastWeekday(2024, 11, 0)
// #date(2024, 11, 25)

Dicas e observações

💡 DiaDaSemana fora de 0–6 retorna null.