对我的情况不同的方法

在Excel表中我有列,每列代表一个星期的数量。 我想要计算每行和每周的所谓4 wk平均值,这是我使用的公式: ((value * Tvalue)+(value * Tvalue)+(value * Tvalue)+(value * Tvalue) )/(Tvalue) (这不是实际的公式,而是简化的,这不是很重要)。

这是检查,使事情有点复杂。 如果weeknr的值为零,则跳过它,但是如果下一个值也是零,则只需跳过该公式,并将其设置为零(或“false”等文本)。 所以另外一个必须要考虑的事情是,如果一个值为零,那么下一个星期的值将被取代。

示例(请参阅包含文件):我想为第12周的第三个值计算公式(mov 4wk avg),这将使公式(0.2 * 6)+(0.3 * 6)现在在第14周时为零我跳过它,公式将是: (0.2 * 6)+(0.3 * 6)+(0.6 * 6)+(0.9 * 6)/(6) 。 希望这是有道理的。

现在我在VBA中做了很多variables和if语句。 有没有更简单更有效的方法去做到这一点?

示例表https://dl.dropbox.com/u/3121767/Book1.xlsx

PS我知道示例表是2007/2010版本,但我需要在2003年完成这个

可以使用数组公式(公式窗口中的Ctrl-Shift-Enter,曲线括号将由Excel本身插入,而不是由用户插入):

A3:第3行的T值
B3:E3:第3行的单周值

 ={IF(OR(SUM(IF((B3:C3)=0;1;0))>1;SUM(IF((C3:D3)=0;1;0))>1;SUM(IF((D3:E3)=0;1;0))>1);"Fail";(B3*$A3+C3*$A3+D3*$A3+E3*$A3)/$A3)} 

该公式需要几周,如果对的总和为0,整个公式将失败。 如果只有一个零,则一切将保持不变,因为0 *值等于跳过。 该公式可以复制到右侧和下侧。

更新的考试可在http://www.bumpclub.ee/~jyri_r/Excel/4_week_average.xls

我尝试了两个步骤

1)按照以下规则转换每个单元格:

 if myweek = 0 and mynextweek = 0 then myweek = 0 elseif myweek = 0 and mynextweek <> 0 then myweek = mynextweek else myweek = myweek endif 

在Sheet2!B2中input=IF(AND(Sheet1!B2=0,Sheet1!C2=0),0,IF(Sheet1!B2=0,Sheet1!C2,Sheet1!B2))并复制到所有单元格Sheet1 dat存在,连同A列中的基本值的副本一起存在

2)然后我创build一个4周的标准移动平均线,对于每一组4列,从列M中的W15开始…如果您在Sheet1或Sheet2中显示此内容