如何查找值并将多个唯一值返回到单个单元格 - 以逗号分隔

如何查找值并将多个唯一值返回到单个单元格 - 以逗号分隔

我正在尝试查找保存在多个不同库存位置的唯一标识符(产品编号)。例如:

   __A__     __B__       __C__         
1   Item #   Warehouse   Description
2  ABCD-0001  WHSE 1      Red Label
3  ABCD-0001  WHSE 3      Red Label
4  QRST-0005  WHSE 2      2" Pipe
5  QRST-0005  WHSE 1      2" Pipe
6  LMNO-0002  WHSE 4      6" Pipe
7  LMNO-0002  WHSE 2      6" Pipe

我希望我的查找公式列出我的结果如下:

    __A__       __B__              __C__ 
1    ITEM      WAREHOUSE          Description
2  ABCD-0001   WHSE 1, WHSE 3      RED LABEL
3  QRST-0005   WHSE 2, WHSE 1      2" Pipe
4  LMNO-0002   WHSE 4, WHSE 2      6" Pipe

我见过的所有函数(INDEX-MATCH、VLOOKUP)都只能在不同的单元格中垂直列出结果。我想在同一个单元格中列出仓库,并用逗号分隔。

我尝试在 VBA 中创建一个用户定义函数,这是我在本网站的另一篇文章中看到的。但是,我仍然收到 #VALUE 错误。我认为这是由于我的示例中的字母所致,我看到的字母仅包含数字。

任何建议都将受到赞赏。

我最初使用的功能是从用户 BryanC 那里找到的。它看起来像这样:

   Public Function mylookup(inputrange As Range, match As Range) As String
   Dim arr() As Variant
   Dim d As Object
   Dim result As String
   Dim i As Integer
   Dim v As Variant
   Set d = CreateObject("Scripting.Dictionary")
   arr() = inputrange.Value

   For i = 1 To UBound(arr)
       If arr(i, 1) = match Then
           d(arr(i, 2)) = 1
       End If
  Next i
  For Each v In d.Keys()
          result = result & v & ","
  Next v
      result = Left(result, Len(result) - 1)

  mylookup = result

  End Function 

很可能我在 VBA 中正确编写了函数,但公式却不正确。为此,用户建议 =mylookup(A1:A7,B2)

答案1

这是一个简单但并不优雅的方法。使用下一列来构建仓库列表:

在此处输入图片描述

单元格 D2 中的公式为:

=IF(A2=A1,D1&", "&B2,B2)

根据需要将其复制到列中。它会查看产品编号是否与上一条记录相同。如果相同,它会将仓库连接到列表中。否则,它会开始一个新列表。

使用下一列创建一个过滤器,用于识别每个产品编号的最后一条记录:

在此处输入图片描述

单元格 E2 中的公式为:

=IF(A2=A3,"",1)

将其复制到列下。这将查看当前项目编号是否与下一个项目编号匹配。如果匹配,则将单元格留空。如果不匹配,则表示它是项目编号的最后一条记录,并且在 D 列中有完整的仓库列表,因此过滤器会得到一个1

现在,您可以过滤 E 以仅显示包含完整列表的记录。从那里,您可以通过复制、引用单元格或就地查看来创建所需的输出。要就地查看,请将 D 列移至左侧并隐藏 B 列。这是隐藏 E 列后的结果:

在此处输入图片描述

答案2

你的我的查找可以,你必须将其用作=mylookup(A1:B7,B2)

必须inputrange涵盖A 列和 B 列。您仅尝试使用 A 列。

相关内容