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

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

По - долу ще разгледаме програма в Excel VBA че подрежда рождени дни до месеци първи и дни секунди (затова игнорирамегодини). Искаме рожден ден с най-нисък брой месеци на първа позиция. Ако има рождени дни с равен брой месеци, искаме рожден ден с най-нисък номер на ден първи. Готов ли си?

Ситуация:

Сортирай Пример за рождени дни

Забележка: Датите са в US Format. Първи месеци, дни втори. Този тип формат зависи от регионалните ви настройки за Windows.

1. Първо, ние декларираме осем променливи. Една променлива Дата наричаме tempDate, една String променлива, която наричаме tempName. Другите шест променливи са Integer променливи с именаToCheck, 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. Започваме два за линия Next.

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; датата на Bregje и j = i + 1 = 2 + 1 = 3; ще бъде избрана датата на Niels.

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. Затваряме втората линия For Next (Извън израза If).

Next j

За i = 2 и j = 7, Excel VBA смени датитеи имената. Това означава, че получаваме Ричард на първа позиция и Бреге на позиция 7. Това означава също, че получаваме нов месецToCheck и DayToCheck в началото на следващата итерация (за i = 2 и j = 8). Сега ще сравняваме Ричард с Dineke (j = 8). Можете лесно да видите, че няма нужда да замените тези дати и имена, защото Ричард има "по-ниска" дата. Всъщност няма нужда да замествате Ричард (i = 2) с Jan (j = 9), Wendy (j = 10), Jeroen (j = = 13). Това е така, защото Ричард има "най-ниската" дата. По този начин Excel VBA ще получи (за i = 2) най-ниската дата на първата позиция. За да получите втората "най-ниска" дата на втора позиция, Excel VBA повтаря точно същите стъпки за i = 3. За да получите третата "най-ниска" дата на третата позиция, Excel VBA повтаря точно същите стъпки за i = 4, и т.н.

8. Затворете първия ред For Next (Извън израза If).

Next i

9. Изпробвайте програмата си.

Резултат:

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

Също така се чете: