0

特定のルールに従って、Excel 2010 でいくつかのワークシートを並べ替える必要があります。マクロが実行されるワークブック (Workbook_0) には、すべて 1 行に 1 列に 1 つずつ単語のリストがあります。たとえば、

  • A:「マンゴー」 B:「りんご」 C:「バナナ」. この範囲を Range 型の変数に保存します。

私のマクロは、たとえば次のようなシートを含む新しいワークブック (Workbook_1) を作成します。

  • "apple_count"、"apple_avg"、"banana_count"、"banana_average"、"mango_count"、"mango_avg".

私がやりたいことは、Workbook_0 で指定された順序に従って Workbook_1 のシートを並べ替えることです。例では、私は得るでしょう

  • 「mango_count」、「mango_avg」、「apple_count」、「apple_avg」、「banana_count」、「banana_avg」。

作業を楽にするために、Workbook_1 には Workbook_0 に名前が含まれているシートのみがあることを確認しています。Workbook_1 のシートを作成するときにシートを並べ替えない理由を尋ねるのは公平かもしれませんが、それは私が行う必要があることではありません。非効率的でデバッグしにくいコードを作成せずにこれを行う方法が正確にはわかりません。

どんな助けでも大歓迎です!ありがとう!

更新: @MattCrum ソリューションは非常にうまく機能します。いくつかの変更を含む最終的なコードを次に示します (大文字と小文字を区別しない、バグを修正する、別のワークブックに出力する、追加のシートを移動する)。

Dim rngTemp As Range, rngAll as Range
Dim shtTemp As Worksheet, shtFound As Worksheet

Set rngAll = Range("A1:A3")
Set shtFound = Sheets(1)

' Sort _count sheets
For Each rngTemp In rngAll
    For Each shtTemp In Workbooks(OutputFileName).Worksheets
        If LCase(shtTemp.Name) = LCase(rngTemp.Value) & "_count" Then
            shtTemp.Move , shtFound
            Set shtFound = shtTemp
        End If
    Next
Next

' Move _avg sheets to the right of correctly ordered _count sheets
For Each rngTemp In rngAll
    For Each shtTemp In Workbooks(OutputFileName).Worksheets
        If LCase(shtTemp.Name) = LCase(rngTemp.Value) & "_time" Then
            shtTemp.Move , Sheets(LCase(rngTemp.Value) & "_count")
        End If
        If LCase(shtTemp.Name) = LCase(rngTemp.Value) & "_avg" Then
            shtTemp.Move , Sheets(LCase(rngTemp.Value) & "_time")
        End If
    Next
Next
4

1 に答える 1

0

これを行うためのかなり簡単な方法を次に示します。多くのシートがある場合にどれくらい速くなるかわかりませんが、試してみてください。

Sub SortSheets()

Dim rngAll As Range, rngTemp As Range
Dim shtTemp As Worksheet, shtFound As Worksheet

Set rngAll = Sheet1.Range("A1:A3")
Set shtFound = Sheets(1)

'Sort _count sheets

    For Each rngTemp In rngAll
        For Each shtTemp In ThisWorkbook.Worksheets
            If shtTemp.Name = rngTemp.Value & "_count" Then
                shtTemp.Move , shtFound
                Set shtFound = shtTemp
            End If
        Next
    Next

'Move _avg sheets to the right of correctly ordered _count sheets

    For Each rngTemp In rngAll
        For Each shtTemp In ThisWorkbook.Worksheets
            If shtTemp.Name = rngTemp.Value & "_avg" Then
                shtTemp.Move , Sheets(rngTemp & "_count")
            End If
        Next
    Next

End Sub
于 2013-01-31T23:13:23.570 に答える