指数匹配公式不断延续
Index Match Formula Keeps Continuing
我正在尝试创建一个仪表板,从下拉列表中选择一家公司后,它将列出该公司的所有银行家,其中数据位于另一个工作表选项卡上。
到目前为止,Index Match 公式似乎 运行 没问题,但是,它一直在 运行 并列出其他公司的银行家。我该如何解决这个问题?
文件可以在这里下载:https://drive.google.com/file/d/1fw7yh4AEF1vx3cuG6E_1RBTrTD_k74KD/view?usp=sharing
请将此公式应用于您的 sheet 的 E5 并复制下来。请注意,我创建了指代 RAW!B2:B279.
的命名范围 Coms
=IFERROR(IF(INDEX(Coms,MATCH($C,Coms,0)+ROW()-ROW(E))=$C,INDEX(Coms,MATCH($C,Coms,0)+ROW()-ROW(E)),""),"")
如果您愿意,可以将公式中的名称替换为您原来的地址,或者您定义命名范围以动态扩展。
您可以通过在单元格 E5
中粘贴以下公式来尝试以下方法:
=IFERROR(INDEX(RAW!$D:$D9,SMALL(IF(RAW!$B:$B9=$C,ROW(RAW!$D:$D9)-1,10^10),ROWS($A:A1))),"")
这是数组公式,需要按CTRL+SHIFT+ENTER[=42=提交] 然后根据需要将其复制下来。
解释:
INDEX
是根据行和列引用从定义的 GRID 中检索范围引用。
在这种特殊情况下,我们打算按顺序提取引用。这是由 SMALL(IF(RAW!$B:$B9=$C,ROW(RAW!$D:$D9)-1,10^10),ROWS($A:A1))
执行的
在这个公式中,第一部分是如下的ARRAY构建IF公式
IF(RAW!$B:$B9=$C,ROW(RAW!$D:$D9)-1,10^10)
测试 B 列中的单元格是否匹配标准值。如果该值匹配,则 ROW 引用被 return 编辑,如果不匹配,则它 return 是一个非常大的值,即 10^10。我们从行引用中减去 1,因为数据从第 2 行开始,所以原则上它应该是 (n-1)。这种安排为值 "Acorda".
生成一个类似 {1;2;3;4;5;6;7;10000000000....}
的数组
但是我们需要一次将一个元素传递给 INDEX 公式,所以这是通过 SMALL(IfBasedArray,k)
完成的,其中 k 部分由 ROWS($A:A1)
连续生成,从 1 开始并随着公式向下递增被复制,从而使 INDEX 达到 return 所需的结果。
最后,当比赛结束时,输入大数字,即 10000000000 并生成一个错误,然后由 IFERROR 公式将其覆盖为 return 空白!
比前面 2 个答案更简单的选项(不需要 CSE 数组输入公式或多个嵌套 INDEX/MATCHES)将有几个 'helper' 单元格 [=26] =]
起始行将是 =MATCH(C5,RAW!B:B,0)
这会在您的 RAW sheet 中找到所选公司出现的第一行
顾问计数将是 =COUNTIFS(RAW!B:B,C5)
计算该特定公司有多少行
然后单元格 E5 中的公式变为 =IF(D5<=$G,INDEX(RAW!$D:$D,$G+D5-1),"")
,您可以将其向下拖动。
screenshot showing formulas/result
我正在尝试创建一个仪表板,从下拉列表中选择一家公司后,它将列出该公司的所有银行家,其中数据位于另一个工作表选项卡上。
到目前为止,Index Match 公式似乎 运行 没问题,但是,它一直在 运行 并列出其他公司的银行家。我该如何解决这个问题?
文件可以在这里下载:https://drive.google.com/file/d/1fw7yh4AEF1vx3cuG6E_1RBTrTD_k74KD/view?usp=sharing
请将此公式应用于您的 sheet 的 E5 并复制下来。请注意,我创建了指代 RAW!B2:B279.
的命名范围Coms
=IFERROR(IF(INDEX(Coms,MATCH($C,Coms,0)+ROW()-ROW(E))=$C,INDEX(Coms,MATCH($C,Coms,0)+ROW()-ROW(E)),""),"")
如果您愿意,可以将公式中的名称替换为您原来的地址,或者您定义命名范围以动态扩展。
您可以通过在单元格 E5
中粘贴以下公式来尝试以下方法:
=IFERROR(INDEX(RAW!$D:$D9,SMALL(IF(RAW!$B:$B9=$C,ROW(RAW!$D:$D9)-1,10^10),ROWS($A:A1))),"")
这是数组公式,需要按CTRL+SHIFT+ENTER[=42=提交] 然后根据需要将其复制下来。
解释:
INDEX
是根据行和列引用从定义的 GRID 中检索范围引用。
在这种特殊情况下,我们打算按顺序提取引用。这是由 SMALL(IF(RAW!$B:$B9=$C,ROW(RAW!$D:$D9)-1,10^10),ROWS($A:A1))
在这个公式中,第一部分是如下的ARRAY构建IF公式
IF(RAW!$B:$B9=$C,ROW(RAW!$D:$D9)-1,10^10)
测试 B 列中的单元格是否匹配标准值。如果该值匹配,则 ROW 引用被 return 编辑,如果不匹配,则它 return 是一个非常大的值,即 10^10。我们从行引用中减去 1,因为数据从第 2 行开始,所以原则上它应该是 (n-1)。这种安排为值 "Acorda".
{1;2;3;4;5;6;7;10000000000....}
的数组
但是我们需要一次将一个元素传递给 INDEX 公式,所以这是通过 SMALL(IfBasedArray,k)
完成的,其中 k 部分由 ROWS($A:A1)
连续生成,从 1 开始并随着公式向下递增被复制,从而使 INDEX 达到 return 所需的结果。
最后,当比赛结束时,输入大数字,即 10000000000 并生成一个错误,然后由 IFERROR 公式将其覆盖为 return 空白!
比前面 2 个答案更简单的选项(不需要 CSE 数组输入公式或多个嵌套 INDEX/MATCHES)将有几个 'helper' 单元格 [=26] =]
起始行将是 =MATCH(C5,RAW!B:B,0)
这会在您的 RAW sheet 中找到所选公司出现的第一行
顾问计数将是 =COUNTIFS(RAW!B:B,C5)
计算该特定公司有多少行
然后单元格 E5 中的公式变为 =IF(D5<=$G,INDEX(RAW!$D:$D,$G+D5-1),"")
,您可以将其向下拖动。
screenshot showing formulas/result