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: