この記事では、誕生日ごとにシート内のデータを並べ替えるためのマクロを作成します。データを並べ替える際に年は考慮しません。

生データは2つの列で構成され、1つには名前が含まれ、2つ目の列には生年月日が含まれます。

RawData

ロジックの説明

データを並べ替えるマクロ「sorting_names_by_birthday」を作成しました。

このマクロでは、最初に列Cに数式を挿入します。ここで、生年月日と生年月日の最初の日付の違いを見つけます。次に、データを名前で並べ替えて、データをアルファベット順に並べ替えます。これにより、2人の候補者の生年月日が同じ場合、名前がアルファベット順に表示されます。次に、昇順の差を計算してデータを並べ替え、誕生日でデータを並べ替えます。

データを並べ替えた後、列Cから数式を削除するには、列C全体を削除します。

マクロを実行するには、Alt + F8を押すか、[開発者]タブに移動して[マクロ]をクリックします。

ArrowAfterRunningMacro

コードについては以下に従ってください

Option Explicit

Sub sorting_names_by_birthday()

'Disabling screen update

Application.ScreenUpdating = False

Dim Last_Row As Long

'Finding the last row

Last_Row = ActiveCell.SpecialCells(xlCellTypeLastCell).Row

Range("C16").Select

'Getting the days of the year

'Subtracting first date of the year from date of birthday

ActiveCell.FormulaR1C1 = "=RC[-1]-DATE(YEAR(RC[-1]),1,1)"

'Dragging the formula

Range("C16:C" & Last_Row).Select

Selection.FillDown

'Sorting the data first by column A then by column C

Range("A15").CurrentRegion.Sort _

key1:=Range("C15"), order1:=xlAscending, _

key2:=Range("A15"), order2:=xlAscending, _

Header:=xlYes



'Deleting the column C

Columns("C").Delete

Range("A15").Select

End Sub

このブログが気に入ったら、FacebookやFacebookで友達と共有してください。

皆様からのご意見をお待ちしております。私たちの仕事を改善し、あなたのために改善する方法をお知らせください。 [email protected]までご連絡ください