Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于将多值单元格映射到多值结果的Excel公式或数据库查找?_Excel - Fatal编程技术网

用于将多值单元格映射到多值结果的Excel公式或数据库查找?

用于将多值单元格映射到多值结果的Excel公式或数据库查找?,excel,Excel,我有两张Excel工作表 例如,一个是映射 A Aardvark B Bear C Cow D Dog 另一个是表,我想自动完成它的第二列。第一列包含单个值,或以逗号分隔的多个值: A A, C D, B C 我想在第二列中得到的结果是 Aardvark Aardvark, Cow Dog, Bear Cow 只要第一列单元格只包含单个值,使用Excel VLOOKUP就很容易 但它不处理多个值(或者更确切地说,它将它们误解为单个值)并给出结果 Aardvark #NA #NA Cow

我有两张Excel工作表

例如,一个是映射

A Aardvark
B Bear
C Cow
D Dog
另一个是表,我想自动完成它的第二列。第一列包含单个值,或以逗号分隔的多个值:

A
A, C
D, B
C
我想在第二列中得到的结果是

Aardvark
Aardvark, Cow
Dog, Bear
Cow
只要第一列单元格只包含单个值,使用Excel VLOOKUP就很容易

但它不处理多个值(或者更确切地说,它将它们误解为单个值)并给出结果

Aardvark
#NA
#NA
Cow
我怎样才能得到想要的结果?可能使用更复杂的公式、不同的Excel函数、数组表,或者使用Excel中的MS-SQL客户端将Excel表作为数据库查询?

UDF方法:

Function MultiVL(v As Range, tbl As Range)

    Dim arr, rv As String, x As Integer, res

    rv = ""
    arr = Split(v.Value, ",")
    For x = LBound(arr) To UBound(arr)
        res = Application.VLookup(Trim(arr(x)), tbl, 2, False)
        rv = rv & IIf(rv <> "", ", ", "") & IIf(IsError(res), "?", res)
    Next x

    MultiVL = rv

End Function
多功能VL(v为量程,tbl为量程)
Dim arr,rv为字符串,x为整数,res
rv=“”
arr=拆分(v.值,“,”)
对于x=LBound(arr)到UBound(arr)
res=Application.VLookup(Trim(arr(x)),待定,2,假)
rv=rv&IIf(rv“,”,“,”)&IIf(iError(res),“?”,res)
下一个x
MultiVL=rv
端函数

先用“数据”、“文本到列…”拆分列?@Luca是的,谢谢这是我同时正在做的一个变通方法,这取决于我的真实数据集显然满足的约束:最多有3个值。拆分数据时,将使用多个VLOOKUP,然后连接结果。但希望有更优雅的东西。实际上,在最大3个值的约束下,更可重复的是使用左、中、右来分隔文本。这样我可以确保VLOOKUP正常工作。不过这仍然是一个解决方法。您可以使用一个UDF,它对值运行Split(),然后在数组中循环,对每个元素执行vlookup。连接并返回结果。@Tim Williams-Aha!用户定义函数(UDF)。这听起来像个方向。作为答案而不是评论发布,我可能会在下次在线时将其标记为已接受的答案。谢谢。在我意识到如何称呼它之后,它工作得很好。我被输入参数“v”上的“As Range”弄糊涂了——我的整个输入范围都被错误地调用了函数,因为它说的是“As Range”。然后我意识到即使是一个细胞也是一个范围。当我把它正确地称为=MultiVL(A2,Mapping)时,其中A2是一个输入单元,Mapping是映射范围,效果非常好。转到以显示注释或用法示例的值。但我明白了。谢谢还显示了记住什么是函数式编程的重要性。尽管这就是我喜欢Excel的原因,但当我看到一个程序程序(VBA代码)时,我忘记了从Excel公式的角度来看,它是一个函数。(即使VBA清楚地标记为“函数…结束函数”,也忘记了)。由于函数应该查找单个单元格(多个子字符串)的值,因此我也应该记住,第一个参数是单个单元格。顺便说一句,我还必须推荐您提供包含错误处理的函数。非常彻底!