将特定数据从一个工作表复制到另一个工作表

时间:2012-10-17 10:53:46

标签: excel excel-vba pivot-table worksheet-function array-formulas vba

主表上的2列:

col1      col2
Apple     Fruit
Spinach   Veg
Orange    Fruit
Potatoe   Veg   
Pear      Fruit
Bannana   Fruit
Carrot    Veg
Potataoe  Veg

说我想将所有Fruit数据复制到另一个工作表,将所有Veg数据复制到第三个工作表。有没有办法做到这一点?它需要一个宏还是我能以某种方式做VLOOKUP

此外,我需要将其设置为动态,因此如果添加了新行,则会更新相应的工作表。

3 个答案:

答案 0 :(得分:2)

你可以使用这个公式的可怕怪物:

=INDEX($B$2:$B$9, SMALL(IF("veg"=$A$2:$A$9, ROW($A$2:$A$9)-MIN(ROW($A$2:$A$9))+1, ""), ROW(A1)))

使用Ctrl + Shift + Enter将其作为数组公式输入。

HorribleMonstrousityFormula

我在这里找到了公式: http://www.get-digital-help.com/2009/10/25/how-to-return-multiple-values-using-vlookup-in-excel/

这可能不是这个公式的最佳版本或最优雅的版本(这是一个常见的公式任务),但它将完成工作。

答案 1 :(得分:2)

我使用数据透视表(使用Excel 2007),但每次修改/扩展源时都需要刷新,并且要关注表/数据范围:不要停止任何添加:

SO12932741 example

答案 2 :(得分:1)

  • 右键单击工作表标签
  • 查看代码
  • 复制并粘贴以下代码

每当列B更改代码

  1. 自动筛选“Fruit”的B列,然后将记录复制到工作表2列A:B
  2. 自动过滤“Veg”列B,然后将记录复制到第2页A:B
  3. <强>代码

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng1 As Range
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Set rng1 = Intersect([B:B], Target)
    If rng1 Is Nothing Then Exit Sub
    Set ws1 = Sheets(2)
    Set ws2 = Sheets(3)
    ws1.[A:B].ClearContents
    ws2.[A:B].ClearContents
    Application.ScreenUpdating = False
    ActiveSheet.AutoFilterMode = False
    With ActiveSheet.Range("A:B")
    .AutoFilter Field:=2, Criteria1:="Fruit"
    .Copy ws1.[a1]
    .AutoFilter Field:=2, Criteria1:="Veg"
    .Copy ws2.[a1]
    End With
    ActiveSheet.AutoFilterMode = False
    Application.ScreenUpdating = True
    End Sub