Dynamic Table: INDIRECT 和 INDEX 比较数组公式中的单元格内容

Dynamic Table: INDIRECT and INDEX to compare cell content in array formula

概述:我正在尝试将 INDIRECT 与 INDEX、ROW 和 COLUMN 结合使用以获得动态 table 工作。

问题

  1. 对于 Worksheet1 中给定列的每个单元格,读取其左侧单元格的内容。
  2. 将 Worksheet2 中的一列内容与读取的内容进行比较。
  3. 对于每个匹配项,从 Worksheet2 中获取一个变量的值。
  4. 计算找到的最大值,将其复制到 Worksheet1 原始单元格中。

我是怎么做到的(显然是错误的):

{=MAX(IF('Worksheet 2'!$A:$A1=INDIRECT(ADDRESS(ROW();COLUMN()-1;4)); 'Worksheet 2'!$D:$D1))}

我希望它做什么:

  1. INDIRECT(ADDRESS(ROW();COLUMN()-1;4)) --- 读取工作表1左侧单元格的内容

  2. 'Worksheet 2'!$A:$A1=INDIRECT(ADDRESS(ROW();COLUMN()-1;4)) --- 获取 TRUE/FALSE 值的数组,其中在工作表 2 列 A 包含值 previous

    [=53 的位置找到 TRUE =]
  3. IF('Worksheet 2'!$A:$A1=INDIRECT(ADDRESS(ROW();COLUMN()-1;4)); 'Worksheet 2'!$D:$D1) --- 对于每个 TRUE,从工作表 2

  4. 的 COLUMN D 中提取相应的值
  5. {=MAX(IF('Worksheet 2'!$A:$A1=INDIRECT(ADDRESS(ROW();COLUMN()-1;4)); 'Worksheet 2'!$D:$D1))} --- 从 COLUMN D 提取的值中,取最大值

我得到的结果:#VALUE!错误。

有人可以向我解释原因并提出可行的替代方案吗?

这是因为您的 INDIRECT 单元格引用是数组公式的一部分,所以您得到 {"A1"} 而不是 "A1",例如。

这可以通过使用 MAX 来解决,例如:

{=MAX(IF('Worksheet 2'!$A:$A1=MAX(INDIRECT(ADDRESS(ROW();COLUMN()-1;4))); 'Worksheet 2'!$D:$D1))}

(看来你还有几个括号错位了。)

更新:

这是一个更好的版本,适用于您的文本列(在 ROWCOLUMN 函数上使用 MAX):

=MAX(IF('Worksheet 2'!$A:$A1=INDIRECT(ADDRESS(MAX(ROW());MAX(COLUMN())-1;4)); 'Worksheet 2'!$D:$D1))