INDIRECT 函数引用其他工作表的单元格范围
INDIRECT function to reference cell ranges of other worksheets
我正在努力推断出一种方法来动态间接引用其他作品中的单元格范围sheet。如有任何建议,将不胜感激,详情如下:
工作簿包括 4 个工作sheet(Product1、Product2、Product3、Warehouses)。仓库 sheet 包含以下公式,用于从三个产品工作 sheet(派生自 http://exceltactics.com/make-filtered-list-sub-arrays-excel-using-small/)为每个仓库填充库存列表。这是单元格 B3 中的公式:
=IFERROR(INDEX(INDIRECT(B&"!B:B0"),SMALL(IF(INDIRECT(B&"!$C:$C0")=$B,ROW(INDIRECT(B&"!B:B0"))-ROW(INDIRECT(B&"!B"))+1),ROWS(Product1!$B:$B3))),"")
其中:
仓库-->$B$1 = 仓库 1 或仓库 2
仓库-->B2、C2、D2 = Product1、Product2、Product3 的列 header
产品表-->B 列 = 序列号#
产品表-->C 列 = 位置(仓库 1、仓库 2)
目前,我必须修改每行公式的最后一部分:ROWS(Product1!$B:$B3)
、ROWS(Product2!$B:$B3)
、ROWS(Product3!$B:$B3)
。我正在尝试动态地link它到 header 列,就像代码的其他部分一样(例如 ROW(INDIRECT(B&"!B:B0"))
。我被卡住了,因为范围 $B3
必须随着每一行而改变,而其他的是静态的并且是很好地包含在引号中。
这项工作很重要,因为我希望能力较差的用户能够将公式复制到新列而无需修改。感谢对此的任何想法!
您可以修改 INDIRECT()
公式以考虑当前单元格的行号,例如:
=INDIRECT(B&"!B$"&ROW()&":B$"&(ROW()+397))
或者,您可以使用 OFFSET()
函数来移动每一行的引用:
=OFFSET(INDIRECT(B&"!B:B0"),ROW()-3,0)
有多种方法可以将递增数字引入 INDIRECT function's string concatenation. I prefer a simple ROW function,例如 ROW(1:1)
其中 returns 1, 2, 3, ...时往下填。在您的情况下,k yu 将从 ROW(3:3)
.
开始
... -ROW(INDIRECT(B&"!B"&ROW(3:3)))+1),
..., ROWS(INDIRECT(B&"!B3:B"&ROW(3:3))),"")
提醒一下;在用文本描述的单元格地址上保留绝对 $ 名称可能有助于视觉提醒,提醒什么可以前进到下一个(相对)或不(绝对)但表示行或列的文本是 从不 会真正改变,所以它们至少有点多余。
我正在努力推断出一种方法来动态间接引用其他作品中的单元格范围sheet。如有任何建议,将不胜感激,详情如下:
工作簿包括 4 个工作sheet(Product1、Product2、Product3、Warehouses)。仓库 sheet 包含以下公式,用于从三个产品工作 sheet(派生自 http://exceltactics.com/make-filtered-list-sub-arrays-excel-using-small/)为每个仓库填充库存列表。这是单元格 B3 中的公式:
=IFERROR(INDEX(INDIRECT(B&"!B:B0"),SMALL(IF(INDIRECT(B&"!$C:$C0")=$B,ROW(INDIRECT(B&"!B:B0"))-ROW(INDIRECT(B&"!B"))+1),ROWS(Product1!$B:$B3))),"")
其中:
仓库-->$B$1 = 仓库 1 或仓库 2
仓库-->B2、C2、D2 = Product1、Product2、Product3 的列 header
产品表-->B 列 = 序列号#
产品表-->C 列 = 位置(仓库 1、仓库 2)
目前,我必须修改每行公式的最后一部分:ROWS(Product1!$B:$B3)
、ROWS(Product2!$B:$B3)
、ROWS(Product3!$B:$B3)
。我正在尝试动态地link它到 header 列,就像代码的其他部分一样(例如 ROW(INDIRECT(B&"!B:B0"))
。我被卡住了,因为范围 $B3
必须随着每一行而改变,而其他的是静态的并且是很好地包含在引号中。
这项工作很重要,因为我希望能力较差的用户能够将公式复制到新列而无需修改。感谢对此的任何想法!
您可以修改 INDIRECT()
公式以考虑当前单元格的行号,例如:
=INDIRECT(B&"!B$"&ROW()&":B$"&(ROW()+397))
或者,您可以使用 OFFSET()
函数来移动每一行的引用:
=OFFSET(INDIRECT(B&"!B:B0"),ROW()-3,0)
有多种方法可以将递增数字引入 INDIRECT function's string concatenation. I prefer a simple ROW function,例如 ROW(1:1)
其中 returns 1, 2, 3, ...时往下填。在您的情况下,k yu 将从 ROW(3:3)
.
... -ROW(INDIRECT(B&"!B"&ROW(3:3)))+1),
..., ROWS(INDIRECT(B&"!B3:B"&ROW(3:3))),"")
提醒一下;在用文本描述的单元格地址上保留绝对 $ 名称可能有助于视觉提醒,提醒什么可以前进到下一个(相对)或不(绝对)但表示行或列的文本是 从不 会真正改变,所以它们至少有点多余。