1

主表上的 2 列:

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

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

我还需要它是动态的,所以如果添加了新行,相应的工作表就会更新。

4

3 回答 3

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 将其作为数组公式输入。

可怕的怪物公式

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

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

于 2012-10-17T14:39:06.160 回答
2

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

SO12932741 示例

于 2012-10-17T18:17:58.647 回答
1
  • 右键单击您的工作表选项卡
  • 查看代码
  • 复制并粘贴下面的代码

每当更改 B 列时,代码

  1. 为“水果”自动筛选列 B,然后将记录复制到工作表 2 列 A:B
  2. 为“Veg”自动筛选列 B,然后将记录复制到工作表 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
于 2012-10-18T00:15:43.560 回答