/ / Ordenar aniversários no Excel VBA

Ordenar aniversários no Excel VBA

Abaixo, vamos olhar para um programa em Excel VBA naquela classifica aniversários para meses primeiro e segundo dias (então nós ignoramosanos). Queremos o aniversário com o menor número do mês na primeira posição. Se houver aniversários com números de mês iguais, queremos o aniversário com o menor número de dia primeiro. Você está pronto?

Situação:

Ordenar Aniversários Exemplo

Nota: as datas estão no formato dos EUA. Meses primeiro, segundo dia. Esse tipo de formato depende das configurações regionais do Windows.

1. Primeiro, declaramos oito variáveis. Uma variável Date chamamos tempDate, uma variável String que chamamos tempName. As outras seis variáveis ​​são variáveis ​​Integer com nomes monthToCheck, dayToCheck, monthNext, dayNext, i e 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. Começamos dois loops For Next.

For i = 2 To 13
    For j = i + 1 To 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 = day(Cells(j, 2).Value)

Por exemplo: no início, para i = 2; a data de Bregje, ej = 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 declaração If Then.

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

End If

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

Por exemplo: para i = 2 e j = 3, a data de Bregje e Niels é verificada. MonthNext = 6, monthToCheck = 2. A declaração acima não é verdadeira, já que monthNext é maior que monthToCheck. O Excel VBA 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 que Bregje, então vamos para o próximo. Obtemos o mesmo resultado para j = 5 ej = 6. Quando chegamos em j = 7, temos as seguintes variáveis: monthNext = 2 e dayNext = 9. MonthToCheck = 2 e dayToCheck = 12. Agora a afirmação acima é verdadeira desde monthNext = monthToCheck e dayNext (9) é menor que dayToCheck (12).

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

"swap dates
tempDate = Cells(i, 2).Value
Cells(i, 2).Value = Cells(j, 2).Value
Cells(j, 2).Value = tempDate

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

"swap names
tempName = Cells(i, 1).Value
Cells(i, 1).Value = Cells(j, 1).Value
Cells(j, 1).Value = tempName

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

Next j

Para i = 2 e j = 7, o Excel VBA trocou as datase nomes. Isso significa que nós pegamos Richard na primeira posição e Bregje na posição 7. Isso também significa que nós 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 "mais baixa". De fato, 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 as mesmas etapas para i = 4, etc.

8. Feche o primeiro loop For Next (Outside the If).

Next i

9. Teste seu programa.

Resultado:

Ordenar aniversários no Excel VBA

Leia também: