INDIRECT function to reference cell ranges of other worksheets

做~自己de王妃 提交于 2019-12-12 01:49:28

问题


I am struggling to deduce a way to make dynamic INDIRECT references to cell ranges on other worksheets. Would appreciate any suggestions, details are:

The workbook includes 4 worksheets (Product1, Product2, Product3, Warehouses). The Warehouses sheet contains the following formula to populate an inventory list for each warehouse from the three product worksheets (derived from http://exceltactics.com/make-filtered-list-sub-arrays-excel-using-small/). This is the formula in cell 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))),"")

Where:

Warehouses-->$B$1 = Warehouse1 or Warehouse2

Warehouses-->B2, C2, D2 = Column headers for Product1, Product2, Product3

Product Sheets-->Column B = Serial #

Product Sheets-->Column C = Location (Warehouse1, Warehouse2)

Currently, I have to amend the last part of the formula for each row: ROWS(Product1!$B$3:$B3), ROWS(Product2!$B$3:$B3) , ROWS(Product3!$B$3:$B3).I am trying to dynamically link it to the column header like the other parts of the code (e.g. ROW(INDIRECT(B$2&"!B$3:B$400")). I'm stuck though because the range $B3 has to change with each row, whereas the others are static and are fine enclosed in the quotations.

This effort is important because I want less capable users to be able to copy the formula to new columns without having to amend it. Appreciate any thoughts on this!


回答1:


There are a number of ways to introduce an incrementing number into the INDIRECT function's string concatenation. I prefer a simple ROW function like ROW(1:1) which returns 1, 2, 3, ... when filled down. In your case,k yu would start at ROW(3:3).

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

Just a reminder; leaving the absolute $ designations on the cell addresses that are described with text may be useful as a visual reminder as to what may advance to the next (relative) or not (absolute) but the text representing the row or column is never going to actually change so they are at least a bit superfluous.




回答2:


You can modify your INDIRECT() formula to take into account the row number of current cell, for example:

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

Alternatively, you could use OFFSET() function to shift your reference with each row:

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


来源:https://stackoverflow.com/questions/29428904/indirect-function-to-reference-cell-ranges-of-other-worksheets

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!