/ / Ordina i compleanni in VBA di Excel

Ordina i compleanni in VBA di Excel

Di seguito vedremo un programma in Excel VBA quello ordina i compleanni a mesi prima e secondo giorni (quindi ignoriamoanni). Vogliamo il compleanno con il numero del mese più basso nella prima posizione. Se ci sono i compleanni con numeri di mese uguali, vogliamo prima il compleanno con il numero del giorno più basso. Siete pronti?

Situazione:

Ordina esempio compleanni

Nota: le date sono in formato USA. Mesi prima, giorni secondo. Questo tipo di formato dipende dalle impostazioni regionali di Windows.

1. In primo luogo, dichiariamo otto variabili. Una variabile Date si chiama tempDate, una variabile String che chiamiamo tempName. Le altre sei variabili sono variabili Integer con i nomi 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. Iniziamo due cicli For Next.

For i = 2 To 13
    For j = i + 1 To 13

Esempio: per i = 2, j = 3, 4, ..., 12 e 13 vengono controllati.

3. Inizializziamo quattro variabili Integer. Usiamo la funzione Mese per ottenere il mese di una data e la funzione Giorno per ottenere il giorno di una 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)

Ad esempio: all'inizio, per i = 2; la data di Bregje, e j = i + 1 = 2 + 1 = 3; verrà scelta la data di Niels.

4. Per ordinare correttamente le date, confrontiamo la prima data (meseToCheck e dayToCheck) con la data successiva (monthNext e dayNext). Se la prossima data è "inferiore", scambiamo le date e i nomi. Aggiungere la seguente istruzione If Then.

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

End If

Se l'affermazione sopra è vera, scambiamo le date e i nomi.

Per esempio: per i = 2 e j = 3, viene controllata la data di Bregje e Niels. MonthNext = 6, monthToCheck = 2. L'affermazione precedente non è vera poiché monthNext è superiore a monthToCheck. VBA di Excel incrementa j di 1 e ripete le righe di codice per i = 2 e j = 4. Puoi facilmente vedere che Joost (j = 4) ha un numero di mese più alto di Bregje, quindi passiamo a quello successivo. Otteniamo lo stesso risultato per j = 5 e j = 6. Quando arriviamo a j = 7, abbiamo le seguenti variabili: monthNext = 2 e dayNext = 9. MonthToCheck = 2 e dayToCheck = 12. Ora l'affermazione sopra è vera da monthNext = monthToCheck e dayNext (9) è inferiore a dayToCheck (12).

5. Scambiamo le date. Memorizziamo temporaneamente una data su tempDate, in modo che Excel VBA possa scambiare correttamente le date. Aggiungere le seguenti righe di codice nell'istruzione If.

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

6. Facciamo lo stesso con i nomi. Aggiungere le seguenti righe di codice nell'istruzione If.

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

7. Chiudiamo il secondo ciclo For Next (Outside the If statement).

Next j

Per i = 2 e j = 7, Excel VBA ha scambiato le datee nomi. Ciò significa che otterremo Richard nella prima posizione e Bregje nella posizione 7. Ciò significa anche che otterremo un nuovo mese per Check e dayToCheck all'inizio della nostra prossima iterazione (per i = 2 e j = 8). Confronteremo ora Richard con Dineke (j = 8). Puoi facilmente vedere che non è necessario sostituire quelle date e nomi perché Richard ha una data "inferiore". Di fatto, non è necessario sostituire Richard (i = 2) con Jan (j = 9), Wendy (j = 10), Jeroen (j = 11), John (j = 12) e Debby (j = 13). Questo perché Richard ha la data "più bassa". In questo modo Excel VBA otterrà (per i = 2) la data "più bassa" nella prima posizione. Per ottenere la seconda data "più bassa" nella seconda posizione, Excel VBA ripete gli stessi identici passaggi per i = 3. Per ottenere la terza data "più bassa" nella terza posizione, Excel VBA ripete gli stessi identici passaggi per i = 4, eccetera.

8. Chiudere il primo ciclo For Next (Outside the If statement).

Next i

9. Metti alla prova il tuo programma.

Risultato:

Ordina i compleanni in VBA di Excel

Leggi anche: