【问题标题】:How to use vlookup if lookup value contains multiple values in single cell如果查找值在单个单元格中包含多个值,如何使用 vlookup
【发布时间】:2017-08-11 02:43:32
【问题描述】:

假设 Sheet1 有下表(数据范围单元格 A1 到 B4)

Fruits  | Colors
======= | =======
 Apple  | Red
 Mango  | Green
 Banana | Yellow

假设在 sheet2 中,单元格 A1 具有以下基于空格分隔的值(Apple Mango Banana)。

如何根据 A1 值在单元格 B2 中使用 VLookup,它可以为您提供相同顺序的结果(红绿黄)

【问题讨论】:

    标签: excel excel-formula vba


    【解决方案1】:

    Sheet2!B2 中的这个公式可以做到:

    =INDEX(sheet1!B:B,MATCH(TRIM(LEFT(SUBSTITUTE(A1, " ", REPT(" ", 100)),25)),sheet1!A:A,0)) & " " &
    INDEX(sheet1!B:B,MATCH(TRIM(MID(SUBSTITUTE(A1," ",REPT(" ",100)),100,25)),sheet1!A:A,0)) & " " &
    INDEX(sheet1!B:B,MATCH(TRIM(RIGHT(SUBSTITUTE(A1, " ", REPT(" ", 100)),25)),sheet1!A:A,0))
    

    当您有 3 个要匹配的值时,此公式可以正常工作(如果只有 2 个,则将重复第二个)。处理任意数量的值可能会更加复杂。

    当然,在 VBA 中使用 Split 函数会更简单,它会考虑任意数量的键,从而产生连接的值。您可以在宏中使用它:

    Sheet2.Range("B1").value = Join(Application.index(Sheet1.Columns("B"), _
        Application.match(Split(Sheet2.Range("A1")), Sheet1.Columns("A"), 0)), " ")
    

    当然,您可以将其调整为B 列中的任何单元格,使用Range("B" & i)Range("A" & i)...

    【讨论】:

    • 非常感谢。这就是我要找的。 excel公式和VBA都很重要。但是,VBA 更加动态,适合所有场景。
    • 一个快速的问题: - 如果查找表中没有一个值怎么办。假设 Sheet1 中不存在“Apple”?换句话说,我们如何在 VBA 中使用“if error”?
    • 没关系,我想。解决方案: Sheet2.Range("B2").Value = Trim(Join(WorksheetFunction.IfError(Application.Index(Sheet1.Columns("B"), _ Application.Match(Split(Sheet2.Range("A2") )), Sheet1.Columns("A"), 0)), " "), " "))
    • 我要粘贴这个(经过一些测试):检查它是否完全相同! Sheet2.Range("B1").value = Join(Application.IfError(Application.Index(Sheet1.Columns("B"), Application.Match(Split(Sheet2.Range("A1")), Sheet1.Columns("A"), 0)), ""), " ")
    • 再次在这里,当文本的开头或文本内部有额外的空格时,我收到一个错误,例如,sheet2 中的单元格 A1 是(Apple Mango)有额外的空间在开头和中间,VBA 代码不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多