在Excel 2010中创建连接列表,在列中搜索所有唯一值

时间:2014-09-18 17:48:20

标签: excel-2010

我有一个需要帮助的问题,我会尽力解释。

我正在使用Excel 2010.我有一个垂直列表,列出了产品编号以及它们在价格上出现的商店数量。例如:

亚马逊|产品A | $ 100

百思买|产品A | $ 200

目标|产品B | $ 300

目标|产品A | $ 100

沃尔玛|产品B |娜

百思买|产品C |娜

我想在每一行中编写一个基本上搜索我的列表的公式,并给出一个产品A出现并且有价格的每个事件的列表。因此,在产品A所在行的下一个单元格中,我希望它列出"亚马逊百思买目标。"并且其中包含产品B的任何行,我希望它说" Target" (但不是沃尔玛,因为没有价格),而产品C应该返回na或错误或其他东西,因为没有价格

我希望在尽可能少的额外列中执行此操作,但我愿意接受任何有用的内容!如果有任何宏/ VBA解决方案,我也会乐于学习。我对VBA编码不太熟悉,但想了解更多。

3 个答案:

答案 0 :(得分:0)

数据透视表看起来非常合适,尽管你提到“尽可能少的额外列”可能是一个问题。但是,PT不需要在同一张纸上。

SO25919207 example

经过一些澄清并假设Amazon在A2中并且数据透视表(在F1中)是命名范围Larray,请在D2中尝试:

=IF(C2="na","",TRIM(SUBSTITUTE(IF(VLOOKUP(B2,Larray,2,0)>0,G$2)&" "&IF(VLOOKUP(B2,Larray,3,0)>0,H$2)&" "&IF(VLOOKUP(B2,Larray,4,0)>0,I$2)&" "&IF(VLOOKUP(B2,Larray,5,0)>0,J$2),"FALSE",""))) 

复制到西装。

答案 1 :(得分:0)

此公式将输出您需要的内容,但不会输出单个单元格。它将连续输出整个列表,如下所示:

1 |亚马逊|产品A | 100美元|亚马逊|百思买|目标

=IF(ISERROR(INDEX($A$1:$B$6;SMALL(IF(($B$1:$B$6=$B1)*($C$1:$C$6<>"na");ROW($A$1:$A$6));COLUMN($1:$6));1));"";INDEX($A$1:$B$6;SMALL(IF(($B$1:$B$6=$B1)*($C$1:$C$6<>"na");ROW($A$1:$A$6));COLUMN($1:$6));1))

但请注意,这是一个数组公式,因此存在一些困难,例如:

  • Ctrl + Shift + Enter执行而不是回车
  • 您应该选择要执行的公式范围,因为它会返回一个数组。
  • 如果您想更改公式,请不要忘记按Ctrl + Shift + Enter,否则您将看到有关仅更改数组的一部分的错误

将表格与您问题中的数据一起使用 - 这就是您必须要做的事情:

  1. 把它放在D1
  2. 选择D1并使用CTRL + Shift +向右箭头选择整行
  3. 按Ctrl + Shift + Enter
  4. 现在D之后的每一列都包含您要搜索的列表中的值

    1. 在步骤3之后仍然选择行时,您应该双击选区右下角的小方块。这将填充并自动计算从1到6的所有行。
    2. 公式假定“na”用于检查失败。请注意,我使用了&lt;&gt;,因此它是完全匹配(之前或之后没有空格)

答案 2 :(得分:0)

感谢您的回复,我最终最终使用此网站的VBA代码来解决我的问题:

http://www.get-digital-help.com/2010/12/20/excel-udf-lookup-and-return-multiple-values-concatenated-into-one-cell/

关于范围这是非常挑剔的代码,并且在较大的电子表格上计算得不是很快,但它确实完成了工作。

我最终不得不编写一个特定的连接公式,结合我正在寻找的因素,并在第二列中重复此连接以使代码正常工作,但它最终只向我的电子表格添加了3个额外的列并最终得到了我正在寻找的结果,如上所述。

希望这有助于其他人!