Excel 或 VBA 代码用于匹配两个表中的所有数据

Excel 或 VBA 代码用于匹配两个表中的所有数据

我有一个空缺职位(工作类别),我输入该职位作为搜索值(即 5077)。在同一行中,我列出了所有其他可以根据技能和工作要求申请该职位的较低级别职位(工作类别)。

我可以匹配搜索值(JobClass)并返回同一行中列出的所有适用代码,但我的问题是尝试获取一个公式或 VBA 代码,它将搜索员工烘焙器中返回的代码列表并返回当前持有检索到的代码及其信息的人员。

表格数据: 表格数据

答案1

当您说“在同一行”时,您肯定是指“列”,所以我会继续假设这一点。

您的输出表需要几项内容,其中第一项(所有其他内容都从其底部开始)是其他可接受的 JobClass 条目列表。因此,在输出表的该列中,放置一个返回该 JobClass 数据列表的公式:

=FILTER(HLOOKUP(JobClass,SearchTable,SEQUENCE(13,1,4,1),FALSE),HLOOKUP(JobClass,SearchTable,SEQUENCE(13,1,4,1),FALSE)<>0)

它假设您创建了两个范围,一个范围JobClass是标有该标记的条件单元格,或者使用其单元格地址,另一个范围肯定是SearchTable此处调用的范围,该范围将包括以条目为标题的所有列JobClass以及从该条目到“Code13”行的所有行。

在第一行中查找HLOOKUP()条件的 JobClass 值,找到后,读取第 4 行至第 16 行。FILTER()从结果中删除空单元格。搜索“5023”将返回 6 个结果。搜索“5077”将返回 13 个结果。

填充下表的该列后,您可以考虑其左侧的代码列。除非您希望全部填充,否则可以通过根据需要生成最多 13 个数字(1-13)来解决此问题。以下公式可以巧妙地做到这一点:

=FILTER(SEQUENCE(13),B33:B45<>"")

它用于FILTER()创建一个包含 13 个数字 (1-13) 的列表,并检查 JobClass 返回的列中是否存在“非空白”值,仅返回该数字列表中的多个值。因此,没有 JobClass 的任何行也没有代码条目。

即使 JobClass 列中有 1 个或 6 个项目,如果有人想填充它,那么只SEQUENCE()需要公式的一部分。

这样您将得到 1、2、3、...、13。按如下方式格式化该列: "Code"#0Excel 将显示这些数字,并在其前面加上单词“Code”。

其余信息只是HLOOKUP()基于 JobClass 标准的简单信息。它们只需要返回找到的列的第二部分或第三部分,如下所示:

=HLOOKUP(JobClass,SearchTable,2,false)

=HLOOKUP(JobClass,SearchTable,3,false)

由于该表中其余数据来自其他来源,因此我将这些数据留给您。

相关内容