对我的情况有不同的看法

时间:2012-11-09 09:18:31

标签: excel vba excel-formula excel-2003

在excel表上的

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

这是使事情变得更复杂的检查。如果weeknr的值为零,则跳过它,但如果下一个值也为零,则只需跳过公式all并将其设为零(或类似“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中使用了很多变量和很多if语句。 是否有更简单有效的方法来解决这个问题?

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

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

2 个答案:

答案 0 :(得分:0)

可以使用数组公式(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 :(得分:0)

我尝试了两步法

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我输入=IF(AND(Sheet1!B2=0,Sheet1!C2=0),0,IF(Sheet1!B2=0,Sheet1!C2,Sheet1!B2))并复制到Sheet1 dat中存在的所有单元格,以及A列中基本值的副本

2)然后我在4周内创建一个标准移动平均值,每组4列,从M列中的W15开始...如果你在Sheet1或Sheet2中显示这个问题