函数类似于VLookup,但返回相关的每个值

我遇到了一些麻烦find一个函数,将允许我拿一个数据列表,并返回所有相关的参考单元格的值。 它的想法就像一个Vlookup,除了Vlookup只返回它看到的第一个值。

我想过使用数据透视表和/或在列表中使用filter,但由于工作簿的复杂性,我遇到了问题。

这实际上是我的工作簿的样子:

ABC 1 Pen Blue 200 2 Marker Red 150 3 Pen Black 180 4 Pen Green 170 5 Marker Green 125 

我正试图find一个函数来返回这个:

  ABC 1 Pen Blue 200 2 Pen Black 180 3 Pen Green 170 

我所需要做的就是将列A的值识别为“Pen”,并在列B中将其带回。列CI然后可以使用Vlookup来获取。

我觉得我缺less一些东西来帮助别人理解并能够帮助我,但我不能确定它是什么…如果你需要别的东西作为澄清让我知道

这可以用数组公式来完成。

首先,在数据1中填写第一列到查找范围内的“笔”数。

然后,input公式:

 =INDEX(A$1:A$5,SMALL(IF($A$1:$A$5="Pen",ROW($A$1:$A$5),""),$A11)) 

其中$ A11是您从第一步开始列举的单元格。

然后按Ctrl + Shift + Enter使其成为一个数组公式。

“if”返回单元格值为“Pen”的行号数组(如果需要,显然可以将其更改为其他值)。 然后小的返回第n个最小,这就是为什么我们需要第一列是数字1到范围内的“笔”数字。 然后索引返回该行的指定范围内的结果单元格。 要小心,这个公式假设你的表从A1开始(如你的例子),但是如果不是这样的话,可以很容易地被调整。

然后,您可以将其拖动到右下方,只要您将$放在现在的相同位置,公式就会适应。

输出看起来像(假设你像我一样从A11开始):

  ABCD 11 1 Pen Blue 200 12 2 Pen Black 180 13 3 Pen Green 170 

您可以通过= A1&“,”&B1连接a和b列中的值。然后您可以使用计算的列创build一个数据透视表。我添加了一个逗号,以便您可以在data-> text to columns-> delimited-> comma-> finish

由于你可以使用vba,所以你可以把所有你想要的值放在一个数组中。 因为我不确定你有多less数据,所以我会做一个基本的。

 sub arrayFiller() dim i as integer dim MyArr() As string dim nbOfRows as long nbOfRows = Sheets("Sheet1").cells(SHEET.Rows.Count, 1).End(xlUp).Row Redim MyArr(nbOfRows , 3) 'Enough rows for you for i = 1 to nbOfRows 'dynamic so it works even if you change the list size if Sheets("Sheet1").range("A" & i).Value = "Pen" Then 'Change Pen to a dynamic reference or something else MyArr(i - 1, 0) = Sheets("Sheet1").range("A" & i).Value MyArr(i - 1, 1) = Sheets("Sheet1").range("B" & i).Value MyArr(i - 1, 2) = Sheets("Sheet1").range("C" & i).Value end if next i 'Now to empty to sheet 2 for i = 1 to Ubound(MyArr) Sheets("Sheet2").Range("A" & i).Value = MyArr(i - 1, 0) Sheets("Sheet2").Range("B" & i).Value = MyArr(i - 1, 1) Sheets("Sheet2").Range("B" & i).Value = MyArr(i - 1, 2) Next i End sub 

你现在应该填充arrays。 你可以在任何地方清空它,或者直接从数组中查询值以获得更多的操作。