Sorteerige sünnipäevad Excel VBA - lihtsad Exceli makrod

Lang L: none (table-of-contents)

Allpool vaatame programmi Exceli VBA seda sorteerib sünnipäevi esimesed kuud ja päevad teine ​​(seega ignoreerime aastaid). Soovime, et sünnipäev oleks esimesel kohal madalaima kuunumbriga. Kui on sünnipäevi, millel on võrdsed kuunumbrid, tahame kõigepealt madalaima päevanumbriga sünnipäeva. Oled sa valmis?

Olukord:

Märkus: Kuupäevad on USA vormingus. Kuud esimesed, päevad teine. Seda tüüpi vorming sõltub teie Windowsi piirkondlikest seadetest.

1. Esiteks deklareerime kaheksa muutujat. Ühe kuupäeva muutuja nimetame tempDate, ühe stringi muutuja nimetame tempName. Ülejäänud kuus muutujat on täisarvulised muutujad nimedega monthToCheck, dayToCheck, monthNext, dayNext, i ja j.

Dim tempDate kui kuupäev, tempName kui string
Dim monthToCheck As Integer, dayToCheck As Integer, monthNext As Integer, dayNext As Integer, i As Integer, j As Integer

2. Alustame kahte For Next silmust.

I = 2 kuni 13
Kui j = i + 1 kuni 13

Näide: kui i = 2, kontrollitakse j = 3, 4,…, 12 ja 13.

3. Initsialiseerime neli täisarvu muutujat. Kuupäeva kuu saamiseks kasutame funktsiooni Kuu ja kuupäeva päeva saamiseks funktsiooni Päev.

monthToCheck = kuu (lahtrid (i, 2) .Väärtus)
dayToCheck = päev (lahtrid (i, 2). Väärtus)
monthNext = kuu (lahtrid (j, 2). Väärtus)
dayNext = päev (lahtrid (j, 2). Väärtus)

Näiteks: alguses, kui i = 2; Bregje kuupäev ja j = i + 1 = 2 + 1 = 3; valitakse Nielsi kuupäev.

4. Kuupäevade õigeks sortimiseks võrdleme esimest kuupäeva (monthToCheck ja dayToCheck) järgmise kuupäevaga (monthNext ja dayNext). Kui järgmine kuupäev on madalam, vahetame kuupäevad ja nimed. Lisage järgmine lause Kui siis.

Kui (monthNext <monthToCheck) Või (monthNext = monthToCheck And dayNext <dayToCheck) Siis
Lõpp Kui

Kui ülaltoodud väide vastab tõele, vahetame kuupäevad ja nimed.

Näiteks: kui i = 2 ja j = 3, kontrollitakse Bregje ja Nielsi kuupäeva. MonthNext = 6, monthToCheck = 2. Ülaltoodud väide ei vasta tõele, kuna monthNext on kõrgem kui monthToCheck. Excel VBA suurendab j -i 1 võrra ja kordab koodiridu i = 2 ja j = 4. Saate hõlpsasti näha, et Joostil (j = 4) on kuu number suurem kui Bregjel, seega läheme järgmise juurde. Saame sama tulemuse j = 5 ja j = 6. Kui jõuame väärtuseni j = 7, on meil järgmised muutujad: monthNext = 2 ja dayNext = 9. MonthToCheck = 2 ja dayToCheck = 12. Nüüd on ülaltoodud väide tõene kuna monthNext = monthToCheck ja dayNext (9) on madalam kui dayToCheck (12).

5. Vahetame kuupäevad. Salvestame ajutiselt ühe kuupäeva tempDate'i, et Excel VBA saaks kuupäevad korralikult vahetada. Lisage If -lausele järgmised koodiridad.

'kuupäevad vahetada
tempDate = Lahtrid (i, 2). Väärtus
Lahtrid (i, 2). Väärtus = lahtrid (j, 2). Väärtus
Lahtrid (j, 2). Väärtus = tempDate

6. Sama teeme nimedega. Lisage If -lausele järgmised koodiridad.

'nimed vahetada
tempName = Lahtrid (i, 1). Väärtus
Lahtrid (i, 1). Väärtus = lahtrid (j, 1). Väärtus
Lahtrid (j, 1). Väärtus = tempName

7. Sulgeme teise For For Next (väljaspool lauset If).

Järgmine j

Kui i = 2 ja j = 7, vahetas Excel VBA kuupäevad ja nimed. See tähendab, et saame Richardi esimesele positsioonile ja Bregje positsioonile 7. See tähendab ka seda, et saame järgmise kuu alguses uue kuuToCheck ja dayToCheck (i = 2 ja j = 8). Nüüd võrdleme Richardit Dinekega (j = 8). Näete hõlpsalt, et neid kuupäevi ja nimesid pole vaja asendada, kuna Richardil on „madalam” kuupäev. Tegelikult ei ole vaja Richardit (i = 2) asendada Janiga (j = 9), Wendyga (j = 10), Jeroeniga (j = 11), Johniga (j = 12) ja Debbyga (j = 13). Seda seetõttu, et Richardil on kõige madalam kuupäev. Sel viisil saab Excel VBA (i = 2 puhul) esimesel positsioonil madalaima kuupäeva. Teise "madalaima" kuupäeva saamiseks teisel positsioonil kordab Excel VBA täpselt samu samme i = 3 jaoks. Kolmanda "madalaima" kuupäeva saamiseks kolmandal positsioonil kordab Excel VBA täpselt samu samme i = 4 korral, jne.

8. Sulgege esimene järgmiseks silmus (väljaspool lauset If).

Edasi i

9. Testi oma programmi.

Tulemus:

Te aitate arengu ala, jagades leht oma sõpradega

wave wave wave wave wave