Excel 动态表:间接和索引,用于比较数组公式中的单元格内容

Excel 动态表:间接和索引,用于比较数组公式中的单元格内容,excel,excel-formula,array-formulas,excel-indirect,Excel,Excel Formula,Array Formulas,Excel Indirect,概述:我正在尝试使用间接与索引、行和列相结合的方法来实现动态表 问题: 对于工作表1中给定列的每个单元格,读取其左侧单元格的内容 比较工作表2中列的内容与已读列的内容 对于每个匹配,从工作表2中获取变量的值2 计算找到的最大值,将其复制到工作表1原始单元格中 我是怎么做的(显然是错的): {=MAX(IF('Worksheet 2'!$A$4:$A$101=INDIRECT(ADDRESS(ROW();COLUMN()-1;4)); 'Worksheet 2'!$D$4:$D$101))} 我

概述:我正在尝试使用间接与索引、行和列相结合的方法来实现动态表

问题

  • 对于工作表1中给定列的每个单元格,读取其左侧单元格的内容
  • 比较工作表2中列的内容与已读列的内容
  • 对于每个匹配,从工作表2中获取变量的值2
  • 计算找到的最大值,将其复制到工作表1原始单元格中
  • 我是怎么做的(显然是错的)

    {=MAX(IF('Worksheet 2'!$A$4:$A$101=INDIRECT(ADDRESS(ROW();COLUMN()-1;4)); 'Worksheet 2'!$D$4:$D$101))}
    
    我希望它能做什么:

  • 间接(地址(行();列()-1;4))
    ——读取工作表1左侧单元格的内容

  • “工作表2”$A$4:$A$101=间接(地址(行();列()-1;4))
    ——获取一个真/假值数组,其中在工作表2列A包含先前值的地方找到真

  • 如果('工作表2'!$A$4:$A$101=间接(地址(行();列()-1;4));'工作表2'!$D$4:$D$101)
    ——对于每个TRUE,从工作表2的D列中提取相应的值

  • {=MAX(如果('工作表2'!$A$4:$A$101=间接(地址(行();列()-1;4));'工作表2'!$D$4:$D$101))
    ---从列D提取的值中,取最大值

  • 我得到的:一个值!错误


    有人能给我解释一下原因并提出一个可行的替代方案吗?

    这是因为你的
    间接
    单元格引用是数组公式的一部分,所以你得到的是
    {“A1”}
    而不是
    “A1”

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

    {=MAX(IF('Worksheet 2'!$A$4:$A$101=MAX(INDIRECT(ADDRESS(ROW();COLUMN()-1;4))); 'Worksheet 2'!$D$4:$D$101))}
    
    (看起来您的几个括号也放错了位置。)

    更新:

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


    从公式的编写方式来看,
    INDIRECT
    似乎还有第二个参数,即
    “工作表2”$D$4:$D$101
    。这是个错误吗?您的公式中可能缺少一个右括号。@ImaginaryHuman072889-括号在翻译中丢失了,我刚刚更正了它-不幸的是,这不是问题所在,但感谢您让我注意到我的间接指向单元格将包含文本而不是数字。有解决办法吗?使用MAX总是给我0作为返回值。我让它使用索引来访问该值!谢谢,这很有魅力,让我对数组公式的行为有了深刻的了解(:酷!我已经用更好的版本更新了我的答案。
    =MAX(IF('Worksheet 2'!$A$4:$A$101=INDIRECT(ADDRESS(MAX(ROW());MAX(COLUMN())-1;4)); 'Worksheet 2'!$D$4:$D$101))