0

4 つの「システム」シートを含むワークブックがあり、各システム シートには、さまざまなデータ収集に使用される動的な番号または後続のタブがあります。私が必要としているのは、システムとその子シートをアルファベット順にソートする方法ですが、2 つの特定のシートの間に存在します。例:

[導入/参照シート] [顧客情報シート] [システム 1] [Sys1 子 1-12] [システム 2] [Sys2 子 1-12] [システム 3] [Sys3 子 1-12] [システム 4] [Sys4 1-12] [その他のシート]

次のようなサブを並べ替えてみました

For Each w1 In Sheets
 For Each w2 In Sheets
  If w1.Range("Z1") <> "" And w2.Range("Z1") <> "" Then
   If w2.Range("Z1").Value < w1.Range("Z1").Value Then
    If w2.Range("Z1").Value = "S1L0" Then
     w2.Move after:=Cover
    Else
     w2.Move before:=w1
    End If
   End If
  End If
 Next w2
Next w1

それはうまく機能し始めますが、ループが手に負えなくなり、ターゲット範囲に「S1L0」が含まれるシートが1つあり、他のすべてがリストの最後にあります。これを機能させる方法についてのアイデアはありますか?

編集: システム シートはすべて「S1」から「S4」で始まりますが、名前が「S1 - %string%」から「S4 - %string%」に変更されます。子シートは、最初に名前が付けられた隠しシートのコピーです」 S#L#" # はそれぞれシステム番号と子番号です。子シートの名前も変更できますが、「S#L# - %string%」というパターンに従います。

4

1 に答える 1

3

これは仕事をするはずです:

Sub SortSheets()
    Dim lngParentID As Long, lngChildID As Long
    Dim wsParent As Worksheet, wsChild As Worksheet, wsLast As Worksheet

    Set wsLast = Sheets("Customer Info Sheet")
    For lngParentID = 1 To 4
        Set wsParent = GetSheet(lngParentID)
        If Not wsParent Is Nothing Then
            wsParent.Move After:=wsLast
            Set wsLast = wsParent

            For lngChildID = 1 To 12
                Set wsChild = GetSheet(lngParentID, lngChildID)
                If Not wsChild Is Nothing Then
                    wsChild.Move After:=wsLast
                    Set wsLast = wsChild
                End If
            Next lngChildID
        End If
    Next lngParentID
End Sub

Private Function GetSheet(lngParentID As Long, Optional lngChildID As Long = 0) As Worksheet
    Dim ws As Worksheet

    For Each ws In Sheets
        If (lngChildID = 0 And (ws.Name = "S" & lngParentID Or Left(ws.Name, 4) = "S" & lngParentID & " -")) Or _
            Left(ws.Name, 5) = "S" & lngParentID & "L" & Format(lngChildID, "00") Then
            Set GetSheet = ws
            Exit Function
        End If
    Next
End Function
于 2013-02-26T19:36:18.167 に答える