Сортирајте рођендане у програму Екцел ВБА - Једноставни Екцел макрои

Преглед садржаја

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

Ситуација:

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

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

Дим темпДате Ас Дате, темпНаме Ас Стринг
Дим монтхТоЦхецк Ас Интегер, даиТоЦхецк Ас Интегер, монтхНект Ас Интегер, даиНект Ас Интегер, и Ас Интегер, ј Ас Интегер

2. Покрећемо две петље Фор Нект.

За и = 2 до 13
За ј = и + 1 до 13

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

3. Покрећемо четири интегер променљиве. Користимо функцију Месец за добијање месеца датума, а функцију Дан за датум датума.

монтхТоЦхецк = монтх (Ћелије (и, 2). Вредност)
даиТоЦхецк = даи (Ћелије (и, 2). Вредност)
монтхНект = монтх (Ћелије (ј, 2). Вредност)
даиНект = даи (Ћелије (ј, 2). Вредност)

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

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

Ако (монтхНект <монтхТоЦхецк) Или (монтхНект = монтхТоЦхецк и даиНект <даиТоЦхецк) Тада
Крај Ако

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

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

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

датуми замене
темпДате = Ћелије (и, 2) .Вредност
Ћелије (и, 2) .Вредност = Ћелије (ј, 2) .Вредност
Ћелије (ј, 2) .Вредност = темпДате

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

замени имена
темпНаме = Ћелије (и, 1) .Вредност
Ћелије (и, 1). Вредност = Ћелије (ј, 1). Вредност
Ћелије (ј, 1) .Вредност = темпНаме

7. Затварамо другу петљу Фор Нект (Изван наредбе Иф).

Даље ј

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

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

Затим сам

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

Резултат:

Ви ће помоћи развој сајта, дељење страницу са пријатељима

wave wave wave wave wave