首页 > 解决方案 > VBA:通过多列进行vlookup

问题描述

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

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

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

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

标签: excelvbavlookup

解决方案


首先,请永远不要使用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(<range to search in>)-1)只是使返回值相对于搜索范围(而不是绝对行号。

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


推荐阅读