下面我们就来看看在Excel VBA的程序生日排序,以月第一天与第二(所以我们忽略年)。我们希望与在第一位置最低的月份数的生日。如果有相等数量每月生日,我们希望用最低的天数第一的生日。你准备好了吗?现状:

Sort Birthdays Example

注:日期是美国格式。月第一,第二日。这种类型的格式取决于您的Windows区域设置。

1.首先,我们声明8个变量。一个日期变量我们称之为tempDate,一个字符串变量我们称之为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.我们初始化四个整变量。我们使用Month函数得到一个日期和日功能月份获得一个约会的日子。

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;尼尔斯的日期将被选择。

4.日期排序正确,我们比较的第一个日期(monthToCheck和dayToCheck)与下一日期(monthNext和dayNext)。如果下一个日期是“下”,我们交换日期和名称。添加以下如果Then语句。

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

End If

如果上述说法属实,我们交换日期和名称。

例如:对于i = 2且j = 3,Bregje和尼尔斯的日期进行检查。 MonthNext = 6,由于monthNext比monthToCheck更高monthToCheck = 2上面的语句是不正确的。 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)低。

SWAP的日期。我们一个日期临时存储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交换的日期和名称。这意味着我们在第一位置和Bregje在位置7.这也意味着,我们得到一个新的monthToCheck和dayToCheck在我们的下一个迭代开始(对于i = 2和j = 8)获得理查德。现在,我们将与Dineke(J = 8)比较理查德。你可以很容易地看到,有没有需要更换的日期和名字,因为理查德有一个“下”的日期。由于事实上,也没有必要与扬(J = 9),温迪(J = 10),吉荣(J = 11),约翰·(J = 12)和黛比(j取代理查德(I = 2) = 13)。这是因为理查德有“最低”的日期。这样,Excel的VBA将获得(对于I = 2)“最低”在第一位置的日期。获得第二个“最低”日期在所述第二位置时,Excel VBA重复完全相同的步骤,对于i = 3到第三位置处获得第三个“最低”日期时,Excel VBA重复完全相同的步骤,其中i = 4,等

8.关闭第一个For接下来循环(如果语句外)。

Next i

9.测试程序。

结果:

Sort Birthdays in Excel VBA