小兔网

下面,我们将看一下Excel VBA的程序,该程序将生日按月顺序排列为几个月,然后按天数排列(因此忽略年份)。我们希望生日月份的最低数字位于第一个位置。如果存在具有相等月份数的生日,则我们希望首先使用具有最低天数的生日。你准备好了吗?

情况:

排序生日示例

注意:日期采用美国格式。月数第一,天数第二。这种格式取决于您的Windows区域设置。

1.首先,我们声明八个变量。我们将一个Date变量称为tempDate,将一个String变量称为tempName。其他六个变量是整数变量,其名称分别为monthToCheck,dayToCheck,monthNext,dayNext,i和j。

Dim tempDate 作为 日期,tempName 作为 字符串
Dim monthToCheck 作为 整数,dayToCheck 作为 整数,monthNext 作为 整数,dayNext 作为 整数,i 作为 整数,j 作为 整数

2.我们开始两个For Next循环。

对于 i = 2  13
    对于 j = i + 1  13

示例:对于i = 2,检查j = 3、4,...,12和13。

3.我们初始化四个Integer变量。我们使用Month函数获取日期的月份,并使用Day函数获取日期的日期。

monthToCheck = month(Cells(i,2).Value)
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语句。

如果(monthNext <monthToCheck)或者(monthNext = monthToCheck  dayNext <dayToCheck)然后

结束 。如果

如果上述说法正确,我们将交换日期和名称。

例如:对于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语句之外)。

下一个 j

对于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.测试您的程序。

结果:

在Excel VBA中对生日排序