以下を学習して適応させることができます。これが何が起こっているかの概要です。
- セル A5 から始まるスタッフ テーブルがあり、列 G にオフィスのリストがあります。
- G5 から下に向かって (この列のデータに空白がないと仮定して) W1 にコピーしています。
- 範囲 W1 から下に向かって重複を削除しています。
- 次に、高度なフィルターを使用して、各オフィスのデータをセル Z1 から始まる領域にコピーし、このデータをループ処理します。
- このフィルター処理されたデータは、現在の Office 名 (条件) から名前が付けられた新しいワークシートに移動 (カット) されます。
- 各高度なフィルターの後、セル W2 が削除され、W3 の値が上に移動して、次のフィルター操作に使用できるようになります。
これは、最後に使用したセルに移動するために Ctrl-End を押すと、必要以上に移動することを意味します。必要に応じて、これを解決する方法を見つけることができます;)。
Sub SheetsFromFilter()
Dim wsCurrent As Worksheet
Dim wsNew As Worksheet
Dim iLeft As Integer
Set wsCurrent = ActiveSheet
Application.ScreenUpdating = False
Range("G5", Range("G5").End(xlDown)).Copy Range("W1")
Range("W1").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes
iLeft = Range("W1").CurrentRegion.Rows.Count - 1
Do While iLeft > 0
wsCurrent.Range("A5").CurrentRegion.AdvancedFilter xlFilterCopy, _
wsCurrent.Range("W1:W2"), wsCurrent.Range("Z1")
Set wsNew = Worksheets.Add
wsCurrent.Range("Z1").CurrentRegion.Cut wsNew.Range("A1")
wsNew.Name = wsCurrent.Range("W2").Value
wsCurrent.Range("W2").Delete xlShiftUp
iLeft = iLeft - 1
Loop
wsCurrent.Range("W1").Clear
Application.ScreenUpdating = True
End Sub
ところで、特定のファイル用にこれを変更するつもりはありません。これはあなたがやるべきことです(または誰かにお金を払ってください;))。
ところで、通常の (Advanced ではなく) Filter を使用して行うことができます。列をコピーして重複を削除します。これには、ワークシートの見かけのサイズを大きくしすぎないという利点があります。しかし、私はこのようにすることにしました;)。
追加:まあ、オートフィルターでもこれを達成することに触発されました:
Sub SheetsFromAutoFilter()
Dim wsCurrent As Worksheet
Dim wsNew As Worksheet
Dim iLeft As Integer
Set wsCurrent = ActiveSheet
Application.ScreenUpdating = False
Range("G5", Range("G5").End(xlDown)).Copy Range("W1")
Range("W1").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes
iLeft = Range("W1").CurrentRegion.Rows.Count - 1
Do While iLeft > 0
Set wsNew = Worksheets.Add
With wsCurrent.Range("A5").CurrentRegion
.AutoFilter field:=7, _
Criteria1:=wsCurrent.Range("W1").Offset(iLeft).Value
.Copy wsNew.Range("A1")
.AutoFilter
End With
wsNew.Name = wsCurrent.Range("W1").Offset(iLeft).Value
iLeft = iLeft - 1
Loop
wsCurrent.Range("W1").CurrentRegion.Clear
Application.ScreenUpdating = True
End Sub
[両方の手順は、定義済みの名前といくつかのエラー処理/チェックを使用して改善できます。]