Di seguito vedremo un programma in Excel VBA che ordina i compleanni di mesi prima e la seconda giorni (quindi ignoriamo anni). Vogliamo che il compleanno con il più basso numero di mese alla prima posizione. Se ci sono compleanni con numero uguale mese, vogliamo che il compleanno con il numero del giorno dal più basso. Siete pronti? Situazione:

Sort Birthdays Example

Nota: Le date sono in formato USA. Mesi prima, seconda giorni. Questo tipo di formato dipende dalle vostre finestre Impostazioni internazionali.

  1. In primo luogo, si dichiara otto variabili. Una variabile che chiamiamo Data tempDate, una variabile String che chiamiamo tempname. Gli altri sei variabili sono variabili intere con 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
  1. Iniziamo Per due cicli successivi.

For i = 2 To 13

For j = i + 1 To 13

Esempio: per i = 2, j = 3, 4, …​, 12 e 13 sono controllati.

  1. inizializziamo quattro variabili intere. Usiamo la funzione Month 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; sarà scelto la data di Niels.

  1. Per ordinare le date correttamente, mettiamo a confronto la prima data (monthToCheck e dayToCheck) con la data successiva (monthNext e dayNext). Se la data è successiva ‘abbassare’, ci scambiamo le date e nomi. Aggiungere la seguente If Then.

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

End If

Se la dichiarazione di cui sopra è vero, ci scambiamo le date e nomi.

Ad esempio: per i = 2 e j = 3, la data di Bregje e Niels vengono controllati. MonthNext = 6, monthToCheck = 2. La dichiarazione di cui sopra non è vero in quanto monthNext è superiore monthToCheck. Excel VBA incrementi j da 1 e ripete le linee di codice per i = 2 e j = 4. Si può facilmente vedere che Joost (j = 4) ha un numero maggiore di mese Bregje, così andiamo a quello successivo. Otteniamo lo stesso risultato per j = 5 e j = 6. Quando si arriva a j = 7, abbiamo le seguenti variabili: monthNext = 2 e dayNext = 9. MonthToCheck = 2 e dayToCheck = 12. Ora, la dichiarazione di cui sopra è vero poiché monthNext = monthToCheck e dayNext (9) è inferiore dayToCheck (12).

  1. di collegamento: / VBA-esempi-casse mobili valori [di swap] le date. Abbiamo memorizzare temporaneamente una data ad tempDate, in modo che Excel VBA può scambiare le date in modo corretto. Aggiungere le seguenti righe di codice nella dichiarazione If.

'swap dates

tempDate = Cells(i, 2).Value

Cells(i, 2).Value = Cells(j, 2).Value

Cells(j, 2).Value = tempDate
  1. Facciamo lo stesso con i nomi. Aggiungere le seguenti righe di codice nella dichiarazione If.

'swap names

tempName = Cells(i, 1).Value

Cells(i, 1).Value = Cells(j, 1).Value

Cells(j, 1).Value = tempName
  1. Chiudiamo il secondo ciclo For Next (Fuori dalla If).

Next j

Per i = 2 e j = 7, Excel VBA scambiato le date e nomi. Questo significa che otteniamo Richard alla prima posizione e Bregje alla posizione 7. Ciò significa anche che otteniamo una nuova monthToCheck e dayToCheck all’inizio del nostro successiva iterazione (per i = 2 e j = 8). Noi ora confrontare con Richard Dineke (j = 8). Si può facilmente vedere che non v’è alcuna necessità di sostituire quelle date e nomi, perché Richard ha una data ‘inferiore’. È un dato di fatto, non v’è alcuna necessità di sostituire Richard (i = 2) con Jan (j = 9), Wendy (j = 10), Jeroen (j = 11), Giovanni (j = 12) e Debby (j = 13). Questo perché Richard ha la data ‘più basso’. In questo modo Excel VBA otterrà (per i = 2) la data di ‘più basso’ alla prima posizione. Per ottenere il secondo ‘più basso’ data alla seconda posizione, Excel VBA ripete la stessa procedura per i = 3. Per ottenere il terzo ‘più basso’ data alla terza posizione, Excel VBA ripete la stessa procedura per i = 4, ecc

  1. Chiudere il primo ciclo For Next (Fuori dalla If).

Next i
  1. Testate il programma.

Risultato:

Sort Birthdays in Excel VBA