在一个工作簿中,我有两个电子表格。工作
表 A(“主表”)如下所示 - 它显示了一个主分支及其子分支。
工作表 B(“查询”)如下所示:
问题是“查询”的 C 列中的许多分支都是子分支,而这些分支仅位于“主”的 D、E、F 或 G 列中。我想在“查询”的 A 列中执行的操作是在 C 列中显示我的子分支的主分支。
我曾尝试过类似这样的方法测试两列,但它返回的是主分支名称,如果是子分支,则只返回数字:
=IFERROR(VLOOKUP(B:B,Master!A:G,3,FALSE), VLOOKUP(B:B,Master!D:D,1,FALSE))
任何帮助都值得感激!
答案1
这是数组公式解决方案。选择A2
查询表并将以下内容粘贴到公式栏中。
=INDEX(Master!$C$1:$C$9,MAX(IF(ISERROR(FIND("|"&B2&"|","|"&Master!$A$1:$A$9&"|"&Master!$D$1:$D$9&"|"&Master!$E$1:$E$9&"|"&Master!$F$1:$F$9&"|"&Master!$G$1:$G$9&"|")),-1,1)*ROW(Master!$A$1:$A$9)))
按Ctrl++以数组公式形式输入。然后向下Shift填充Enter列。
解释:
此公式将为主表中的每个商店创建一个串联的分行和子分行代码数组。代码由一个在任何代码中均未出现的字符分隔 ( |
)。例如,数组中的第一个条目将是
|42981|0|0|21743|0|
然后,公式从查询表 B 列中搜索用分隔符括起来的代码(例如|26183|
)。对于任何匹配项,匹配项的行号都存储在数组中。对于不匹配项,-1
则存储。
MAX
该行号和 -1 数组的值被获取并传递给函数,INDEX
该函数在主表的 C 列中查找特定索引。如果-1
传递给INDEX
函数,即未找到匹配的代码,则返回错误。
答案2
这是一个可以轻松扩展其他子列的解决方案:
=OFFSET(INDEX(MainList,IF(SUMPRODUCT(--(SubTable=a2))<>1,NA(),SUMPRODUCT(ROW(SubTable)*(SubTable=a2))-ROW(SubTable)+1)),0,2)
MainList:主分支 ID 的命名范围(A2:Axxx)
SubTable:子条目的命名范围(d2:gxxx)