将特定数据从一张纸复制到另一张

母版上的2列:

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

假设我想将所有Fruit数据复制到另一张纸上,并将所有Veg数据复制到第三张纸上。 有没有办法做到这一点? 它需要一个macros,或者我可以以某种方式做一个VLOOKUP

此外,我需要这是dynamic的,所以如果添加一个新的行相应的工作表被更新。

你可以用这个可怕的怪物:

 =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的formsinput数组公式。

HorribleMonstrousityFormula

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

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

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

SO12932741的例子

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

每当列B被更改的代码

  1. 自动过滤列B为“水果”,然后将logging复制到工作表2列A:B
  2. AutoFilters列B为“Veg”,然后将logging复制到第2列A:B

 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