Razvrstavanje rođendana u programu Excel VBA - Jednostavni makroi programa Excel

Sadržaj

U nastavku ćemo pogledati program u Excel VBA da sređuje rođendane na prve mjesece i druge dane (pa zanemarujemo godine). Želimo rođendan s najnižim mjesečnim brojem na prvom mjestu. Ako postoje rođendani s jednakim brojevima mjeseci, prvo želimo rođendan s najmanjim brojem dana. Jesi li spreman?

Situacija:

Napomena: Datumi su u američkom formatu. Mjeseci prvi, dani drugi. Ova vrsta formata ovisi o regionalnim postavkama vašeg sustava Windows.

1. Prvo, deklariramo osam varijabli. Jednu varijablu datuma nazivamo tempDate, jednu varijablu String nazivamo tempName. Ostalih šest varijabli su integer varijable s imenima monthToCheck, dayToCheck, monthNext, dayNext, i i j.

Priguši tempDate kao datum, tempName kao niz
Zatamni mjesecToCheck kao cijeli broj, dayToCheck kao cijeli broj, monthNext kao cijeli broj, dayNext kao cijeli broj, i kao cijeli broj, j kao cijeli broj

2. Pokrećemo dvije petlje For Next.

Za i = 2 do 13
Za j = i + 1 do 13

Primjer: za i = 2 provjerava se j = 3, 4,…, 12 i 13.

3. Pokrećemo četiri integer varijable. Koristimo funkciju Mjesec za dobivanje mjeseca datuma, a funkciju Dan za datum datuma.

monthToCheck = month (Ćelije (i, 2). Vrijednost)
dayToCheck = day (Ćelije (i, 2). Vrijednost)
monthNext = month (ćelije (j, 2) .Vrijednost)
dayNext = day (Ćelije (j, 2). Vrijednost)

Na primjer: na početku, za i = 2; datum Bregje, a j = i + 1 = 2 + 1 = 3; bit će izabran datum Niels.

4. Da bismo pravilno sortirali datume, uspoređujemo prvi datum (monthToCheck i dayToCheck) sa sljedećim datumom (monthNext i dayNext). Ako je sljedeći datum "niži", mijenjamo datume i imena. Dodajte sljedeću naredbu If Then.

Ako (monthNext <monthToCheck) Ili (monthNext = monthToCheck I dayNext <dayToCheck) Tada
Završi ako

Ako je gornja tvrdnja točna, mijenjamo datume i imena.

Na primjer: za i = 2 i j = 3 provjerava se datum Bregje i Niels. MonthNext = 6, monthToCheck = 2. Gornja tvrdnja nije točna jer je monthNext viši od monthToCheck. Excel VBA povećava j za 1 i ponavlja linije koda za i = 2 i j = 4. Možete lako vidjeti da Joost (j = 4) ima veći broj mjeseca od Bregja, pa idemo na sljedeći. Dobivamo isti rezultat za j = 5 i j = 6. Kad dođemo do j = 7, imamo sljedeće varijable: monthNext = 2 i dayNext = 9. MonthToCheck = 2 i dayToCheck = 12. Sada je gornja tvrdnja istinita od monthNext = monthToCheck i dayNext (9) je niži od dayToCheck (12).

5. Zamjenjujemo datume. Privremeno spremamo jedan datum u tempDate, tako da Excel VBA može ispravno zamijeniti datume. Dodajte sljedeće kodne retke u naredbu If.

'datumi zamjene
tempDate = Ćelije (i, 2) .Vrijednost
Stanice (i, 2) .Vrijednost = Ćelije (j, 2) .Vrijednost
Stanice (j, 2) .Vrijednost = tempDate

6. Isto radimo s imenima. Dodajte sljedeće kodne retke u naredbu If.

'zamijeniti imena
tempName = Cells (i, 1) .Vrijednost
Stanice (i, 1) .Vrijednost = Ćelije (j, 1) .Vrijednost
Stanice (j, 1) .Vrijednost = tempName

7. Zatvaramo drugu petlju For Next (Izvan naredbe If).

Sljedeće j

Za i = 2 i j = 7, Excel VBA je zamijenio datume i imena. To znači da imamo Richarda na prvoj poziciji, a Bregje na poziciji 7. To također znači da dobivamo novi mjesecToCheck i dayToCheck na početku naše sljedeće iteracije (za i = 2 i j = 8). Sada ćemo usporediti Richarda s Dinekeom (j = 8). Lako možete vidjeti da nema potrebe mijenjati te datume i imena jer Richard ima 'niži' datum. Zapravo, nema potrebe zamijeniti Richarda (i = 2) s Jan (j = 9), Wendy (j = 10), Jeroenom (j = 11), Johnom (j = 12) i Debby (j = 13). To je zato što Richard ima 'najniži' datum. Na ovaj način Excel VBA će dobiti (za i = 2) 'najniži' datum na prvom mjestu. Da bi dobio drugi "najniži" datum na drugoj poziciji, Excel VBA ponavlja potpuno iste korake za i = 3. Da bi dobio treći "najniži" datum na trećoj poziciji, Excel VBA ponavlja potpuno iste korake za i = 4, itd.

8. Zatvorite prvu petlju For Next (Izvan naredbe If).

Sljedeći i

9. Testirajte svoj program.

Proizlaziti:

Vi ćete pomoći u razvoju web stranice, dijeljenje stranicu sa svojim prijateljima

wave wave wave wave wave