Sub SortByProductCode()
Dim srcCell As Range ' ループ用セル
Dim workRng As Range ' 表全体の範囲
Dim codePart As String ' 型番部分
Dim ws As Worksheet ' 対象シート
Set ws = ActiveSheet
Set workRng = ws.Range("A2").CurrentRegion ' 見出し行を含む範囲を自動取得
'--- 補助列のヘッダーを設定(列 B: 大分類、列 C: 小分類)---
ws.Range("B1:C1").Value = Array("MajorNo", "MinorNo")
'--- 型番から分類番号を抽出し補助列へ書き込み ---
For Each srcCell In workRng.Columns(1).Cells
If srcCell.Row > workRng.Row Then ' 見出し行を除外
codePart = Split(srcCell.Value, ":")(0) ' 「:」より前を抽出
srcCell.Offset(0, 1).Value = Val(Split(codePart, "P")(1)) ' P の後の数字を大分類に
srcCell.Offset(0, 2).Value = Val(Split(codePart, "-")(1)) ' 「-」の後の数字を小分類に
End If
Next srcCell
'--- 大分類 → 小分類 → 型番 の順に昇順ソート ---
With workRng
.Sort Key1:=.Columns(2), Order1:=xlAscending, _
Key2:=.Columns(3), Order2:=xlAscending, _
Key3:=.Columns(1), Order3:=xlAscending, _
Header:=xlYes
End With
End Sub