将 OFFSET 与 3D 范围一起使用(跨多个工作表的范围)
Using OFFSET with a 3D range (range across multiple sheets)
我有一个数据库,其中的相关数据在多个 sheet 的同一行中,每隔一列都有数据。我一直在尝试将 3D 范围与 AVERAGE/SUM 和 OFFSET 一起使用,但我似乎无法弄清楚。我在 OFFSET 部分收到#VALUE 错误。这是我一直在使用的设置。
=AVERAGE(OFFSET('Sheet 1:Sheet 4'!A1,0,COLUMN(A1)*2-1))
sheet 名称中确实有 space,因此我上面公式中单词 Sheet 和数字之间的 space 是故意的。我已经尝试了仅使用 average/sum 函数的 3D 范围,并且效果很好。 3D 范围是否与 OFFSET 函数不兼容?
尝试...
=AVERAGE(N(OFFSET(INDIRECT("'"&{"Sheet1","Sheet2"}&"'!A1"),0,COLUMN(A1)*2-1)))
或
=AVERAGE(N(OFFSET(INDIRECT("'"&$G:$G&"'!A1"),0,COLUMN(A1)*2-1)))
...其中 G2:G3 包含 sheet 个名称。注意第二个公式需要用CONTROL+SHIFT+ENTER
来确认,而不仅仅是ENTER
.
希望对您有所帮助!
第一次编辑
虽然数组公式仍然是必需的,但您可以避免使用 CONTROL+SHIFT+ENTER 确认公式,并且您可以避免在单元格区域中列出您的 sheet 姓名。
1)首先定义名称SheetNames
如下...
Refers to: ={"Instrument Partners","Supply Partners","Repair Partners","Wholesale Partners"}
2) 然后尝试...
=AVERAGE(INDEX(N(OFFSET(INDIRECT("'"&SheetNames&"'!A1"),0,COLUMN(A1)*2-2)),0))
...只需要用ENTER
.
确认
第二次编辑
"'"&SheetNames&"'!A1"
returns 以下文本值数组...
"'Instrument Partners'!A1"
"'Supply Partners'!A1"
etc...
此文本值数组传递给 INDIRECT,returns 以下引用数组...
'Instrument Partners'!A1
'Supply Partners'!A1
etc...
反过来,这个引用数组被传递给 OFFSET,它也是returns一个基于行和列偏移量的引用数组...
OFFSET('Instrument Partners'!A1,0,COLUMN(A1)*2-2) --> 'Instrument Partners'!A1
OFFSET('Supply Partners'!A1,0,COLUMN(A1)*2-2) --> 'Supply Partners'!A1
etc...
然后我们通过将这个引用数组传递给 N() 函数来检索值...
N('Instrument Partners'!A1) --> returns actual value from the cell reference
N('Supply Partners'!A1) --> returns actual value from the cell reference
etc...
然后我们将这个值数组传递给 INDEX 函数,该函数 returns 一个值数组并允许使用 ENTER 确认公式,而不是 CONTROL+SHIFT+ENTER。
最后,值数组被传递给 AVERAGE 函数,returns 实际平均值。
我有一个数据库,其中的相关数据在多个 sheet 的同一行中,每隔一列都有数据。我一直在尝试将 3D 范围与 AVERAGE/SUM 和 OFFSET 一起使用,但我似乎无法弄清楚。我在 OFFSET 部分收到#VALUE 错误。这是我一直在使用的设置。
=AVERAGE(OFFSET('Sheet 1:Sheet 4'!A1,0,COLUMN(A1)*2-1))
sheet 名称中确实有 space,因此我上面公式中单词 Sheet 和数字之间的 space 是故意的。我已经尝试了仅使用 average/sum 函数的 3D 范围,并且效果很好。 3D 范围是否与 OFFSET 函数不兼容?
尝试...
=AVERAGE(N(OFFSET(INDIRECT("'"&{"Sheet1","Sheet2"}&"'!A1"),0,COLUMN(A1)*2-1)))
或
=AVERAGE(N(OFFSET(INDIRECT("'"&$G:$G&"'!A1"),0,COLUMN(A1)*2-1)))
...其中 G2:G3 包含 sheet 个名称。注意第二个公式需要用CONTROL+SHIFT+ENTER
来确认,而不仅仅是ENTER
.
希望对您有所帮助!
第一次编辑
虽然数组公式仍然是必需的,但您可以避免使用 CONTROL+SHIFT+ENTER 确认公式,并且您可以避免在单元格区域中列出您的 sheet 姓名。
1)首先定义名称SheetNames
如下...
Refers to: ={"Instrument Partners","Supply Partners","Repair Partners","Wholesale Partners"}
2) 然后尝试...
=AVERAGE(INDEX(N(OFFSET(INDIRECT("'"&SheetNames&"'!A1"),0,COLUMN(A1)*2-2)),0))
...只需要用ENTER
.
第二次编辑
"'"&SheetNames&"'!A1"
returns 以下文本值数组...
"'Instrument Partners'!A1"
"'Supply Partners'!A1"
etc...
此文本值数组传递给 INDIRECT,returns 以下引用数组...
'Instrument Partners'!A1
'Supply Partners'!A1
etc...
反过来,这个引用数组被传递给 OFFSET,它也是returns一个基于行和列偏移量的引用数组...
OFFSET('Instrument Partners'!A1,0,COLUMN(A1)*2-2) --> 'Instrument Partners'!A1
OFFSET('Supply Partners'!A1,0,COLUMN(A1)*2-2) --> 'Supply Partners'!A1
etc...
然后我们通过将这个引用数组传递给 N() 函数来检索值...
N('Instrument Partners'!A1) --> returns actual value from the cell reference
N('Supply Partners'!A1) --> returns actual value from the cell reference
etc...
然后我们将这个值数组传递给 INDEX 函数,该函数 returns 一个值数组并允许使用 ENTER 确认公式,而不是 CONTROL+SHIFT+ENTER。
最后,值数组被传递给 AVERAGE 函数,returns 实际平均值。