0

我正在努力推导出一种对其他工作表上的单元格范围进行动态间接引用的方法。希望有任何建议,详情如下:

该工作簿包括 4 个工作表(产品 1、产品 2、产品 3、仓库)。仓库工作表包含以下公式,用于从三个产品工作表(源自http://exceltactics.com/make-filtered-list-sub-arrays-excel-using-small/)中为每个仓库填充库存清单。这是单元格 B3 中的公式:

=IFERROR(INDEX(INDIRECT(B$2&"!B$3:B$400"),SMALL(IF(INDIRECT(B$2&"!$C$3:$C$400")=$B$1,ROW(INDIRECT(B$2&"!B$3:B$400"))-ROW(INDIRECT(B$2&"!B$3"))+1),ROWS(Product1!$B$3:$B3))),"")

在哪里:

仓库-->$B$1 = 仓库1 或仓库2

仓库-->B2、C2、D2 = Product1、Product2、Product3 的列标题

产品表--> B 列 = 序列号

产品表--> C 列 = 位置(仓库 1、仓库 2)

目前,我必须为每一行修改公式的最后一部分:ROWS(Product1!$B$3:$B3), ROWS(Product2!$B$3:$B3), ROWS(Product3!$B$3:$B3)。我正在尝试像代码的其他部分一样将其动态链接到列标题(例如ROW(INDIRECT(B$2&"!B$3:B$400"))。我被卡住了,因为范围$B3必须随每一行而变化,而其他行是静态的,并且可以很好地包含在引号中。

这项工作很重要,因为我希望能力较弱的用户能够将公式复制到新列而无需修改它。感谢您对此的任何想法!

4

2 回答 2

1

有多种方法可以将递增数字引入INDIRECT 函数的字符串连接。我更喜欢一个简单的ROW 函数,比如在填满时ROW(1:1)返回1, 2, 3, ...。在您的情况下,k yu 将从ROW(3:3).

... -ROW(INDIRECT(B$2&"!B"&ROW(3:3)))+1),
..., ROWS(INDIRECT(B$2&"!B3:B"&ROW(3:3))),"")

只是提醒; 在用文本描述的单元格地址上留下绝对 $ 名称可能有助于直观地提醒什么可以前进到下一个(相对)或不前进(绝对),但代表行或列的文本实际上永远不会改变,所以它们至少有点多余。

于 2015-04-04T05:25:43.320 回答
0

您可以修改INDIRECT()公式以考虑当前单元格的行号,例如:

=INDIRECT(B$2&"!B$"&ROW()&":B$"&(ROW()+397))

或者,您可以使用OFFSET()函数来移动每一行的引用:

=OFFSET(INDIRECT(B$2&"!B$3:B$400"),ROW()-3,0)
于 2015-04-03T09:17:04.607 回答