INDIRECT函数引用其他工作表的单元格范围

我正在努力推导出一种方法来dynamicINDIRECT引用其他工作表上的单元格范围。 将不胜感激的任何build议,细节是:

该工作簿包括4个工作表(Product1,Product2,Product3,仓库)。 “仓库”工作表包含以下公式,用于从三个产品工作表(来自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 =产品1,产品2,产品3的列标题

产品表 – >栏B =序列号

产品表 – > C列=地点(仓库1,仓库2)

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

这一努力非常重要,因为我希望能力较差的用户能够将公式复制到新列而不必修改它。 欣赏任何想法!

在INDIRECT函数的string连接中引入递增数字有很多种方法。 我更喜欢像ROW(1:1)这样简单的ROW函数 ,它在返回时填充1,2,3,…。 就你而言,k yu将从ROW(3:3)开始ROW(3:3)

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

只是提醒; 在用文本描述的单元格地址上留下绝对的$指定可能对于可能前进到下一个(相对)或不是(绝对)的视觉提醒是有用的,但是表示行或列的文本永远不会实际改变,所以他们至less有点多余。

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

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

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

 =OFFSET(INDIRECT(B$2&"!B$3:B$400"),ROW()-3,0)