Excel 将以前筛选的所有数据从所有工作表复制到另一个工作表

Excel 将以前筛选的所有数据从所有工作表复制到另一个工作表,excel,vba,Excel,Vba,我有一本大约63页的工作簿。我想从所有工作表中获取所有过滤数据(由宏过滤),并将它们粘贴到单独的工作表中 工作表的数据范围不同。如果有任何数据,它们都将从第15行的A列开始。filter宏将筛选其中一列中的特定值,从而区分每个工作表中的行 我需要复制从A15范围开始的所有过滤数据,该范围的最后一行是AI。这只是一个问题,如果有任何行可以得到AI复制范围内的数字,那么需要多少行 我让它复制整个工作表,而不是过滤数据到另一个工作表,但它只复制了工作表1 Sub rangeToNew_Try2() D

我有一本大约63页的工作簿。我想从所有工作表中获取所有过滤数据(由宏过滤),并将它们粘贴到单独的工作表中

工作表的数据范围不同。如果有任何数据,它们都将从第15行的A列开始。filter宏将筛选其中一列中的特定值,从而区分每个工作表中的行

我需要复制从A15范围开始的所有过滤数据,该范围的最后一行是AI。这只是一个问题,如果有任何行可以得到AI复制范围内的数字,那么需要多少行

我让它复制整个工作表,而不是过滤数据到另一个工作表,但它只复制了工作表1

Sub rangeToNew_Try2()
Dim newBook As Excel.Workbook
Dim rng As Excel.Range

Set newBook = Workbooks.Add

Set rng = ThisWorkbook.Worksheets("Sheet1").Cells.SpecialCells(xlCellTypeVisible)

rng.Copy newBook.Worksheets("Sheet1").Range("A1")
End Sub

您可以使用
工作表。使用Drange
只提供包含数据的范围,然后您可以应用
范围。SpecialsCells
只提供过滤后的数据

要帮助调试代码,请设置断点并使用即时窗口查看范围,即:

?rng.Address
(问号打印出以下内容。)

此功能应满足您的需要:

Sub CopyFilteredDataToNewWorkbook()

    Dim newBook As Excel.Workbook
    Dim rng As Excel.Range
    Dim sht As Excel.Worksheet
    Dim rowoffsetcount As Long
    Dim newsht As Excel.Worksheet

    Set newBook = Workbooks.Add

    ' ThisWorkbook.Worksheets is the same as the Sheets or Worksheets object, but more explicit
    For Each sht In ThisWorkbook.Worksheets

        ' Get the used rows and columns
        Set rng = sht.UsedRange

        ' Offset the range so it starts at row 15
        rowoffsetcount = 15 - rng.Row
        Set rng = rng.Offset(rowoffsetcount)

        ' Check there will be something to copy
        If (rng.Rows.Count - rowoffsetcount > 0) Then

            ' Reduce the number of rows in the range so it ends at the same row
            Set rng = rng.Resize(rng.Rows.Count - rowoffsetcount)

            ' Check that there is a sheet we can copy it to
            On Error Resume Next
            Set newsht = Nothing
            Set newsht = newBook.Worksheets(sht.Index)
            On Error GoTo 0

            ' We have run out of sheets, add another at the end
            If (newsht Is Nothing) Then
                Set newsht = newBook.Sheets.Add(, newBook.Worksheets(newBook.Worksheets.Count))
            End If

            ' Give it the same name
            newsht.Name = sht.Name

            ' Get the range of visible (i.e. unfiltered) rows
            ' (can't do this before the range resize as that doesn't work on disjoint ranges)
            Set rng = rng.SpecialCells(xlCellTypeVisible)

            ' Paste the visible data into the new sheet
            rng.Copy newsht.Range("A1")

        End If

    Next

End Sub

您可以使用
工作表。使用Drange
只提供包含数据的范围,然后您可以应用
范围。SpecialsCells
只提供过滤后的数据

要帮助调试代码,请设置断点并使用即时窗口查看范围,即:

?rng.Address
(问号打印出以下内容。)

此功能应满足您的需要:

Sub CopyFilteredDataToNewWorkbook()

    Dim newBook As Excel.Workbook
    Dim rng As Excel.Range
    Dim sht As Excel.Worksheet
    Dim rowoffsetcount As Long
    Dim newsht As Excel.Worksheet

    Set newBook = Workbooks.Add

    ' ThisWorkbook.Worksheets is the same as the Sheets or Worksheets object, but more explicit
    For Each sht In ThisWorkbook.Worksheets

        ' Get the used rows and columns
        Set rng = sht.UsedRange

        ' Offset the range so it starts at row 15
        rowoffsetcount = 15 - rng.Row
        Set rng = rng.Offset(rowoffsetcount)

        ' Check there will be something to copy
        If (rng.Rows.Count - rowoffsetcount > 0) Then

            ' Reduce the number of rows in the range so it ends at the same row
            Set rng = rng.Resize(rng.Rows.Count - rowoffsetcount)

            ' Check that there is a sheet we can copy it to
            On Error Resume Next
            Set newsht = Nothing
            Set newsht = newBook.Worksheets(sht.Index)
            On Error GoTo 0

            ' We have run out of sheets, add another at the end
            If (newsht Is Nothing) Then
                Set newsht = newBook.Sheets.Add(, newBook.Worksheets(newBook.Worksheets.Count))
            End If

            ' Give it the same name
            newsht.Name = sht.Name

            ' Get the range of visible (i.e. unfiltered) rows
            ' (can't do this before the range resize as that doesn't work on disjoint ranges)
            Set rng = rng.SpecialCells(xlCellTypeVisible)

            ' Paste the visible data into the new sheet
            rng.Copy newsht.Range("A1")

        End If

    Next

End Sub

嗨,车头。我能确认一下你想要实现什么吗?您是否试图循环所有过滤值,并在newbook的“Sheet1”中一个接一个地显示所有范围,然后依次显示。或者你想为那本书中的每一页都创建一个新的工作表?@Trum我有一个宏,可以根据某些条件过滤63页中的K行。我希望将所有过滤后的数据复制并粘贴到新工作表,以便对其应用透视表。过滤后的数据始终从A15行开始,到A15行结束AI@Trum问题是,当工作完成时,它就完成了,我只过滤打开的工作。因此,每张图纸中的行数将减少。所以我只需要选择在任何给定的基础上改变的过滤数据。我能确认一下你想要实现什么吗?您是否试图循环所有过滤值,并在newbook的“Sheet1”中一个接一个地显示所有范围,然后依次显示。或者你想为那本书中的每一页都创建一个新的工作表?@Trum我有一个宏,可以根据某些条件过滤63页中的K行。我希望将所有过滤后的数据复制并粘贴到新工作表,以便对其应用透视表。过滤后的数据始终从A15行开始,到A15行结束AI@Trum问题是,当工作完成时,它就完成了,我只过滤打开的工作。因此,每张图纸中的行数将减少。所以我只需要选择在任何给定基础上改变的过滤数据。嘿,谢谢你的回复。我想你在这里比我早几光年,而我并没有遵循你发布的答案。你能举个例子吗?嘿,尼克,谢谢你的回复。我认为你在这里比我早几光年,而我没有遵循你发布的答案,你能举个例子吗?