VBA: 通过多列进行vlookup
VBA: vlookup through multiple columns
这是我的第一个问题,所以我会尽力格式化它。
我想在不止一列中使用 vlookup
函数。在大数据集的公式中似乎不可能做到,所以也许有 VBA 知识的人可以帮助我。
在我的 excel 文件中,我有两个电子表格:
Sheet1 的一列 "A" 具有 16868 个不同的进程 ID。
Sheet2 的列从 "A" 到 "HX",其中 "A:HW" 是不同的进程 ID(每列有不同的行数),在 "HX" 列中我有一个特定的区域进程行。
我想要实现的是对 sheet1 列 "A" 执行 vloop
,这将查找 table sheet2 和 return [=23= 中的每条记录] 找到的时候。
例如:
我在 table_array sheet2 "A:HX" 的 sheet1 中寻找 "A2" 单元格。如果找到它,则 return 单元格在同一行但来自列 "HX"。这里的技巧是当查找值不在 sheet2 列 "A" 中时,它应该在列 "B" 中进行 vlookup,然后是 "C" 等等,直到 "HW"。有一个选项,查找值可能根本不在 sheet2 中,然后公式应该 return“0”。
是否可以在 VBA 或 excel 公式中执行此操作?
首先,请永远不要使用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 returns 找到该值的最后一行编号。
最后一位-(ROW(<range to search in>)-1)
只是为了使返回值相对于搜索范围(而不是绝对行号。
INDEX 然后使用此值来select HX 列中的值。
这是我的第一个问题,所以我会尽力格式化它。
我想在不止一列中使用 vlookup
函数。在大数据集的公式中似乎不可能做到,所以也许有 VBA 知识的人可以帮助我。
在我的 excel 文件中,我有两个电子表格: Sheet1 的一列 "A" 具有 16868 个不同的进程 ID。 Sheet2 的列从 "A" 到 "HX",其中 "A:HW" 是不同的进程 ID(每列有不同的行数),在 "HX" 列中我有一个特定的区域进程行。
我想要实现的是对 sheet1 列 "A" 执行 vloop
,这将查找 table sheet2 和 return [=23= 中的每条记录] 找到的时候。
例如: 我在 table_array sheet2 "A:HX" 的 sheet1 中寻找 "A2" 单元格。如果找到它,则 return 单元格在同一行但来自列 "HX"。这里的技巧是当查找值不在 sheet2 列 "A" 中时,它应该在列 "B" 中进行 vlookup,然后是 "C" 等等,直到 "HW"。有一个选项,查找值可能根本不在 sheet2 中,然后公式应该 return“0”。 是否可以在 VBA 或 excel 公式中执行此操作?
首先,请永远不要使用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 returns 找到该值的最后一行编号。
最后一位-(ROW(<range to search in>)-1)
只是为了使返回值相对于搜索范围(而不是绝对行号。
INDEX 然后使用此值来select HX 列中的值。