我正在尝试查找保存在多个不同库存位置的唯一标识符(产品编号)。例如:
__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 列。