下面,我们将看一下Excel VBA中的程序,该程序将生日按月顺序排列为几个月,然后按天数排列(因此忽略年份)。我们希望生日月份的最低数字位于第一个位置。如果存在具有相等月份数的生日,则我们希望首先使用具有最低天数的生日。你准备好了吗?
情况:
注意:日期采用美国格式。月数第一,天数第二。这种格式取决于您的Windows区域设置。
1.首先,我们声明八个变量。我们将一个Date变量称为tempDate,将一个String变量称为tempName。其他六个变量是整数变量,其名称分别为monthToCheck,dayToCheck,monthNext,dayNext,i和j。
Dim monthToCheck 作为 整数,dayToCheck 作为 整数,monthNext 作为 整数,dayNext 作为 整数,i 作为 整数,j 作为 整数
2.我们开始两个For Next循环。
对于 j = i + 1 至 13
示例:对于i = 2,检查j = 3、4,...,12和13。
3.我们初始化四个Integer变量。我们使用Month函数获取日期的月份,并使用Day函数获取日期的日期。
dayToCheck = day(Cells(i,2).Value)
monthNext = month(Cells(j,2).Value)
dayNext = day(Cells(j,2)。值)
例如:开始时,对于i = 2;Bregje的日期,并且j = i +1 = 2 +1 = 3;将选择Niels的日期。
4.为了正确地对日期进行排序,我们将第一个日期(monthToCheck和dayToCheck)与下一个日期(monthNext和dayNext)进行比较。如果下一个日期是“较低的”,我们将交换日期和名称。添加以下If 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语句中添加以下代码行。
tempDate = Cells(i,2).Value
Cells(i,2).Value = Cells(j,2).Value
Cells(j,2).Value = tempDate
6.我们对名称也一样。在If语句中添加以下代码行。
tempName = Cells(i,1).Value
Cells(i,1).Value = Cells(j,1).Value
Cells(j,1).Value = tempName
7.关闭第二个For Next循环(If语句之外)。
对于i = 2和j = 7,Excel VBA交换了日期和名称。这意味着我们将Richard放在第一位置,将Bregje放在位置7。这也意味着我们在下一次迭代的开始处获得一个新的monthToCheck和dayToCheck(对于i = 2和j = 8)。现在,我们将Richard与Dineke(j = 8)进行比较。您可以轻松地看到,由于Richard的日期较低,因此无需替换这些日期和名称。实际上,无需将Jan(j = 9),Wendy(j = 10),Jeroen(j = 11),John(j = 12)和Debby(j)替换Richard(i = 2)。 = 13)。那是因为理查德的“最低”日期。这样,Excel VBA将在第一个位置获得(最低i = 2)“最低”日期。若要在第二个位置获得第二个“最低”日期,Excel VBA将对i = 3重复相同的步骤。要获得第三个“最低”的日期,
8.关闭第一个For Next循环(If语句之外)。
9.测试您的程序。
结果: