excel - 如何在索引函数中嵌套替代公式?
问题描述
我正在使用索引匹配功能处理 Excel 工作表。因为我希望它在我复制公式时增加列,所以我使用了下面的公式:
=INDEX(CLASSIFCATION!SUBSTITUTE(ADDRESS(1,ROW(A2),4),1,""):SUBSTITUTE(ADDRESS(1,ROW(A2),4),1,""),MATCH(DISTRIBUTION!P$19,CLASSIFCATION!$A:$A,0))
提供更多细节:
粘贴到 P20 行时,公式应为:
=INDEX(CLASSIFCATION!B:B,MATCH(DISTRIBUTION!P$19,CLASSIFCATION!$A:$A,0))
在第 21 行它应该是
=INDEX(CLASSIFCATION!C:C,MATCH(DISTRIBUTION!P$19,CLASSIFCATION!$A:$A,0))
等等..
其中 CLASSIFICATION 和 DISTRIBUTION 是同一工作簿中的两张工作表。
我收到一条错误消息,提示“此公式有问题”。我无法使用评估公式来检查错误是什么。
解决方案
在 INDEX 中包含完整范围,然后使用第三个 Criterion 告诉 INDEX 哪个列:
=INDEX(CLASSIFCATION!A:XFD,MATCH(DISTRIBUTION!P$19,CLASSIFCATION!$A:$A,0),ROW(2:2))
现在,随着公式被复制/向下拖动,它将引用下一列。
另一种方法是使用 VLOOKUP:
=VLOOKUP(DISTRIBUTION!P$19,A:XFD,ROW(2:2),FALSE)
这将做同样的事情。
至于为什么你的公式不起作用ADDRESS()
,它是易变的,在使用多个时应该避免,返回一个字符串。连接的字符串不是可行的范围引用。您需要将整个包装在 INDIRECT 中,这也是易变的:
INDIRECT("CLASSIFCATION!" & SUBSTITUTE(ADDRESS(1,ROW(A2),4),1,"") & ":" & SUBSTITUTE(ADDRESS(1,ROW(A2),4),1,""))
但除此之外,它还使用 volatile 函数,这些函数会在 Excel 每次重新计算时重新计算,而不仅仅是在基础数据发生变化时重新计算。
另一种较短的 volatile 方法是 OFFSET:
OFFSET(CLASSIFCATION!A:A,0,ROW(1:1))
虽然这比 INDEX 短,但它也是易变的,在多个公式中使用时应避免使用。
推荐阅读
- jquery - 增加 $.get 的查询字符串的长度
- javascript - 每当我单击元素外部时,它应该关闭
- go - 使用 cgo 库的应用程序的静态 golang 构建
- php - 使用 Oracle 和 PHP:在 SQL Developer 中工作,但 PHP 文件结果 ORA-00900:无效语句
- swagger - Swagger UI 将参数标记为组
- java - 如何从请求中的文件中获取 Rest-controller 中的 InputStream?
- laravel - 选择具有雄辩关系的列
- c++ - 浮点/整数类型转换的可靠溢出检测
- dji-sdk - 使用 DJI Onboard SDK 部署降落伞
- android - 初始化我的适配器时出现 ReResources$NotFoundException