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

时间:2015-08-04 15:08:32

标签: excel excel-formula

我在查找允许我获取数据列表并返回与参考单元格相关的所有值的函数时遇到了一些麻烦。它的概念就像Vlookup一样,除了Vlookup只返回它看到的第一个值。

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

这基本上就是我的工作簿的样子:

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

我试图找到一个函数来回复:

    A       B       C
 1 Pen    Blue     200
 2 Pen    Black    180
 3 Pen    Green    170

我需要它做的就是将A列的值识别为“Pen”并在B列中带回颜色.C列然后我可以使用Vlookup来获取。

我觉得我错过了一些东西来帮助别人理解并能够帮助我,但我无法确定它是什么......如果你需要别的东西作为澄清让我知道 < / p>

3 个答案:

答案 0 :(得分:2)

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

首先,在第一列填写数字1到&#34; Pen&#34;在您的查找范围内。

然后,输入公式:

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

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

然后按ctrl + shift + enter使其成为数组公式。

&#34; if&#34;返回一个行号数组,其中单元格值是&#34; Pen&#34; (如果需要,显然可以更改为其他值)。然后小的返回第n个最小值,这就是为什么我们需要第一列为数字1到#34; Pen&#34;在范围内。然后索引返回该行的指定范围内的结果单元格。请注意,此公式假设您的表格从A1开始(根据您的示例),但如果情况并非如此,则可以轻松调整。

然后你可以将它向右和向下拖动,只要你将$保持在现在相同的位置,公式就会适应。

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

     A       B       C        D
 11  1      Pen    Blue     200
 12  2      Pen    Black    180
 13  3      Pen    Green    170

答案 1 :(得分:1)

您可以连接a和b列中的值 = A1&安培;&#34;&#34;&安培; B1 对于第一行(并将其放下) 然后,您可以使用计算列创建一个轴 我添加了一个逗号,以便您可以在使用data-&gt;的单词后将其拆分。 text to columns-&gt; delimited-&gt; comma-&gt;光洁度

答案 2 :(得分:1)

由于你对vba没问题,你可以将所需的所有值与其他值一起放在一个数组中。由于我不确定您拥有多少数据,因此我会做一个初步的。

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

你现在应该填充数组。您可以在任何地方清空它或者从数组中查询值以进行更多操作。