/ / Сортувати день народження в Excel VBA

Сортувати день народження в Excel VBA

Нижче ми розглянемо програму в Росії Excel VBA це сортує дні народження перші місяці і дні секунди (так ми ігноруємороки) Ми хочемо день народження з найменшим номером місяця на першій позиції. Якщо є дні народження з номерами рівних місяців, ми хочемо, щоб день народження з найменшим днем ​​був першим. Ти готовий?

Ситуація:

Приклад сортування дні народження

Примітка. Дати в форматі US. Перші місяці, Дні друге. Цей тип формату залежить від вашої регіональної настройки Windows.

1. По-перше, ми оголошуємо вісім змінних. Одна змінна дати, яку ми називаємо tempDate, одна змінна String, яку ми називаємо tempName. Інші шість змінних - цілі змінні з іменами monthToCheck, dayToCheck, monthNext, dayNext, i та j.

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

Приклад: для i = 2, j = 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)

Наприклад: на початку, для i = 2; дата Брегге і j = i + 1 = 2 + 1 = 3; буде обрана дата Нільса.

4 Щоб правильно відсортувати дати, порівнюємо першу дату (monthToCheck і dayToCheck) з наступною датою (monthNext та dayNext). Якщо наступна дата є "нижчою", ми обмінюємо датами та іменами. Додайте наступне твердження If Then.

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

End If

Якщо вищенаведене твердження є істинним, ми обмінюємо датами та іменами.

Наприклад: для i = 2 і j = 3, перевіряються дата Bregje і Niels. MonthNext = 6, monthToCheck = 2. Вищенаведене твердження не є істинним, оскільки monthNext перевищує monthToCheck. Excel VBA збільшує j на 1 і повторить кодові рядки для i = 2 і j = 4. Ви можете легко побачити, що Joost (j = 4) має вищий місяць, ніж Bregje, тому ми переходимо до наступного. Ми отримуємо такий самий результат для j = 5 і j = 6. Коли ми приходимо до j = 7, ми маємо наступні змінні: monthNext = 2 і dayNext = 9. MonthToCheck = 2 і dayToCheck = 12. Тепер вищенаведене твердження є істинним з monthNext = monthToCheck, а dayNext (9) нижчий, ніж dayToCheck (12).

5. Ми обмінюємо дати. Ми тимчасово зберігаємо одну дату в tempDate, щоб Excel VBA міг правильно обміняти дату. Додайте наступні кодові рядки в операторі "if".

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

6. Ми робимо те саме з іменами. Додайте наступні кодові рядки в операторі "if".

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

7. Ми закриваємо другий для наступного циклу (За межами заяви).

Next j

Для i = 2 та j = 7 Excel VBA поміняв датуі імена. Це означає, що ми отримуємо Річарда на першій позиції, а Брегге - у позиції 7. ​​Це також означає, що ми отримаємо новий monthToCheck і dayToCheck на початку нашої наступної ітерації (для i = 2 та j = 8). Тепер порівняємо Річарда з Дінеке (j = 8). Ви можете легко побачити, що немає необхідності замінити ці дати та імена, оскільки Річард має "нижчу" дату. По суті, немає необхідності замінити Річарда (i = 2) на Яна (j = 9), Венді (j = 10), Jeroen (j = 11), John (j = 12) і Debby (j = 13). Це тому, що Річард має "найнижчу" дату. Таким чином, Excel VBA отримає (для i = 2) "найнижчу" дату на першій позиції. Щоб отримати другу "найнижчу" дату на другій позиції, Excel VBA повторює точно такі ж самі дії для i = 3. Щоб отримати третю "найнижчу" дату в третьому положенні, Excel VBA повторяє ті ж самі кроки для i = 4, тощо.

8. Закрийте перший на наступний цикл (за межами заяви).

Next i

9. Перевірте свою програму.

Результат:

Сортувати день народження в Excel VBA

Також читайте: