1

在我有列的 excel 表上,每列代表一个星期数。我想为每行和每周计算所谓的 4 周平均值,这是我使用的公式: ((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 中使用大量变量和大量 if 语句来执行此操作。有没有更简单更有效的方法来解决这个问题?

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

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

4

2 回答 2

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*value 等于跳过。公式可以向右和向下复制。

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

于 2012-11-09T10:47:52.490 回答
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 中存在数据的所有单元格,以及 A 列中基值的副本

2)然后我为每组 4 列创建一个 4 周内的标准移动平均线,从 M 列中的 W15 开始...如果您在 Sheet1 或 Sheet2 中显示此内容,请注意品味

于 2012-11-09T11:37:59.717 回答