从命名范围获取相对于另一个的单元格

时间:2017-02-05 12:12:30

标签: excel excel-formula

使用MS Excel 2007.我使用命名范围SysData

=MAX(SysData)

返回最大值。

如何将单元格中的值返回到此最大值的右侧和左侧?

我尝试使用以下方法获取包含最大值的单元格的引用作为起点:

=CELL("address",INDEX(SysData,MATCH(MAX(SysData),SysData,0)))

但这会返回N / A.

以下是我的电子表格示例:

spreadsheet image

SysData是B3:B5,B6的公式为max(SysData)

正如你所看到的 - 它没有用 我也尝试了替代公式

=ADDRESS(ROW(SysData)+INDEX(SysData,MAX(SysData))-1,COLUMN(SysData))

也提供了#REF!

2 个答案:

答案 0 :(得分:0)

这会起作用吗?

INDEX(sysdata,,MATCH(MAX(sysdata),sysdata,FALSE)-1)

匹配返回列号,添加或删除1以获取任一侧的单元格值。

对于评论不起作用,图像显示工作表,系统数据范围为D2:L2。

enter image description here

答案 1 :(得分:0)

如果数据在列中,您可以使用:

=ADDRESS(ROW(SysData)+INDEX(SysData,MAX(SysData))-1,COLUMN(SysData))

而且,如果你的数据是一行,你可以使用它:

=ADDRESS(ROW(SysData),COLUMN(SysData)+INDEX(SysData,MAX(SysData))-1)

获得单元格后,您可以使用OFFSETINDIRECT获取相对于包含MAX的单元格的单元格。例如。数据在一行的位置:

=OFFSET(INDIRECT(ADDRESS(ROW(SysData),COLUMN(SysData)+INDEX(SysData,MAX(SysData))-1)),0,-1)

enter image description here

修改

如果数据在单个2d范围内,则公式略有不同:

识别最大数量的单元格:

=ADDRESS(
  SUMPRODUCT(--(SysData=MAX(SysData))*ROW(SysData)),
  SUMPRODUCT(--(SysData=MAX(SysData))*COLUMN(SysData))
)

然后,要获得一些偏移,您可以使用INDIRECTOFFSET执行相同的过程:

=OFFSET(
  INDIRECT(
    ADDRESS(
      SUMPRODUCT(--(SysData=MAX(SysData))*ROW(SysData)),
      SUMPRODUCT(--(SysData=MAX(SysData))*COLUMN(SysData))
    )
  ),
 0,-1)

两个SUMPRODUCT公式基本上是查看数据数组,例如

{1,2,3; 4,5,6; 7,8,9; 0,10,0}

并说根据是否与TRUE匹配,将其转换为FALSEMAX的数组:

{FALSE,FALSE,FALSE; FALSE,FALSE,FALSE; FALSE,FALSE,FALSE; FALSE,TRUE,FALSE}

然后双一元运算符转换为01,例如

{0,0,0; 0,0,0; 0,0,0; 0,1,0}

因为ROW(SysData)COLUMN(SysData)本身是命名范围的绝对行和列引用的数组,所以将这些数组乘以0/1数组会返回MAX值的位置

在下面的示例中,SysData数组为B2:D5,ROW数组为:

{2,3,4,5}

列数组是:

{2,3,4}

截图:

enter image description here