Ordina i compleanni in Excel VBA - Macro facili di Excel

Sommario

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

Situazione:

Nota: le date sono in formato USA. Prima i mesi, poi i giorni. Questo tipo di formato dipende dalle impostazioni internazionali di Windows.

1. Innanzitutto, dichiariamo otto variabili. Una variabile Date che chiamiamo tempDate, una variabile String che chiamiamo tempName. Le altre 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

2. Iniziamo due cicli For Next.

Per i = da 2 a 13
Per j = i + 1 a 13

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

3. Inizializziamo quattro variabili intere. Usiamo la funzione Mese per ottenere il mese di una data e la funzione Giorno per ottenere il giorno di una data.

meseToCheck = mese(Cells(i, 2).Value)
dayToCheck = day(Cells(i, 2).Value)
meseSuccessivo = mese(Celle(j, 2).Valore)
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 (monthToCheck e dayToCheck) con la data successiva (monthNext e dayNext). Se la data successiva è "inferiore", scambiamo le date e i nomi. Aggiungi la seguente istruzione If Then.

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

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

Ad esempio: per i = 2 e j = 3, vengono verificate le date di Bregje e Niels. MonthNext = 6, monthToCheck = 2. L'affermazione precedente non è vera poiché monthNext è superiore a monthToCheck. Excel VBA 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 al prossimo. 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 precedente è vera since monthNext = monthToCheck e dayNext (9) è inferiore a dayToCheck (12).

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

"scambia date"
tempDate = Cells(i, 2).Value
Celle(i, 2).Valore = Celle(j, 2).Valore
Cells(j, 2).Value = tempDate

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

'scambio nomi
tempName = Cells(i, 1).Value
Celle(i, 1).Valore = Celle(j, 1).Valore
Cells(j, 1).Value = nomeTemp

7. Chiudiamo il secondo ciclo For Next (fuori dall'istruzione If).

Avanti j

Per i = 2 e j = 7, Excel VBA ha scambiato le date e i nomi. Ciò significa che abbiamo Richard alla prima posizione e Bregje alla posizione 7. Ciò significa anche che otteniamo un nuovo monthToCheck 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". Non è infatti 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 esattamente gli stessi passaggi per i = 3. Per ottenere la terza data "più bassa" nella terza posizione, Excel VBA ripete esattamente gli stessi passaggi per i = 4, eccetera.

8. Chiudere il primo ciclo For Next (fuori dall'istruzione If).

Avanti io

9. Testa il tuo programma.

Risultato:

Aiuterete lo sviluppo del sito, condividere la pagina con i tuoi amici

wave wave wave wave wave