Excel 根据范围内的数据组织/排序工作簿工作表

Excel 根据范围内的数据组织/排序工作簿工作表,excel,vba,Excel,Vba,我需要根据特定规则对Excel 2010中的一些工作表进行排序。在运行宏的工作簿(工作簿0)中,我有一个单词列表,例如,所有单词都在一行中,每列一个 A:“芒果”B:“苹果”C:“香蕉”。我将此范围保存在变量 类型范围 “我的宏”创建一个新工作簿(工作簿_1),其中的工作表名为 “苹果计数”、“苹果平均值”、“香蕉计数”、“香蕉平均值”, “芒果计数”、“芒果平均值” 我想做的是根据工作簿_0中指定的顺序对工作簿_1中的工作表进行排序。在这个例子中,我将获得 “芒果计数”、“芒果平均值

我需要根据特定规则对Excel 2010中的一些工作表进行排序。在运行宏的工作簿(工作簿0)中,我有一个单词列表,例如,所有单词都在一行中,每列一个

  • A:“芒果”B:“苹果”C:“香蕉”。我将此范围保存在变量 类型范围
“我的宏”创建一个新工作簿(工作簿_1),其中的工作表名为

  • “苹果计数”、“苹果平均值”、“香蕉计数”、“香蕉平均值”, “芒果计数”、“芒果平均值”
我想做的是根据工作簿_0中指定的顺序对工作簿_1中的工作表进行排序。在这个例子中,我将获得

  • “芒果计数”、“芒果平均值”、“苹果计数”、“苹果平均值”, “香蕉计数”、“香蕉平均值”
为了让生活更轻松,我确信工作簿_1将只包含名称包含在工作簿_0中的工作表。尽管可以公平地问我为什么在创建工作簿时不对工作簿_1中的工作表进行排序,但我不需要这样做。我不确定如何在不生成低效且难以调试的代码的情况下进行此操作

非常感谢您的帮助!谢谢

更新:@MattCrum解决方案运行良好。以下是我的最终代码,其中包括一些修改(忽略大小写、修复错误、输出到其他工作簿、移动其他工作表):


这里有一个相当简单的方法——不确定如果你有很多床单,速度会有多快,但试一下:

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

谢谢,看起来应该有用,我要试试。如果我要使搜索案例独立,我可以使用
Lcase()
函数,对吗?谢谢@MattCrum,你做到了,甚至比你想象的还要好!我需要排序的工作表只是整个工作表的一个子集。您的代码不会干扰需要排序的工作表之前或之后的工作表。我只做了一些我在上面报告的小修改。特别是,在第二次排序期间,我用
Sheets(rngTemp.value和“\u count”)
替换了
Sheets(rngTemp.value和“\u count”)
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