副本&粘贴回excel中的筛选列表

时间:2015-07-25 23:38:11

标签: excel list filter

我有一个巨大的excel表,有13k行和8列。 我一直在寻找一种方法来粘贴回过滤列表上的可见行。 我甚至从mr.excel video mr. excel podcast

获得了一个代码
        Sub PasteBack()
    ' Assumes the Filtered Sheet1 is active
    Set DataToCopy = Sheet2.Range("A1").CurrentRegion
    n = 2 ' index for range to copy from Sheet2 one row at a time, skipping headers
    For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row ' row 1 is header
        If Not Rows(i).Hidden Then
            DataToCopy.Offset(n - 1).Resize(1).Copy Cells(i, 1)
            n = n + 1
            If n > DataToCopy.Rows.Count Then Exit Sub
        End If
    Next i
End Sub

此代码的问题是,如果数据很多,excel就会变得没有响应。如果数据较少,它可以完美运行。 有人可以帮我将数据粘贴到筛选列表中

2 个答案:

答案 0 :(得分:1)

处理变量数组中的字符串条件检查和字符串解析例程,这些例程已填充并返回到工作表 en masse ,这应该会显着加快速度。

Sub MergeCols()
    Dim cell As Range, pos As Long
    Dim vSTRs As Variant, v As Long

    With Worksheets("Sheet2")   '<-set this worksheet reference properly!
        With .Range(.Cells(2, 2), .Cells(Rows.Count, 3).End(xlUp))
            vSTRs = .Value2
            For v = LBound(vSTRs, 1) To UBound(vSTRs, 1)
                If CBool(InStr(1, vSTRs(v, 1), Chr(32))) Then
                    pos = InStrRev(vSTRs(v, 1), Chr(32))
                    vSTRs(v, 1) = Join(Array(Left(vSTRs(v, 1), pos - 1), vSTRs(v, 2), _
                                        Mid(vSTRs(v, 1), pos + 1)), Chr(32))
                ElseIf CBool(Len(Trim(vSTRs(v, 1)))) Then
                    vSTRs(v, 1) = Join(Array(vSTRs(v, 1), vSTRs(v, 2)), Chr(32))
                End If
            Next v
            .Columns(1) = Application.Index(vSTRs, 0, 1)
        End With
    End With

End Sub

如果B列中有空白,我添加了不处理的条件。原件不需要这个,因为它是从B列顶部向下定义操作范围。我的例程将范围定义为从B2到C列的底部(从底部查看)。

答案 1 :(得分:0)

这是一个非常普遍的问题,当我在谷歌上搜索时,很多人都面临着这个问题。但我无法找到一个完美的解决方案。

p.code  product_name  packing  price  tax   manufacturer
abc12   shampoo       100ml    49     5     abc pvt ltd
xyz98   powder        50gm     30     14.5  xyz pvt ltd
fdc321  conditioner   75ml     90     14.5  fdc
abc21   oil           100ml    49     5     abc pvt ltd

我刚刚放下几列和一行。但会有更多。 现在当我根据税收过滤列时,只显示5%的税项(或任何其他过滤条件)。

然后将条目复制到另一张表格进行编辑。当我尝试将其粘贴回过滤列表时,条目不会粘贴到可见的过滤行中。相反,它们甚至粘贴在过滤器隐藏的不可见行上。

我正在寻找一种方法来粘贴来自不同表格的数据

sheet1有完整的数据

sheet2包含从sheet1

中提取的数据

这两张纸具有相同的列和顺序,因为sheet2的数据是使用过滤条件从sheet1的数据中提取的。

但是当我要粘贴数据时,sheet1的数据将使用相同的标准进行过滤,该标准用于提取sheet2的数据。所以不。 sheet1中的可见行数等于总数。 sheet2中的行数。

我希望这可以解释这种情况。如果仍有一些混乱,你可以看看这个Video demonstrating the problem