データは2行目からあり、品番が一塊として並んでいることを前提にしていますので、コードで品番をもとに並び替えしてから操作しています。
シートは品番名で新しく作るようにしています。
データは一行ずつではなく品番ごとに一塊で新しいシートに代入しています。
一覧表はSheet1と考えてますので実際のシート名に変更してください。
Sub Test()
Dim Sh1 As Worksheet, Sh2 As Worksheet, sh As Worksheet
Dim Sh1LastRow As Long, fRow As Long
Dim c As Range
Dim shflg As Boolean
Application.ScreenUpdating = False
Set Sh1 = Sheets("Sheet1")
Sh1LastRow = Sh1.Cells(Rows.Count, "A").End(xlUp).Row
With Sh1.Sort
With .SortFields
.Clear
.Add Key:=Sh1.Range("A2"), SortOn:=xlSortOnValues
End With
.SetRange Sh1.Range(Sh1.Cells(2, "A"), Sh1.Cells(Sh1LastRow, "D"))
.Header = xlNo
.Orientation = xlTopToBottom
.Apply
End With
fRow = 2
For Each c In Sh1.Range(Sh1.Cells(2, "A"), Sh1.Cells(Sh1LastRow, "A"))
If c.Value <> c.Offset(1, 0).Value Then
shflg = False
For Each sh In Worksheets
If sh.Name = c.Value Then shflg = True
Next
If shflg = False Then
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = c.Value
End If
Set Sh2 = Sheets(c.Value)
Sh2.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Resize(c.Row - fRow + 1, 4).Value = Sh1.Range(Sh1.Cells(fRow, "A"), Sh1.Cells(c.Row, "D")).Value
Set Sh2 = Nothing
fRow = c.Offset(1, 0).Row
End If
Next
Sh1.Activate
Application.ScreenUpdating = True
Set Sh1 = Nothing
End Sub
お礼
一連のVBA3パートが完成しました。仕事で活用させて頂くのですが、月に3時間分効率化出来る見込みです。コードを読みといて、次の効率化の切り口にしたいと思います。有り難う御座いました。