Classifique aniversários no Excel VBA - Macros fáceis do Excel

Índice

Abaixo, veremos um programa em Excel VBA que classifica aniversários para os primeiros meses e depois para os dias (portanto, ignoramos os anos). Queremos o aniversário com o menor número do mês na primeira posição. Se houver aniversários com números de meses iguais, queremos primeiro o aniversário com o número de dia mais baixo. Você está pronto?

Situação:

Observação: as datas estão no formato dos EUA. Primeiro os meses, depois os dias. Este tipo de formato depende das configurações regionais do Windows.

1. Primeiro, declaramos oito variáveis. Uma variável Date que chamamos tempDate, uma variável String que chamamos tempName. As outras seis variáveis ​​são variáveis ​​inteiras com nomes monthToCheck, dayToCheck, monthNext, dayNext, ie j.

Dim tempDate As Date, tempName As String
Dim monthToCheck As Integer, dayToCheck As Integer, monthNext As Integer, dayNext As Integer, i As Integer, j As Integer

2. Iniciamos dois loops For Next.

Para i = 2 a 13
Para j = i + 1 a 13

Exemplo: para i = 2, j = 3, 4,…, 12 e 13 são verificados.

3. Inicializamos quatro variáveis ​​inteiras. Usamos a função Mês para obter o mês de uma data e a função Dia para obter o dia de uma data.

monthToCheck = month (Cells (i, 2) .Value)
dayToCheck = day (Cells (i, 2) .Value)
monthNext = month (Cells (j, 2) .Value)
dayNext = dia (Células (j, 2) .Valor)

Por exemplo: no início, para i = 2; a data de Bregje e j = i + 1 = 2 + 1 = 3; a data de Niels será escolhida.

4. Para classificar as datas corretamente, comparamos a primeira data (monthToCheck e dayToCheck) com a próxima data (monthNext e dayNext). Se a próxima data for 'inferior', trocamos as datas e os nomes. Adicione a seguinte instrução If Then.

If (monthNext <monthToCheck) Or (monthNext = monthToCheck And dayNext <dayToCheck) Then
Fim se

Se a afirmação acima for verdadeira, trocamos as datas e os nomes.

Por exemplo: para i = 2 e j = 3, as datas de Bregje e Niels são verificadas. MonthNext = 6, monthToCheck = 2. A afirmação acima não é verdadeira porque monthNext é maior que monthToCheck. O VBA do Excel incrementa j por 1 e repete as linhas de código para i = 2 e j = 4. Você pode ver facilmente que Joost (j = 4) tem um número de mês maior do que Bregje, então vamos para o próximo. Obtemos o mesmo resultado para j = 5 e j = 6. Quando chegamos a j = 7, temos as seguintes variáveis: monthNext = 2 e dayNext = 9. MonthToCheck = 2 e dayToCheck = 12. Agora, a afirmação acima é verdadeira pois monthNext = monthToCheck e dayNext (9) é menor que dayToCheck (12).

5. Trocamos as datas. Armazenamos temporariamente uma data para tempDate, para que o Excel VBA possa trocar as datas corretamente. Adicione as seguintes linhas de código na instrução If.

'datas de troca
tempDate = Células (i, 2) .Value
Células (i, 2) .Valor = Células (j, 2) .Valor
Células (j, 2) .Value = tempDate

6. Fazemos o mesmo com os nomes. Adicione as seguintes linhas de código na instrução If.

'trocar nomes
tempName = Células (i, 1) .Value
Células (i, 1) .Valor = Células (j, 1) .Valor
Células (j, 1) .Value = tempName

7. Fechamos o segundo loop For Next (fora da instrução If).

Próximo j

Para i = 2 e j = 7, o Excel VBA trocou as datas e os nomes. Isso significa que temos Richard na primeira posição e Bregje na posição 7. Isso também significa que temos um novo monthToCheck e dayToCheck no início de nossa próxima iteração (para i = 2 e j = 8). Vamos agora comparar Richard com Dineke (j = 8). Você pode ver facilmente que não há necessidade de substituir essas datas e nomes porque Richard tem uma data 'inferior'. Na verdade, não há necessidade de substituir Richard (i = 2) por Jan (j = 9), Wendy (j = 10), Jeroen (j = 11), John (j = 12) e Debby (j = 13). Isso porque Richard tem a data 'mais baixa'. Desta forma, o Excel VBA obterá (para i = 2) a data 'mais baixa' na primeira posição. Para obter a segunda data 'mais baixa' na segunda posição, o Excel VBA repete exatamente as mesmas etapas para i = 3. Para obter a terceira data 'mais baixa' na terceira posição, o Excel VBA repete exatamente as mesmas etapas para i = 4, etc.

8. Feche o primeiro loop For Next (fora da instrução If).

Proximo eu

9. Teste seu programa.

Resultado:

Você vai ajudar o desenvolvimento do site, compartilhando a página com seus amigos

wave wave wave wave wave