【问题标题】:VBA: vlookup through multiple columnsVBA:通过多列进行vlookup
【发布时间】:2019-10-20 00:41:32
【问题描述】:

这是我的第一个问题,所以我会尽力格式化。 我想在不止一列中使用vlookup 函数。在大数据集的公式中似乎不可能做到,所以也许有 VBA 知识的人可以帮助我。

在我的 excel 文件中,我有两个电子表格: Sheet1 有一列“A”,有 16868 个不同的进程 ID。 Sheet2 的列从“A”到“HX”,其中“A:HW”是不同的进程 ID(每列有不同的行数),在“HX”列中,我有一个用于特定进程行的区域。

我想要实现的是为 sheet1 列“A”执行vloop,它将查找表 sheet2 中的每条记录并在找到时返回“HX”。

例如: 我正在table_array sheet2“A:HX”中的sheet1中寻找“A2”单元格。如果找到它,则从“HX”列返回同一行中的单元格。这里的技巧是当查找值不在 sheet2 列“A”中时,它应该在列“B”中查找,然后是“C”,依此类推,直到“HW”。有一个选项,看起来值可能根本不在 sheet2 中,然后公式应该返回“0”。 是否可以在 VBA 或 excel 公式中执行此操作?

【问题讨论】:

    标签: excel vba vlookup


    【解决方案1】:

    首先,请不要使用VLOOKUP。永远。

    INDEX/MATCH 组合在各方面总是更好。它更快、更灵活、更健壮,因为它不会在插入列时中断。它也(可以说)更容易使用,因为您不需要计算列数。

    无论如何,回到手头的问题。您可以为此使用INDEX/SUMPRODUCT 组合:

    =INDEX(<range of return values>),SUMPRODUCT(--MAX((<range to search in>=<value to search for>)*ROW(<range to search in>)))-(ROW(<range to search in>)-1))
    

    SUMPRODUCT 返回找到该值的最后一个行号。

    最后一位-(ROW(&lt;range to search in&gt;)-1)只是为了使返回值相对于搜索范围(而不是绝对行号。

    INDEX 然后使用这个值从 HX 列中选择一个值。

    【讨论】:

    • 好。很高兴我能帮忙:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    相关资源
    最近更新 更多