如何从二维数据表中提取相应的列和行图?

时间:2018-01-02 18:05:01

标签: excel vba excel-vba excel-formula

的窥视。

我目前有一个二维数据表,它测量两个输入的灵敏度,关于利润。

整个数据表是(D183:AI234)。我从可以获得max()值获得的最大利润,我想知道我可以创建什么公式,所以我可以在数据表(其中两个)中获得相应的值,从而产生由来自整个数据表的max()

我尝试过的事情:hlookupvlookup从行和列获取输入,但从两者获得N / A.

例如,要根据look_up值获取行的输入,我使用了以下公式:=HLOOKUP(E237,D183:AI234,1,0)

亲切的问候

数据表:

data table

1 个答案:

答案 0 :(得分:2)

这是使用数组函数执行此操作的一种hacky方法。我认为有一些更清洁的东西。

修改我误读了原来的问题。

我假设数据本身在D183:AI234范围内 - y类别的标签在C183:C234中,x类别的标签在D182:AI182中。

要查找最大值的行:MAX((D183:AI234 = MaxVal)*ROW(D183:D234))

使用行号,有多种选项可以实际访问y标签中的值:

  1. 你可以从表格的左上角OFFSET(假设是 C182)。 OFFSET(C182, MAX((D183:AI234 = MaxVal)*ROW(D183:D234)) - ROW(C182), 0)
  2. 您可以使用INDIRECTADDRESS访问带标签的单元格,行号以及标签的列标识符。 INDIRECT(ADDRESS(MAX((D183:AI234 = MaxVal)*ROW(D183:D234)), COLUMN(C182)))
  3. 您可以确定标签之间的相对位置,并使用INDEX和行号来检索值。 INDEX(C183:C234,MAX((D183:AI234 = MaxVal)*ROW(D183:D234)), COLUMN(C182)) - ROW(C182))
  4. 请注意,这些都是数组函数,必须与CTRL + SHIFT + ENTER一起输入。

    我更喜欢INDEX方法,因为它是非易失性的(OFFSETINDIRECT都是易失性函数,并且每次对工作表/ excel进行更改时都会重新计算重新计算)我一般认为这是更好的做法。

    要获取x值,请使用MAX((D183:AI234 = MaxVal)*COLUMN(D183:AI183))标识最大值列,并调整您选择的三种方法中的任何一种。

    原始回答,找到下面的max(但不是相关类别值)的地址

    要查找要与值匹配最大值的布尔数组乘以最大条目的行,因此行数为(D183:AI234 = MaxVal),因此ROW(D183:D234)。该乘法的结果是(0,0,..,最大值的行,......)的向量,因此您可以使用MAX来查找行号。

    该列也是如此,但您可以使用COLUMN(D183:AI183)。然后,您可以使用ADDRESS函数获取单元格地址。

    全部放在一起......

    =ADDRESS(MAX((D183:AI234 = MaxVal)*ROW(D183:D234)),MAX((D183:AI234 = MaxVal)*COLUMN(D183:AI183)))

    必须输入数组函数(CTRL + SHIFT + ENTER)