特定のルールに従って、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