dynamic表:INDIRECT和INDEX来比较数组公式中的单元格内容

概述 :我正在尝试使用INDIRECT与INDEX,ROW和COLUMN结合来获得一个dynamic表。

问题

  1. 对于Worksheet1中给定列的每个单元格,请在其左侧读取该单元格的内容。
  2. 将Worksheet2中的列的内容与读取的内容进行比较。
  3. 对于每个匹配,从Worksheet2中获取一个variables的值。
  4. 评估find的值的最大值,将其复制到Worksheet1原始单元格中。

我怎么做(显然是错的)

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

我期望它做什么:

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

  2. 'Worksheet 2'!$A$4:$A$101=INDIRECT(ADDRESS(ROW();COLUMN()-1;4)) —获得一个TRUE / FALSE值的数组,其中TRUE是在Worksheet 2列A包含值previousl

  3. IF('Worksheet 2'!$A$4:$A$101=INDIRECT(ADDRESS(ROW();COLUMN()-1;4)); 'Worksheet 2'!$D$4:$D$101)每个TRUE,从工作表2的列D中提取相应的值

  4. {=MAX(IF('Worksheet 2'!$A$4:$A$101=INDIRECT(ADDRESS(ROW();COLUMN()-1;4)); 'Worksheet 2'!$D$4:$D$101))} —从COLUMN D提取的值中,取MAX

我得到了什么 :一个#VALUE! 错误。

有人能解释我为什么提出一个可行的替代?

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

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

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

(看起来你也有一些括号不合适)

更新:

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

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