如何根据单元格内容选择多个工作表进行移动?

时间:2014-09-29 19:04:43

标签: excel vba excel-vba

我搜索谷歌无济于事。

我需要一个代码来选择多个工作表,并根据每个工作表单元格的内容移动到一本新书(1,8)。例如,单元格(1,8)中包含“fin Ops”的所有工作表都将移至book1,然后单元格(1,8)中包含“Re”的所有工作表将移至book2。

我尝试从下面的代码开始,但作为初学者有点困难:

Dim ws As Worksheet


For Each ws In ActiveWorkbook.Worksheets

 If ws.Cells(1, 8).Value = "Fin Ops" Then
 ActiveSheet.Select
End If

Next ws

非常感谢任何帮助!!

2 个答案:

答案 0 :(得分:1)

你实际上是在正确的轨道上!您有正确的想法使用for-each循环来浏览所有工作表。

在此之前您要做的是创建一些Workbook对象,这些对象将是您希望将这些工作表移动到的工作簿。你可以这样做:

Dim oBookOne As Workbook
Set oBookOne = Application.Workbooks("<workbook name here>")

对所有需要的书籍重复这一点。在For-each循环中创建所有工作簿对象后,您可以执行以下操作:

For Each ws In ActiveWorkbook.Worksheets

  If ws.Cells(1, 8).Value = "Fin Ops" Then
     ws.Move After:= oBookOne.Sheets(oBookOne.Sheets.Count)
  End If

Next ws

对于您需要过滤的每个条件重复此操作,它应该有效!

如果您需要进一步的帮助,Google就是您最好的朋友。 Here是关于工作簿对象如何工作的文档(heh),here是关于Move函数的文档。

答案 1 :(得分:0)

代码:

Sub SelectMove()
    Dim ws As String
    Dim arr() As String
    Dim w As Worksheet
    Dim c As Long

    c = 0

    For Each w In ActiveWorkbook.Worksheets
        If w.Cells(1, 8) = "Fin Ops" Then
            ws = ws & "," & w.Name
        End If
    Next

    ws = Right(ws, Len(ws) - 1)

    arr() = Split(ws, ",")

    Sheets(arr).Move
End Sub