以下は、私たちは(私たちは年を無視して)第一及び第二日間ヶ月に誕生日をソートエクセルVBAでプログラムを見ていきます。私たちは、最初の位置で最低の月の番号と誕生日をしたいです。同じ月の番号と誕生日がある場合は、我々は最初に最低一日数と誕生日をしたいです。準備はできたか?状況:

Sort Birthdays Example

注:日付は米国のフォーマットです。数ヶ月、第一、第二日。フォーマットのこのタイプは、あなたの窓地域の設定に依存します。

1.まず、我々は、8つの変数を宣言します。我々はtempDateを呼び出す1つの日付変数は、1つの文字列変数我々はTEMPNAMEを呼び出します。他の6つの変数は、名前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.私たちは、次のループのために2を起動します。

For i = 2 To 13

For j = i + 1 To 13

例:私は2、J = 3,4、…​、12および13がチェックされ=ため。

3.私たちは、4つの整数の変数を初期化します。私たちは、日付の日を取得するには、日付とデイ機能の月を取得するために、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.私たちは次の日付(monthNextとdayNext)との最初の日付(monthToCheckとdayToCheck)を比較、正しく日付をソートします。次の日は「下げる」の場合、我々は、日付と名前を交換します。 Thenステートメント場合は、以下を追加します。

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

End If

上記の文は真であるならば、我々は、日付と名前を交換します。

例えば:私は2とj = 3 =のために、Bregjeとニールスの日付がチェックされます。 monthNextがmonthToCheckより高いのでMonthNext = 6、monthToCheck = 2.上記の文は真ではありません。 1によるエクセルVBA刻みjとコード行を繰り返し、私は= 4. 2とjを=のために簡単にJoostのは(J = 4)Bregjeより高い月の番号を持っているので、私たちは、次のいずれかに行くことがわかります。 monthNext = 2とdayNext = 9 MonthToCheck = 2とdayToCheck = 12.今、上記の文は真である:私たちは、J = 7に到着すると、我々は次の変数を持つJ = 5とj = 6で同じ結果を得ますmonthNext = monthToCheckとdayNext(9)のでdayToCheck(12)よりも低いです。

5.私たちは スワップ日付。私たちは、一時的にエクセルVBAが正しく日付を入れ替えることができそうという、tempDateに1つの日付を格納します。 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.私たちは、(if文の外で)次のループのために第二を閉じます。

Next j

私は2とj = 7 =については、ExcelのVBAは、日付と名前を入れ替え。ことは、我々はまた、(私は2とj = 8 =のために)私たちは私たちの次の反復の開始時に新しいmonthToCheckとdayToCheckを得ることを意味し、その位置7の第1の位置とBregjeでリチャードを取得します。私たちは今、Dineke(J = 8)とリチャードを比較します。あなたは簡単にリチャードが「低」の日付を持っているので、これらの日付と名前を交換する必要がないことがわかります。実際のところ、ヤン(J = 9)、ウェンディ(J = 10)、イェルーン(J = 11)、ジョン(J = 12)とデビー(jに(I = 2)リチャードを交換する必要はありません= 13)。リチャードは「最低」の日付を持っているからです。最初の位置で「最低」日付(I = 2のため)この方法では、Excel VBAを取得します。第2の位置に第二の「最低」の日付を取得するには、ExcelのVBA iは第三の位置にある第三の「最低」の日付を取得する3. =ためまったく同じ手順を繰り返すと、Excel VBAは、iが4 =ためのまったく同じ手順を繰り返しますなど

閉じる8.(if文の外)次ループの最初の。

Next i

9.あなたのプログラムをテストします。

結果:

Sort Birthdays in Excel VBA