/ Excel VBAでの誕生日のソート

Excel VBAで誕生日をソートする

以下では、 Excel VBA それ 一種の誕生日 最初と最後の数ヶ月に数ヶ月に(私たちは無視する年)。月の数字が最も低い誕生日を最初の位置にしたい。月が等しい誕生日がある場合、最初に一番低い誕生日が必要です。準備はできたか?

状況:

誕生日の並べ替えの例

注:日付はUSフォーマットです。最初の月、2番目の日。この形式の形式は、Windowsの地域設定によって異なります。

まず、8つの変数を宣言します。 tempDateという1つのDate変数、tempNameという1つのString変数。他の6つの変数は、monthToCheck、dayToCheck、monthNext、dayNext、i、およびjという名前のInteger変数です。

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 Nextループを開始します。

For i = 2 To 13
    For j = i + 1 To 13

例:i = 2の場合、j = 3,4、...、12と13がチェックされます。

3. 4つの整数変数を初期化します。 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).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よりも高いため、trueではありません。 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に1つの日付を保存するので、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. 2番目のFor Nextループ(Ifステートメントの外側)を閉じます。

Next j

i = 2およびj = 7の場合、Excel VBAは日付を交換しましたと名前。つまり、Richardが最初のポジションに、Bregjeがポジション7になります。つまり、次の繰り返し(i = 2とj = 8)の開始時に新しいmonthToCheckとdayToCheckを取得することも意味します。リチャードとディネケを比較する(j = 8)。リチャードは「より低い」日付を持っているので、それらの日付と名前を置き換える必要がないことを容易に見ることができます。実際、リチャード(i = 2)をJan(j = 9)、Wendy(j = 10)、Jeroen(j = 11)、John(j = 12)、Debby(j)と置き換える必要はない= 13)。リチャードは「最低」の日付を持っているからです。この方法では、Excel VBAは(i = 2の場合)最初の位置で「最低」の日付を取得します。 2番目の「最も低い」日付を取得するには、Excel VBAはi = 3と同じ手順を繰り返します。3番目の「最も低い」日付を取得するには、Excel VBAはi = 4、等

8.最初のFor Nextループを閉じます(Ifステートメントの外側)。

Next i

9.プログラムをテストします。

結果:

Excel VBAで誕生日をソートする

また読む: