/ / Сортирајте рођендане у Екцелу ВБА

Избор рођендана у Екцелу ВБА

У наставку ћемо погледати програм Екцел ВБА то сортира рођендане на мјесецима први и други дан (тако да игноришемогодине). Желимо рођендан са најнижим бројем месеца на првој позицији. Ако има рођендана са једнаким бројем месеци, желимо рођендан са најнижим бројем дана. Да ли сте спремни?

Ситуација:

Пример сорти рођендана

Напомена: Датуми су у америчком формату. Први месеци, Други дан. Ова врста формата зависи од регионалних подешавања вашег прозора.

1. Прво, објављујемо осам варијабли. Једна варијабла датума коју зовемо темпДате, једна променљива Стринг коју зовемо темпНаме. Остала шест променљивих су Интегер променљиве са именима монтхТоЦхецк, даиТоЦхецк, монтхНект, даиНект, и и ј.

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. Покрећемо две Фор Нект петље.

For i = 2 To 13
    For j = i + 1 To 13

Пример: за и = 2, ј = 3, 4, ..., 12 и 13 су проверени.

3. Иницијализирамо четири интегер варијабле. Ми користимо функцију Месец да добијемо месец дана и функцију Даи да добијемо датум датума.

monthToCheck = month(Cells(i, 2).Value)
dayToCheck = day(Cells(i, 2).Value)

monthNext = month(Cells(j, 2).Value)
dayNext = day(Cells(j, 2).Value)

На примјер: на почетку, за и = 2; датум Брегја, и ј = и + 1 = 2 + 1 = 3; датум Ниелса ће бити изабран.

4. Да правилно сортирамо датуме, упоређујемо први датум (монтхТоЦхецк и даиТоЦхецк) с следећим датумом (монтхНект и даиНект). Ако је следећи датум "нижи", заменимо датуме и имена. Додајте следећу изјаву Иф Тхен Тхен.

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

End If

Ако је горња изјава тачна, ми ћемо заменити датуме и имена.

На пример: за и = 2 и ј = 3, проверени су датум Брегје и Ниелса. МонтхНект = 6, монтхТоЦхецк = 2. Горе наведена изјава није тачна од монтхНект је већа од монтхТоЦхецк. Екцел ВБА појачава ј за 1 и понавља линије кода за и = 2 и ј = 4. Можете лако видети да Јоост (ј = 4) има већи број месеца од Брегја, па идемо на следећи. Добијамо исти резултат за ј = 5 и ј = 6. Када стигнемо на ј = 7, имамо следеће варијабле: монтхНект = 2 и даиНект = 9. МонтхТоЦхецк = 2 и даиТоЦхецк = 12. Сада је горња изјава тачна од монтхНект = монтхТоЦхецк и даиНект (9) је нижи од даиТоЦхецк (12).

5. Замењујемо датуме. Привремено смјестимо један датум у темпДате, тако да Екцел ВБА може исправно замијенити датуме. Додајте следеће линијске кодове у изјави Иф.

"swap dates
tempDate = Cells(i, 2).Value
Cells(i, 2).Value = Cells(j, 2).Value
Cells(j, 2).Value = tempDate

6. Ми исто радимо и са именима. Додајте следеће линијске кодове у изјави Иф.

"swap names
tempName = Cells(i, 1).Value
Cells(i, 1).Value = Cells(j, 1).Value
Cells(j, 1).Value = tempName

7. Затворимо другу петље За наредну (Изван изјаве).

Next j

За и = 2 и ј = 7, Екцел ВБА је заменио датумеи имена. То значи да смо на првом мјесту добили Ричарда и Брегје на позицији 7. То такође значи да добијемо нови мјесецТоЦхецк и даиТоЦхецк на почетку наше сљедеће итерације (за и = 2 и ј = 8). Сада ћемо упоређивати Рицхарда са Динеком (ј = 8). Можете лако да видите да нема потребе да замените датуме и имена јер Рицхард има "нижи" датум. Заправо, нема потребе да замените Рицхарда (и = 2) са Јан (ј = 9), Венди (ј = 10), Јероен (ј = 11), Јохном (ј = 12) и Деббијем = 13). То је зато што Рицхард има "најнижи" датум. На тај начин Екцел ВБА ће добити (за и = 2) "најнижи" датум на првој позицији. Да би добили други "најнижи" датум на другој позицији, Екцел ВБА понавља исте кораке за и = 3. Да би трећи "најнижи" датум добио на трећој позицији, Екцел ВБА понавља исте кораке за и = 4, итд.

8. Затворите прву петљу за наредну (изван наредбе Иф).

Next i

9. Тестирајте свој програм.

Резултат:

Избор рођендана у Екцелу ВБА

Такође прочитајте: