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

时间:2015-04-03 08:37:55

标签: excel excel-indirect

我正在努力推断出一种在其他工作表上对单元格范围进行动态INDIRECT引用的方法。非常感谢任何建议,详情如下:

工作簿包括4个工作表(Product1,Product2,Product3,Warehouses)。仓库表包含以下公式,用于从三个产品工作表(从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 = Warehouse1或Warehouse2

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

产品表 - > B列=序列号

产品表 - > C列=位置(Warehouse1,Warehouse2)

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

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

2 个答案:

答案 0 :(得分:1)

有许多方法可以将递增数字引入INDIRECT function's字符串连接。我更喜欢简单的ROW function,例如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))),"")

提醒一下;将绝对$指定留在用文本描述的单元格地址上可能有用作为可以提前到下一个(相对)或不进行(绝对)的内容的视觉提醒,但表示行或列的文本从不实际上会改变,所以至少有点多余。

答案 1 :(得分:0)

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

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

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

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