我在单元格A1:F4中有如下数据。
Quarter | FY15Q4 | FY16Q1 | FY16Q2 | FY16Q3 | FY16Q4
Company A | 0.34% | 0.48% | 0.55% | 0.68% | ------
Company B 0.32% 0.36% 0.34% 0.35% 0.35%
Company C | 1.18% |------ |----- |----- |
我正在尝试查找每行最后4列中最近的非缺失值的平均值。所以:
FY15Q4,我希望平均值为0.34%,0.32%和1.18%
2016财年第一季度,我希望平均值分别为0.48%,0.36%和1.18%
2016财年第二季度,我希望平均值分别为0.55%,0.34%和1.18%
2016财年第三季度,我希望平均值分别为0.68%,0.35%和1.18%
2016财年第四季度,我希望平均值分别为0.68%和0.33%(C公司没有最近4Q的数据,因此从平均值的计算中可以忽略不计)
以下数组公式适用于FY16Q3 ......
{=AVERAGE(IF(COUNT(B2:E2)=0,"",INDIRECT(ADDRESS(ROW(B2:E2),MAX((B2:E2<>"")*COLUMN(B2:E2))))),IF(COUNT(B3:E3)=0,"",INDIRECT(ADDRESS(ROW(B3:E3),MAX((B3:E3<>"")*COLUMN(B3:E3))))),IF(COUNT(B4:E4)=0,"",INDIRECT(ADDRESS(ROW(B4:E4),MAX((B4:E4<>"")*COLUMN(B4:E4))))))}
但对于2016财年第四季度,相同的公式结构......
=AVERAGE(IF(COUNT(C2:F2)=0,"",INDIRECT(ADDRESS(ROW(C2:F2),MAX((C2:F2<>"")*COLUMN(C2:F2))))),IF(COUNT(C3:F3)=0,"",INDIRECT(ADDRESS(ROW(C3:F3),MAX((C3:F3<>"")*COLUMN(C3:F3))))),IF(COUNT(C4:F4)=0,"",INDIRECT(ADDRESS(ROW(C4:F4),MAX((C4:F4<>"")*COLUMN(C4:F4))))))
返回#VALUE错误值。
似乎AVERAGE函数通常很好地处理空白单元格(“”)值,因为阵列公式的复杂性增加了。
关于如何在没有(i)使用find-and-replace来替换“”并使用真正空白的单元格的情况下如何使其工作的任何建议;或(ii)使用VBA?
当然必须有一种方法只使用公式来完成这项工作......
答案 0 :(得分:0)
没有数组公式的一种方法是使用辅助单元格。我设置了另一个具有相同列/行标题的表。
然后在我放的第一个单元格中:
=IFERROR(INDEX($A:$F,MATCH($A12,$A:$A,0),IF(MATCH(1E+99,INDEX($A:$F,MATCH($A12,$A:$A,0),1):INDEX($A:$F,MATCH($A12,$A:$A,0),MATCH(B$11,$1:$1,0)))<=MATCH(B$11,$1:$1,0)-4,NA(),MIN(MATCH(1E+99,INDEX($A:$F,MATCH($A12,$A:$A,0),1):INDEX($A:$F,MATCH($A12,$A:$A,0),MATCH(B$11,$1:$1,0))),MATCH(B$11,$1:$1,0)))),"")
然后向上和向下拖动以使用正确的数字填充表格:
然后它只是一个简单的AVERAGE()公式:
=AVERAGE(B12:B14)
拖动时会忽略空白单元格。
@Jeeped和@XOR LX提出了一些警告。
0
格式化为其他内容时才有效。