Dynamic Table: INDIRECT 和 INDEX 比较数组公式中的单元格内容
Dynamic Table: INDIRECT and INDEX to compare cell content in array formula
概述:我正在尝试将 INDIRECT 与 INDEX、ROW 和 COLUMN 结合使用以获得动态 table 工作。
问题:
- 对于 Worksheet1 中给定列的每个单元格,读取其左侧单元格的内容。
- 将 Worksheet2 中的一列内容与读取的内容进行比较。
- 对于每个匹配项,从 Worksheet2 中获取一个变量的值。
- 计算找到的最大值,将其复制到 Worksheet1 原始单元格中。
我是怎么做到的(显然是错误的):
{=MAX(IF('Worksheet 2'!$A:$A1=INDIRECT(ADDRESS(ROW();COLUMN()-1;4)); 'Worksheet 2'!$D:$D1))}
我希望它做什么:
INDIRECT(ADDRESS(ROW();COLUMN()-1;4))
--- 读取工作表1左侧单元格的内容
'Worksheet 2'!$A:$A1=INDIRECT(ADDRESS(ROW();COLUMN()-1;4))
--- 获取 TRUE/FALSE 值的数组,其中在工作表 2 列 A 包含值 previous
[=53 的位置找到 TRUE =]
IF('Worksheet 2'!$A:$A1=INDIRECT(ADDRESS(ROW();COLUMN()-1;4)); 'Worksheet 2'!$D:$D1)
--- 对于每个 TRUE,从工作表 2
的 COLUMN D 中提取相应的值
{=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))}
(看来你还有几个括号错位了。)
更新:
这是一个更好的版本,适用于您的文本列(在 ROW
和 COLUMN
函数上使用 MAX
):
=MAX(IF('Worksheet 2'!$A:$A1=INDIRECT(ADDRESS(MAX(ROW());MAX(COLUMN())-1;4)); 'Worksheet 2'!$D:$D1))
概述:我正在尝试将 INDIRECT 与 INDEX、ROW 和 COLUMN 结合使用以获得动态 table 工作。
问题:
- 对于 Worksheet1 中给定列的每个单元格,读取其左侧单元格的内容。
- 将 Worksheet2 中的一列内容与读取的内容进行比较。
- 对于每个匹配项,从 Worksheet2 中获取一个变量的值。
- 计算找到的最大值,将其复制到 Worksheet1 原始单元格中。
我是怎么做到的(显然是错误的):
{=MAX(IF('Worksheet 2'!$A:$A1=INDIRECT(ADDRESS(ROW();COLUMN()-1;4)); 'Worksheet 2'!$D:$D1))}
我希望它做什么:
INDIRECT(ADDRESS(ROW();COLUMN()-1;4))
--- 读取工作表1左侧单元格的内容
[=53 的位置找到 TRUE =]'Worksheet 2'!$A:$A1=INDIRECT(ADDRESS(ROW();COLUMN()-1;4))
--- 获取 TRUE/FALSE 值的数组,其中在工作表 2 列 A 包含值 previousIF('Worksheet 2'!$A:$A1=INDIRECT(ADDRESS(ROW();COLUMN()-1;4)); 'Worksheet 2'!$D:$D1)
--- 对于每个 TRUE,从工作表 2 的 COLUMN D 中提取相应的值
{=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))}
(看来你还有几个括号错位了。)
更新:
这是一个更好的版本,适用于您的文本列(在 ROW
和 COLUMN
函数上使用 MAX
):
=MAX(IF('Worksheet 2'!$A:$A1=INDIRECT(ADDRESS(MAX(ROW());MAX(COLUMN())-1;4)); 'Worksheet 2'!$D:$D1))