Excel:如果单元格与列名称匹配,则返回列中的所有值

只是一个简单的问题:

如果单元格与另一个工作簿中的列名称匹配,如何返回列中的所有值?

所以这就是我想要做的:

有两个工作簿“wb1”和“wb2”。 所以在wb2中有1000列,每列中的第一行是产品ID。 在每一列中都有几百行的销售数字。

我想要做的是,在wb1中,在单元格A1中input产品ID。 并希望在wb1的这一列中,它将返回wb2中的所有销售号码,其中wb1中的产品ID与wb2中的名称匹配。

无论如何,我可以做到这一点?

许多小伙子。

干杯,Alex

qucik解决scheme可以大大改善,我会假设你有wb1开放,因为这是你把你的价值

private Sub SUBNAME() dim prodID As String sales As Range Workbooks.open("location of file C:\Desktop\wb2.xls") Workbooks("wb1.xls").activate prodID = Range("a1").value Workbooks("wb2.xls").activate Range("a1").select Selection.Find(What:=prodID, After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False).Activate sales = ActiveCell.Column Columns(sales).copy Workbooks("wb1.xls").activate Columns("B").select Selection.Insert shift:=xlRight 

此代码很弱,您需要始终input产品ID到wb1范围a1。 在wb2中,如果有多个同名产品,则只有第一个将被复制并打印到wb1。 您可以使用macros对话框运行这个maro,或者您可以添加一个命令button到wb1并单击它。 你也可以用事件处理程序(Worksheet_SelectionChange(ByVal Target,As Range)

解决scheme简单 只要确保你有足够的线来覆盖最长的情况(最大的行数)。

在Wb1中,单元格A2然后向下拖动:

 =IFERROR(HLOOKUP([Wb1]Sheet1!$A$1, [Wb2]Sheet2!$A$1:$BBB2, ROW(), 0), "") 

我们来解释一下。 HLOOKUP对第一个参数中提供的值进行水平查找。 它在所提供的范围的第一行中search作为其第二个参数。 第三个是参数2中相对于范围起点的返回行数,1是第一行。 最后,0指定要完全匹配。 如果你指定1作为最后一个参数,它也将接受不同的情况下有效。

请注意,我没有locking第二个参数的最后一行,以便在拖动公式时范围会增大。

这不是一个像VBA那样“干净”的解决scheme(你需要确保你已经拖动了你的公式足够多,以获得所有的行),但它会简单,这是我喜欢去的东西。

编辑:还添加了IFERROR()删除#N #N/A s为了能够做计算。