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

时间:2014-08-20 14:57:29

标签: excel return-value

只是一个简单的问题:

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

所以这就是我想要做的事情:

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

我想要做的是,在wb1中,在单元格A1中输入产品ID。希望在wb1的那一列中,它将返回wb2中的所有销售数字,其中wb1中的产品ID与wb2中的名称相匹配。

无论如何,我能做到吗?

很多人。

干杯, 亚历

2 个答案:

答案 0 :(得分:1)

qucik解决方案可以大大改进 我会假设你已经打开了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

此代码很弱,您需要始终将产品ID输入到wb1范围a1。在wb2中,如果有多个具有相同名称的产品,则只会将第一个产品复制并打印到wb1。您可以使用宏语录框运行此maro,也可以向wb1添加命令按钮并单击它。您还可以使用事件处理程序(Worksheet_SelectionChange(ByVal Target,As Range)

执行此操作

答案 1 :(得分:0)

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

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

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

我们来解释一下。 HLOOKUP对第一个参数中提供的值进行水平查找。它在作为第二个参数提供的范围的第一行中搜索。第三个是相对于参数2中的范围的开始返回的行的编号,1是第一行。最后,0指定您想要完全匹配。如果指定1作为最后一个参数,它也会接受不同的情况作为有效。

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

这不是VBA可以做的“干净”的解决方案(你需要确保你已经将你的公式拖得足够远以获得所有行)但它将很多更简单,这是我喜欢的东西。

编辑:还添加了IFERROR()以删除#N/A以便能够进行计算。