Neste artigo, criaremos uma macro para extrair os dias da semana entre duas datas.
Neste exemplo, temos que especificar a data de início e a data de término antes de executar a macro. A macro escolhe o valor da data de início da célula J8 e o valor da data de término da célula J9. Depois de especificar as datas de início e término, a macro pode ser executada pressionando o botão “Enviar” ou as teclas de atalho Alt + F8.
Ao executar a macro, ele retornará os dias da semana entre duas datas em uma nova planilha. A planilha recém-inserida contém os dias da semana na coluna A, seguidos da respectiva data na coluna B. A data de saída na coluna B estará no formato dd.mm.aa.
Cada semana será seguida por uma linha em branco para diferenciar entre duas semanas consecutivas.
Explicação lógica
Na macro, usamos a função Weekday para diferenciar entre dias da semana e finais de semana. A função de formato é usada para exibir a data no formato necessário.
Função de dia da semana
A função Weekday retorna um valor inteiro que representa o dia da semana.
Sintaxe
Dia da semana (Date_Value, [First_Day_Of_Week])
Date_Value especifica o valor da data para a qual você deseja encontrar o dia da semana.
Primeiro dia da semana especifica qual dia da semana deve ser considerado o primeiro dia da semana. Leva um valor inteiro ou o valor escolhido na enumeração FirstDayOfWeek como entrada. Se nenhum valor for especificado, FirstDayOfWeek.Sunday será usado como valor padrão.
Valor de enumeração |
Valor inteiro |
Observações |
FirstDayOfWeek.System |
0 |
Primeiro dia da semana especificado nas configurações do sistema |
FirstDayOfWeek.Sunday |
1 |
Domingo (padrão) |
FirstDayOfWeek.Monday |
2 |
Segunda-feira |
FirstDayOfWeek.T Terça-feira |
3 |
terça |
FirstDayOfWeek.Wed Wednesday |
4 |
quarta-feira |
FirstDayOfWeek.Thucted |
5 |
quinta-feira |
FirstDayOfWeek.Friday |
6 |
sexta-feira |
FirstDayOfWeek.Saturday |
7 |
sábado |
Como visto no código da macro, usamos Weekday (i, 2) para especificar segunda-feira como o primeiro dia da semana.
Função de formatação
A função Format pega uma expressão de data como entrada e a retorna como uma string formatada.
Sintaxe da função Format
Formato (Date_Value, format)
Date_Value especifica o valor do tipo de dados de data.
Formato usa o valor da string para especificar que tipo de formato de data é necessário.
A tabela a seguir define alguns caracteres populares que podem ser usados para criar os formatos de data / hora exigidos:
Personagem |
Descrição |
d |
exibe o dia como um número sem um zero à esquerda (1 - 31) |
dd |
exibe o dia como um número com um zero à esquerda (01 - 31) |
ddd |
exibe o dia como uma abreviatura (dom - sáb) |
dddd |
exibe o dia como um nome completo (domingo - sábado) |
C |
exibe o dia da semana como um número (1 para domingo a 7 para sábado) |
ww |
exibe a semana do ano como um número (1 - 54) |
m |
exibe o mês como um número sem um zero à esquerda (1 - 12) |
milímetros |
exibe o mês como um número com um zero à esquerda (01 - 12) |
mmm |
exibe o mês como uma abreviatura (janeiro - dezembro) |
mmmm |
exibe o mês como um nome de mês completo (janeiro - dezembro) |
q |
exibe o trimestre do ano como um número (1 - 4) |
y |
exibe o dia do ano como um número (1 - 366) |
yy |
exibe o ano como um número de 2 dígitos (00 - 99) |
aaaa |
exibe o ano como um número de 4 dígitos (100 - 9999) |
h |
exibe a hora como um número sem zeros à esquerda (0 - 23) |
hh |
exibe a hora como um número com zeros à esquerda (00 - 23) |
n |
exibe o minuto como um número sem zeros à esquerda (0 - 59) |
nn |
exibe o minuto como um número com zeros à esquerda (00 - 59) |
s |
exibe o segundo como um número sem zeros à esquerda (0 - 59) |
WL |
exibe o segundo como um número com zeros à esquerda (00 - 59) |
Para deixar uma linha em branco no final de cada semana, verificamos os domingos usando a função de dia da semana e incrementamos o valor da variável “StartingRow” em 1 para que a próxima linha permaneça vazia.
Como visto no código da macro, usamos a função Format duas vezes de maneiras diferentes. Em primeiro lugar, usamos Format (i, "ddd") para obter o dia da semana e, em segundo lugar, usamos Format (i, "dd.mm.yy") para obter a data no formato dd.mm.aaaa.
Explicação do código
Dim NewWorksheet As Worksheet
Definir NewWorksheet = Worksheets.Add
O código acima é usado para declarar o nome do objeto Worksheet como “NewWorksheet”. O método Worksheets.Add é usado para adicionar a nova planilha na coleção Worksheets. A instrução Set é usada para inicializar o objeto declarado com a folha recém-inserida.
For i = StartDate to EndDate
O loop FOR é usado para fazer um loop da data de início à data de término.
Se Dia da semana (i, 2) <6, então
A instrução IF é usada para verificar a condição e executar o código com base na condição. A condição acima verificará o retorno do valor pela função Dia da semana. Se for menor que 6, a condição IF retorna verdadeira e o código dentro da instrução IF será executado. Caso contrário, ele será ignorado.
StartingRow = 1
StartingRow = StartingRow + 1
A variável StartingRow é usada para percorrer as linhas da planilha. No início, a variável é inicializada na primeira linha. Com cada execução bem-sucedida da instrução IF, o valor da variável é incrementado em 1, movendo-se para a próxima linha na planilha.
Células (Linha inicial, 1)
A propriedade Células é usada para fazer referência a uma célula específica na planilha. As células (número_da_linha, número_da_coluna) podem ser usadas para fazer referência a qualquer célula na planilha, inserindo um número de linha e um número de coluna específicos como parâmetros. No código Cells (StartingRow, 1), 1 especifica a primeira coluna e a variável “StartingRow” define o número da linha.
Pode-se entender os códigos facilmente, pois incluí comentários junto com os códigos na macro.
Siga abaixo para o código
Option Explicit Sub ExtractWeekdays () 'Declarando duas variáveis do tipo de dados Date Dim StartDate As Date, EndDate As Date' Declarando a variável da planilha Dim NewWorksheet As Worksheet Dim StartingRow, i As Long 'Obtendo valores de data de início e data de término da planilha StartDate = Sheets ( "Macro"). Range ("J8"). Value EndDate = Sheets ("Macro"). Range ("J9"). Value 'Inicializando o número da linha inicial para a saída StartingRow = 1' Inserindo nova planilha Definir NewWorksheet = Worksheets. Adicionar For i = StartDate To EndDate 'Usando o método Weekday para verificar se é Weekday ou weekand If Weekday (i, 2) <6 Then' Inserir valor na planilha recém-inserida 'O método de formatação é usado para formatar o valor de data NewWorksheet.Cells ( StartingRow, 2) = Format (i, "dd.mm.yy") NewWorksheet.Cells (StartingRow, 1) = Format (i, "ddd") 'Atualizando o valor da variável StartingRow para mover para a próxima linha StartingRow = StartingRow + 1 End If 'Inserindo linha em branco para o fim de semana If Weekday (i, 2) = 7 Then StartingRow = StartingRow + 1 End If N ext i Definir NewWorksheet = Nothing End Sub
Se você gostou deste blog, compartilhe com seus amigos no Facebook. Além disso, você pode nos seguir no Twitter e no Facebook.
Gostaríamos muito de ouvir de você, diga-nos como podemos melhorar nosso trabalho e torná-lo melhor para você. Escreva para nós no site de e-mail